Amazon Elastic Kubernetes Service EKS 배포 작업 참조 - AWS CodePipeline

Amazon Elastic Kubernetes Service EKS 배포 작업 참조

EKSDeploy 작업을 사용하여 Amazon EKS 서비스를 배포할 수 있습니다. 배포에는 CodePipeline이 이미지를 배포하는 데 사용하는 Kubernetes 매니페스트 파일이 필요합니다.

파이프라인을 생성하기 전에, Amazon EKS 리소스를 미리 생성하고 이미지를 이미지 리포지토리에 저장해 두어야 합니다. 선택적으로 클러스터에 대한 VPC 정보를 제공할 수 있습니다.

중요

이 작업은 CodePipeline 관리형 CodeBuild 컴퓨팅을 사용하여 빌드 환경에서 명령을 실행합니다. 명령 작업을 실행하면 AWS CodeBuild에서 별도의 요금이 발생합니다.

참고

EKS 배포 작업은 V2 유형 파이프라인에서만 사용할 수 있습니다.

EKS 작업은 퍼블릭 및 프라이빗 EKS 클러스터를 모두 지원합니다. 프라이빗 클러스터는 EKS에서 권장하는 유형이지만 두 유형 모두 지원됩니다.

EKS 작업은 교차 계정 작업에 대해 지원됩니다. 교차 계정 EKS 작업을 추가하려면 작업 선언의 대상 계정에서 actionRoleArn을 추가합니다.

작업 유형

  • 범주: Deploy

  • 소유자: AWS

  • 공급자: EKS

  • 버전: 1

구성 파라미터

ClusterName

필수 여부: 예

Amazon EKS의 Amazon EKS 클러스터입니다.

헬름 아래의 옵션

다음은 헬름이 선택한 배포 도구일 때 사용할 수 있는 옵션입니다.

HelmReleaseName

필수: 예(헬름 유형에만 필수)

배포의 릴리스 이름입니다.

HelmChartLocation

필수: 예(헬름 유형에만 필수)

배포의 차트 위치입니다.

HelmValuesFiles

필수: 아니요(헬름 유형의 경우에만 선택 사항)

헬름 값 파일에 대해 재정의하려면 헬름 차트 위치에 쉼표로 구분된 헬름 차트 값 파일을 입력합니다.

Kubectl의 옵션

다음은 Kubectl이 선택한 배포 도구일 때 사용할 수 있는 옵션입니다.

ManifestFiles

필수: 예(Kubectl 유형에만 필수)

서비스의 컨테이너 이름과 이미지 및 태그를 설명하는 텍스트 파일, 매니페스트 파일의 이름입니다. 이 파일을 사용하여 이미지 URI 및 기타 정보를 파라미터화합니다. 이 용도로 환경 변수를 사용할 수 있습니다.

이 파일을 파이프라인의 소스 리포지토리에 저장합니다.

네임스페이스

필수 여부: 아니요

kubectl 또는 helm 명령에 사용할 kubernetes 네임스페이스입니다.

서브넷

필수 여부: 아니요

클러스터의 VPC에 대한 서브넷입니다. 이는 클러스터에 연결된 동일한 VPC의 일부입니다. 클러스터에 아직 연결되지 않은 서브넷을 제공하고 여기에 지정할 수도 있습니다.

SecurityGroupIds

필수 여부: 아니요

클러스터의 VPC에 대한 보안 그룹입니다. 이는 클러스터에 연결된 동일한 VPC의 일부입니다. 클러스터에 아직 연결되지 않은 보안 그룹을 제공하고 여기에 지정할 수도 있습니다.

입력 아티팩트

  • 아티팩트 수: 1

  • 설명: 이 작업은 파이프라인의 소스 파일 리포지토리에서 Kubernetes 매니페스트 파일 또는 헬름 차트를 찾습니다. S3 버킷에 저장된 .tgz 형식의 헬름 차트 차트를 사용하려면 S3 버킷/키를 소스 작업으로 구성하면 됩니다. 예를 들어 제공된 객체 키는 my-chart-0.1.0.tgz입니다.

출력 아티팩트

  • 아티팩트 수: 0

  • 설명: 이 작업 유형에는 출력 아티팩트가 적용되지 않습니다.

환경 변수

매니페스트 파일 또는 헬름 차트 값 파일의 이미지 리포지토리 또는 이미지 태그와 같은 변수를 대체하는 데 사용됩니다.

$IMAGE_TAG와 같은 키-값 환경 변수 페어의 키입니다.

v1.0과 같은 키-값 페어의 값입니다. 파이프라인 작업 또는 파이프라인 변수의 출력 변수를 사용하여 값을 파라미터화할 수 있습니다. 예를 들어 파이프라인에는 ${codepipeline.PipelineExecutionId}를 사용하여 ECR 이미지를 생성하는 ECRBuildAndPublish 작업이 있을 수 있으며, EKS 작업은 ${codepipeline.PipelineExecutionId}를 환경 변수의 값으로 사용하여 이 이미지를 사용할 수 있습니다.

