

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 搭配 Kubernetes 使用 Lambda
<a name="with-kubernetes"></a>

您可以使用 [Kubernetes 專用 AWS 控制器 (ACK)](https://aws-controllers-k8s.github.io/community/docs/community/overview/) 或 [Crossplane](https://docs.crossplane.io/latest/packages/providers/)，透過 Kubernetes API 來部署和管理 Lambda 函數。

## Kubernetes 專用 AWS 控制器 (ACK)
<a name="kubernetes-ack"></a>

您可以使用 ACK，從 Kubernetes API 部署和管理 AWS 資源。透過 ACK，AWS 提供諸如以下 AWS 服務專用的開放原始碼自訂控制器：Lambda、Amazon Elastic Container Registry (Amazon ECR)、Amazon Simple Storage Service (Amazon S3) 和 Amazon SageMaker AI。每個支援的 AWS 服務都有專屬自訂控制器。在您的 Kubernetes 叢集中，為每個要使用的 AWS 服務安裝控制器。接著建立[自訂資源定義 (CRD)](https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/)以定義 AWS 資源。

建議您使用 [Helm 3.8 或更新版本](https://helm.sh/docs/intro/install/)，安裝 ACK 控制器。每個 ACK 控制器都有專屬 Helm Chart，這會安裝控制器、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.aws.amazon.com/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/)) 以及任何可將清單檔案部署到 Kubernetes 的 CI/CD 管道，部署和管理 Lambda 函數。以下是一些透過 Crossplane 佈建 Lambda 函數的範例使用案例：
+ 您的組織希望確保 Lambda 函數具有正確[標籤](configuration-tags.md)來強制遵循法規。平台團隊可以使用 [Crossplane 组合](https://docs.crossplane.io/latest/get-started/get-started-with-composition/)，透過 API 抽象來定義此政策。開發人員隨後可以使用這些抽象來部署具標籤的 Lambda 函數。
+ 您的專案搭配 Kubernetes 使用 GITOps。在此模型中，Kubernetes 會持續協調 git 儲存庫 (所需狀態) 與叢集內執行的資源 (目前狀態)。如果有差異，GITOps 程序會自動變更叢集。您可以搭配 Kubernetes 使用 GITOps，利用諸如 [CRD](https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/) 和[控制器](https://kubernetes.io/docs/concepts/architecture/controller/)的熟悉 Kubernetes 工具和概念，透過 Crossplane 來部署和管理 Lambda 函數。

若要進一步了解如何搭配 Lambda 使用 Crossplane，請參閱下列內容：
+ [AWS Blueprints for Crossplane](https://github.com/awslabs/crossplane-on-eks/blob/main/examples/upbound-aws-provider/README.md#deploy-the-examples)：此儲存庫包括如何使用 Crossplane 部署 AWS 資源 (包括 Lambda 函數) 的範例。
**注意**  
目前正在積極開發 AWS Blueprints for Crossplane，因此不得用於生產環境。
+ [使用 Amazon EKS 和 Crossplane 部署 Lambda](https://www.youtube.com/watch?v=m-9KLq29K4k)：此影片展示透過 Crossplane 部署 AWS 無伺服器架構的進階範例，並從開發人員和平台的角度探索設計。