

# 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 리소스를 배포하고 관리할 수 있습니다. AWS는 ACK를 통해 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 리소스를 정의합니다.

ACK 컨트롤러를 설치하려면 [Helm 3.8 이상](https://helm.sh/docs/intro/install/)을 사용하는 것이 좋습니다. 모든 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 함수를 프로비저닝하는 몇 가지 사용 사례입니다.
+ 조직에서는 [서비스 계정에 대한 IAM 역할](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html)과 [역할 기반 액세스 제어(RBAC)](https://kubernetes.io/docs/reference/access-authn-authz/rbac/)를 사용하여 권한 경계를 생성합니다. 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(Cloud Native Computing Foundation) 프로젝트입니다. Crossplane로 개발자는 인프라의 복잡성을 이해할 필요 없이 인프라를 요청할 수 있습니다. 플랫폼 팀이 인프라 프로비저닝 및 관리 방법에 대한 통제권을 갖습니다.

Crossplane을 사용하면 [kubectl](https://kubernetes.io/docs/reference/kubectl/)과 같은 선호하는 Kubernetes 도구 체인과 Kubernetes에 매니페스트를 배포할 수 있는 모든 CI/CD 파이프라인을 사용하여 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 프로세스가 클러스터를 자동으로 변경합니다. [CRDs](https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/), [Controllers](https://kubernetes.io/docs/concepts/architecture/controller/) 등의 친숙한 Kubernetes 도구와 개념을 사용하여 Crossplane을 통해 Lambda 기능을 배포하고 관리하는 데 Kubernetes와 함께 GitOps를 사용할 수 있습니다.

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 서버리스 아키텍처를 배포하는 고급 예제를 보여줍니다.