

# 将 Lambda 与 Kubernetes 结合使用
<a name="with-kubernetes"></a>

您可以使用 [Amazon Controllers for Kubernetes（ACK）](https://aws-controllers-k8s.github.io/community/docs/community/overview/) 或 [Crossplane](https://docs.crossplane.io/latest/packages/providers/) 通过 Kubernetes API 部署和管理 Lambda 函数。

## Amazon Controllers for Kubernetes（ACK）
<a name="kubernetes-ack"></a>

您可以使用 ACK 部署和管理来自 Kubernetes API 的 Amazon 资源。通过 ACK，Amazon 为 Amazon 服务 [例如 Lambda、Amazon Elastic Container Registry（Amazon ECR）、Amazon Simple Storage Service（Amazon S3）和 Amazon SageMaker AI] 提供开源自定义控制器。每个支持的 Amazon 服务有自己的自定义控制器。在您的 Kubernetes 集群中，为每个您要使用的 Amazon 服务安装控制器。然后，创建[自定义资源定义（CRD）](https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/)来定义 Amazon 资源。

我们建议您使用 [Helm 3.8 或更高版本](https://helm.sh/docs/intro/install/)安装 ACK 控制器。每个 ACK 控制器都有自己的 Helm 图表，用于安装控制器、CRD 和 Kubernetes RBAC 规则。有关更多信息，请参阅 ACK  文档中的 [Install an ACK Controller](https://aws-controllers-k8s.github.io/community/docs/user-docs/install/)。

创建 ACK 自定义资源后，您可以像使用任何其他内置 Kubernetes 对象一样使用此资源。例如，您可以使用首选的 Kubernetes 工具链（包括 [kubectl](https://kubernetes.io/docs/reference/kubectl/)）部署和管理 Lambda 函数。

以下是通过 ACK 预置 Lambda 函数的示例用例：
+ 您的组织使用[基于角色的访问控制（RBAC）](https://kubernetes.io/docs/reference/access-authn-authz/rbac/)和[服务账户的 IAM 角色](https://docs.amazonaws.cn/eks/latest/userguide/iam-roles-for-service-accounts.html)来创建权限边界。借助 ACK，您可以为 Lambda 重用此安全模型，而无需创建新用户和策略。
+ 您的组织有一个 DevOps 流程，可以使用 Kubernetes 清单将资源部署到 Amazon Elastic Kubernetes Service（Amazon EKS）集群中。借助 ACK，您可以使用清单来配置 Lambda 函数，而无需创建单独的基础架构作为代码模板。

有关使用 ACK 的更多信息，请参阅 [ACK 文档中的 Lambda 教程](https://aws-controllers-k8s.github.io/community/docs/tutorials/lambda-oci-example/)。

## Crossplane
<a name="kubernetes-crossplane"></a>

[Crossplane](https://docs.crossplane.io/latest/packages/providers/) 是一个开源云原生计算基金会（CNCF）项目，其使用 Kubernetes 来管理云基础设施资源。借助 Crossplane，开发人员可以请求基础设施，而无需了解其复杂性。平台团队保留对基础设施的预置和管理方式的控制。

借助 Crossplane，您可以使用首选的 Kubernetes 工具链（例如 [kubectl](https://kubernetes.io/docs/reference/kubectl/)）部署和管理 Lambda 函数，以及任何可以将清单部署到 Kubernetes 的 CI/CD 管道。以下是通过 Crossplane 预置 Lambda 函数的示例用例：
+ 您的组织想要通过确保 Lambda 函数具有正确的[标签](configuration-tags.md)来强制实施合规性。平台团队可以使用 [Crossplane Compositions](https://docs.crossplane.io/latest/get-started/get-started-with-composition/) 通过 API 抽象来定义此策略。然后，开发人员可以使用这些抽象来部署带标签的 Lambda 函数。
+ 您的项目使用将 GitOps 和 Kubernetes 结合使用。在此模型中，Kubernetes 不断将 git 存储库（所需状态）与集群内运行的资源（当前状态）进行协调。如果存在差异，GitOps 流程会自动对集群进行更改。您可以将 GitOps 与 Kubernetes 结合使用，以便借助 [CRD](https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/) 和[控制器](https://kubernetes.io/docs/concepts/architecture/controller/)等熟悉的 Kubernetes 工具和概念，通过 Crossplane 部署和管理 Lambda 函数。

要了解将 Crossplane 与 Lambda 结合使用的更多信息，请参阅以下内容：
+ [Amazon Blueprints for Crossplane](https://github.com/awslabs/crossplane-on-eks/blob/main/examples/upbound-aws-provider/README.md#deploy-the-examples)：此存储库包含如何使用 Crossplane 部署 Amazon 资源（包括 Lambda 函数）的示例。
**注意**  
Amazon Blueprints for Crossplane 正在积极开发中，不应用于生产。
+ [使用 Amazon EKS 和 Crossplane 部署 Lambda](https://www.youtube.com/watch?v=m-9KLq29K4k)：此视频演示了使用 Crossplane 部署 Amazon 无服务器架构的高级示例，从开发人员和平台两方的角度探索设计。