출력 변수

EKSClusterName

Amazon EKS의 Amazon EKS 클러스터입니다.

서비스 역할 정책 권한

이 작업을 실행하려면 파이프라인의 서비스 역할 정책에서 다음 권한을 사용할 수 있어야 합니다.

  • EC2 작업: CodePipeline이 실행되면 EC2 인스턴스 권한이 필요합니다. 이는 EKS 클러스터를 생성할 때 필요한 EC2 인스턴스 역할과 동일하지 않습니다.

    기존 서비스 역할을 사용하는 경우 이 작업을 사용하려면 서비스 역할에 대해 다음 권한을 추가해야 합니다.

    • ec2:CreateNetworkInterface

    • ec2:DescribeDhcpOptions

    • ec2:DescribeNetworkInterfaces

    • ec2:DeleteNetworkInterface

    • ec2:DescribeSubnets

    • ec2:DescribeSecurityGroups

    • ec2:DescribeVpcs

  • EKS 작업: CodePipeline이 작업을 실행할 때 EKS 클러스터 권한이 필요합니다. 이는 EKS 클러스터를 생성할 때 필요한 IAM EKS 클러스터 역할과 동일하지 않습니다.

    기존 서비스 역할을 사용하는 경우 이 작업을 사용하려면 서비스 역할에 대해 다음 권한을 추가해야 합니다.

    • eks:DescribeCluster

  • 로그 스트림 작업: CodePipeline이 작업을 실행하면 CodePipeline은 다음과 같이 파이프라인 이름을 사용하여 로그 그룹을 생성합니다. 이렇게 하면 파이프라인 이름을 사용하여 리소스를 로깅할 수 있는 권한을 범위 아래로 지정할 수 있습니다.

    /aws/codepipeline/MyPipelineName

    기존 서비스 역할을 사용하는 경우 이 작업을 사용하려면 서비스 역할에 대해 다음 권한을 추가해야 합니다.

    • logs:CreateLogGroup

    • logs:CreateLogStream

    • logs:PutLogEvents

서비스 역할 정책 설명에서 다음 예제와 같이 리소스 수준까지 권한의 범위를 좁힙니다.

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "eks:DescribeCluster" ], "Resource": "arn:aws:eks:*:111122223333:cluster/YOUR_CLUSTER_NAME" }, { "Effect": "Allow", "Action": [ "ec2:CreateNetworkInterface", "ec2:CreateNetworkInterfacePermission", "ec2:DescribeDhcpOptions", "ec2:DescribeNetworkInterfaces", "ec2:DeleteNetworkInterface", "ec2:DescribeSubnets", "ec2:DescribeSecurityGroups", "ec2:DescribeVpcs", "ec2:DescribeRouteTables" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "logs:CreateLogStream", "logs:CreateLogGroup", "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:*:111122223333:log-group:/aws/codepipeline/YOUR_PIPELINE_NAME", "arn:aws:logs:*:111122223333:log-group:/aws/codepipeline/YOUR_PIPELINE_NAME:*" ] } ] }

작업 세부 정보 대화 상자를 사용하여 콘솔에서 로그를 보려면 로그를 볼 수 있는 권한을 콘솔 역할에 추가해야 합니다. 자세한 내용은 CodePipeline 콘솔에서 컴퓨팅 로그를 보는 데 필요한 권한에서 콘솔 권한 정책 예제를 참조하세요.

서비스 역할을 클러스터의 액세스 항목으로 추가

파이프라인의 서비스 역할 정책에서 권한을 사용할 수 있게 되면 CodePipeline 서비스 역할을 클러스터의 액세스 항목으로 추가하여 클러스터 권한을 구성합니다.

업데이트된 권한이 있는 작업 역할을 사용할 수도 있습니다. 자세한 정보는 4단계: CodePipeline 서비스 역할에 대한 액세스 항목 생성의 자습서 예제를 참조하세요.

작업 선언

YAML
Name: DeployEKS ActionTypeId: Category: Deploy Owner: AWS Provider: EKS Version: '1' RunOrder: 2 Configuration: ClusterName: my-eks-cluster ManifestFiles: ManifestFile.json OutputArtifacts: [] InputArtifacts: - Name: SourceArtifact
JSON
{ "Name": "DeployECS", "ActionTypeId": { "Category": "Deploy", "Owner": "AWS", "Provider": "EKS", "Version": "1" }, "RunOrder": 2, "Configuration": { "ClusterName": "my-eks-cluster", "ManifestFiles": "ManifestFile.json" }, "OutputArtifacts": [], "InputArtifacts": [ { "Name": "SourceArtifact" } ] },

이 작업을 수행할 때 참조할 수 있는 관련 리소스는 다음과 같습니다.