

# Kubernetes で Lambda を使用する
<a name="with-kubernetes"></a>

[AWS 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 関数をデプロイおよび管理できます。

## AWS Controllers for Kubernetes (ACK)
<a name="kubernetes-ack"></a>

ACK を使用すると、Kubernetes API からの AWS リソースのデプロイおよび管理を行うことができます。ACK を通じて、AWS は Lambda、Amazon Elastic Container Registry (Amazon ECR)、Amazon Simple Storage Service (Amazon S3)、Amazon SageMaker AI などの AWS サービス用にオープンソースのカスタムコントローラーを提供します。サポートされている各 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 コントローラーには、コントローラー、CRD、および Kubernetes RBAC ルールをインストールする独自の Helm チャートが付属しています。詳細については、「ACK ドキュメント」の「[Install an ACK Controller](https://aws-controllers-k8s.github.io/community/docs/user-docs/install/)」を参照してください。

ACK カスタムリソースは、作成後、他の組み込み Kubernetes オブジェクトと同様に使用できます。例えば、[kubectl](https://kubernetes.io/docs/reference/kubectl/) などのお好みの Kubernetes ツールチェーンで 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 に再利用できます。
+ 組織に、Kubernetes マニフェストを使用して Amazon Elastic Kubernetes Service (Amazon EKS) クラスターにリソースをデプロイする DevOps プロセスがある。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/) は、Kubernetes を使用してクラウドインフラストラクチャリソースを管理する、クラウドネイティブコンピューティング財団 (CNCF) のオープンソースのプロジェクトです。Crossplane を使用すると、デベロッパーはインフラストラクチャの複雑さを理解しなくてもインフラストラクチャをリクエストできます。プラットフォームチームは、インフラストラクチャのプロビジョニングおよび管理方法を制御できます。

Crossplane を使用すると、Kubernetes にマニフェストをデプロイできる任意の CI/CD パイプラインや [kubectl](https://kubernetes.io/docs/reference/kubectl/) のようなお好みの Kubernetes ツールチェーンで Lambda 関数をデプロイして管理できます。Crossplane を使用して Lambda 関数をプロビジョニングするユースケースの例を次に示します。
+ 組織が、Lambda 関数に正しい[タグ](configuration-tags.md)があることを確認することでコンプライアンスを強化したいと考えている。プラットフォームチームは、[Crossplane Compositions](https://docs.crossplane.io/latest/get-started/get-started-with-composition/) を使用し、API 抽象化を通じてこのポリシーを定義できます。その後、デベロッパーはこれらの抽象化を使用してタグ付きの Lambda 関数をデプロイできます。
+ プロジェクトに、Kubernetes で GitOps を使用している。このモデルでは、Kubernetes は git リポジトリ (望ましい状態) とクラスター内で実行されているリソース (現在の状態) を継続的に照合します。相違がある場合、GitOps プロセスによって自動的にクラスターに変更が加えられます。Kubernetes で GitOps を使用すると、使い慣れた Kubernetes ツールや [CRD](https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/)、[Controllers](https://kubernetes.io/docs/concepts/architecture/controller/) のような概念を使用して、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 を使用して Lambda 関数などの AWS リソースをデプロイする方法の例が含まれています。
**注記**  
AWS Blueprints for Crossplane は現在開発中であり、本番環境では使用することはできません。
+ [Deploying Lambda with Amazon EKS and Crossplane](https://www.youtube.com/watch?v=m-9KLq29K4k): この動画では、Crossplane を使用した AWS サーバーレスアーキテクチャの高度なデプロイの例が紹介されており、デベロッパーとプラットフォームの両方の観点から設計が検討されています。