Amazon EC2 작업 참조 - AWS CodePipeline

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Amazon EC2 작업 참조

Amazon EC2 EC2 작업을 사용하여 배포 플릿에 애플리케이션 코드를 배포합니다. 배포 플릿은 Amazon EC2 Linux 인스턴스 또는 Linux SSM 관리형 노드로 구성될 수 있습니다. 인스턴스에 SSM 에이전트가 설치되어 있어야 합니다.

참고

이 작업은 Linux 인스턴스 유형만 지원합니다. 지원되는 최대 플릿 크기는 인스턴스 500개입니다.

작업은 지정된 최대값을 기반으로 인스턴스 수를 선택합니다. 이전 인스턴스에서 실패한 인스턴스가 먼저 선택됩니다. 이전에 작업이 실패한 경우와 같이 인스턴스가 이미 동일한 입력 아티팩트의 배포를 수신한 경우 작업은 특정 인스턴스에서 배포를 건너뜁니다.

참고

이 작업은 V2 유형 파이프라인에서만 지원됩니다.

작업 유형

  • 범주: Deploy

  • 소유자: AWS

  • 공급자: EC2

  • 버전: 1

구성 파라미터

InstanceTagKey

필수 여부: 예

와 같이 Amazon EC2에서 생성한 인스턴스의 태그 키입니다Name.

InstanceTagValue

필수 여부: 아니요

와 같이 Amazon EC2에서 생성한 인스턴스의 태그 값입니다my-instances.

이 값을 지정하지 않으면 InstanceTagKey가 있는 모든 인스턴스가 일치합니다.

InstanceType

필수 여부: 예

Amazon EC2에서 생성된 인스턴스 또는 SSM 노드의 유형입니다. 유효 값은 EC2SSM_MANAGED_NODE입니다.

모든 인스턴스에 SSM 에이전트를 이미 생성, 태그 지정 및 설치했어야 합니다.

참고

인스턴스를 생성할 때 기존 EC2 인스턴스 역할을 생성하거나 사용합니다. Access Denied 오류를 방지하려면 인스턴스 역할에 S3 버킷 권한을 추가하여 인스턴스에 CodePipeline 아티팩트 버킷에 대한 권한을 부여해야 합니다. 파이프라인 리전의 아티팩트 버킷으로 범위가 지정된 s3:GetObject 권한으로 기본 역할을 생성하거나 기존 역할을 업데이트합니다.

TargetDirectory

필수: 예(스크립트가 지정된 경우)

Amazon EC2 인스턴스에서 스크립트를 실행하는 데 사용할 디렉터리입니다.

DeploySpec

필수: 예(배포 사양을 지정한 경우)

배포 설치 및 수명 주기 이벤트를 구성하는 데 사용할 파일입니다. 배포 사양 필드 설명 및 정보는 섹션을 참조하세요사양 파일 참조 배포. 배포 사양 파일이 지정된 작업 구성을 보려면의 예제를 참조하세요배포 사양 예제를 사용한 작업 선언.

MaxBatch

필수 여부: 아니요

병렬로 배포할 수 있는 최대 인스턴스 수입니다.

MaxError

필수 여부: 아니요

배포 중에 허용되는 최대 인스턴스 오류 수입니다.

TargetGroupNameList

필수 여부: 아니요

배포를 위한 대상 그룹 이름 목록입니다. 대상 그룹을 이미 생성했어야 합니다.

대상 그룹은 특정 요청을 처리하기 위한 인스턴스 세트를 제공합니다. 대상 그룹을 지정하면 배포 전에 대상 그룹에서 인스턴스가 제거되고 배포 후에 대상 그룹에 다시 추가됩니다.

PreScript

필수 여부: 아니요

작업 배포 단계 전에 실행할 스크립트입니다.

PostScript

필수 여부: 예

작업 배포 단계 후에 실행할 스크립트입니다.

다음 이미지는 작업 구성 사용이 선택된 작업에 대한 편집 페이지의 예를 보여줍니다.

작업 구성을 사용하여를 지정하는 EC2Deploy 작업이 있는 새 파이프라인에 대한 작업 편집 페이지

다음 이미지는 DeploySpec 파일 사용이 선택된 작업에 대한 편집 페이지의 예를 보여줍니다.

사양 파일을 사용하기 위한 EC2Deploy 작업 옵션이 있는 새 파이프라인의 작업 편집 페이지

입력 아티팩트

  • 아티팩트 수: 1

  • 설명: 배포 중에 스크립트 작업을 지원하기 위해 제공된 파일입니다.

출력 아티팩트

  • 아티팩트 수: 0

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

EC2 배포 작업에 대한 서비스 역할 정책 권한

CodePipeline이 작업을 실행할 때 CodePipeline 서비스 역할에는 최소 권한으로 액세스할 수 있도록 범위가 적절하게 축소된 다음 권한이 필요합니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "StatementWithAllResource", "Effect": "Allow", "Action": [ "ec2:DescribeInstances", "elasticloadbalancing:DescribeTargetGroupAttributes", "elasticloadbalancing:DescribeTargetGroups", "elasticloadbalancing:DescribeTargetHealth", "ssm:CancelCommand", "ssm:DescribeInstanceInformation", "ssm:ListCommandInvocations" ], "Resource": [ "*" ] }, { "Sid": "StatementForLogs", "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:{{region}}:{{AccountId}}:log-group:/aws/codepipeline/{{pipelineName}}:*" ] }, { "Sid": "StatementForElasticloadbalancing", "Effect": "Allow", "Action": [ "elasticloadbalancing:DeregisterTargets", "elasticloadbalancing:RegisterTargets" ], "Resource": [ "arn:aws:elasticloadbalancing:{{region}}:{{AccountId}}:targetgroup/[[targetGroupName]]/*" ] }, { "Sid": "StatementForSsmOnTaggedInstances", "Effect": "Allow", "Action": [ "ssm:SendCommand" ], "Resource": [ "arn:aws:ec2:{{region}}:{{AccountId}}:instance/*" ], "Condition": { "StringEquals": { "aws:ResourceTag/{{tagKey}}": "{{tagValue}}" } } }, { "Sid": "StatementForSsmApprovedDocuments", "Effect": "Allow", "Action": [ "ssm:SendCommand" ], "Resource": [ "arn:aws:ssm:{{region}}::document/AWS-RunPowerShellScript", "arn:aws:ssm:{{region}}::document/AWS-RunShellScript" ] } ] }

CloudWatch 로그의 파이프라인에 대한 로그 그룹

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

/aws/codepipeline/MyPipelineName

로깅에 대한 다음 권한은 서비스 역할에 대한 위 업데이트에 포함됩니다.

  • logs:CreateLogGroup

  • logs:CreateLogStream

  • logs:PutLogEvents

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

CloudWatch 로그에 대한 서비스 역할 정책 권한

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

/aws/codepipeline/MyPipelineName

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

사양 파일 참조 배포

CodePipeline에서 작업을 실행할 때 사양 파일을 지정하여 인스턴스에 대한 배포를 구성할 수 있습니다. 배포 사양 파일은 설치 대상과 배포 수명 주기 이벤트에 대한 응답으로 실행할 수명 주기 이벤트 후크를 지정합니다. 배포 사양 파일은 항상 YAML 형식입니다. 배포 사양 파일은 다음을 수행하는 데 사용됩니다.

  • 애플리케이션 개정의 소스 파일을 인스턴스의 대상으로 매핑합니다.

  • 배포된 파일에 대한 사용자 지정 권한을 지정합니다.

  • 배포 프로세스의 다양한 단계에서 각 인스턴스에 실행할 스크립트를 지정합니다.

배포 사양 파일은 AppSpec 파일과 함께 CodeDeploy에서 지원하는 특정 배포 구성 파라미터를 지원합니다. 기존 AppSpec 파일을 직접 사용할 수 있으며 지원되지 않는 파라미터는 무시됩니다. CodeDeploy의 AppSpec 파일에 대한 자세한 내용은 CodeDeploy 사용 설명서의 애플리케이션 사양 파일 참조를 참조하세요.

파일 배포 파라미터는 다음과 같이 지정됩니다.

  • files - 배포 사양 파일은 배포 파일의 source:destination:를 지정합니다.

  • scripts - 배포에 대해 스크립팅된 이벤트입니다. BeforeDeploy 및의 두 가지 이벤트가 지원됩니다AfterDeploy.

  • hooks - 이벤트의 수명 주기 후크입니다. ApplicationStop, , BeforeInstall, 및 후크가 지원됩니다AfterInstallApplicationStartValidateService.

    참고

    후크 파라미터는 CodeDeploy와의 AppSpec 호환성에 사용할 수 있으며 버전 0.0(AppSpec 형식)에서만 사용할 수 있습니다. 이 형식의 경우 CodePipeline은 이벤트에 대한 최선의 매핑을 수행합니다.

사양 파일에 올바른 YAML 간격을 사용해야 합니다. 그렇지 않으면 배포 사양 파일의 위치와 공백 수가 올바르지 않은 경우 오류가 발생합니다. 간격 지정에 대한 자세한 내용은 YAML 사양을 참조하세요.

배포 사양 파일의 예는 다음과 같습니다.

version: 0.1 files: - source: /index.html destination: /var/www/html/ scripts: BeforeDeploy: - location: scripts/install_dependencies timeout: 300 runas: myuser AfterDeploy: - location: scripts/start_server timeout: 300 runas: myuser

배포 사양 파일이 지정된 작업 구성을 보려면의 예제를 참조하세요배포 사양 예제를 사용한 작업 선언.

작업 선언

YAML
name: DeployEC2 actions: - name: EC2 actionTypeId: category: Deploy owner: AWS provider: EC2 version: '1' runOrder: 1 configuration: InstanceTagKey: Name InstanceTagValue: my-instances InstanceType: EC2 PostScript: "test/script.sh", TargetDirectory: "/home/ec2-user/deploy" outputArtifacts: [] inputArtifacts: - name: SourceArtifact region: us-east-1
JSON
{ "name": "DeployEC2", "actions": [ { "name": "EC2Deploy", "actionTypeId": { "category": "Deploy", "owner": "AWS", "provider": "EC2", "version": "1" }, "runOrder": 1, "configuration": { "InstanceTagKey": "Name", "InstanceTagValue": "my-instances", "InstanceType": "EC2", "PostScript": "test/script.sh", "TargetDirectory": "/home/ec2-user/deploy" }, "outputArtifacts": [], "inputArtifacts": [ { "name": "SourceArtifact" } ], "region": "us-east-1" } ] },

배포 사양 예제를 사용한 작업 선언

YAML
name: DeployEC2 actions: - name: EC2 actionTypeId: category: Deploy owner: AWS provider: EC2 version: '1' runOrder: 1 configuration: DeploySpec: "deployspec.yaml" InstanceTagKey: Name InstanceTagValue: my-instances InstanceType: EC2 outputArtifacts: [] inputArtifacts: - name: SourceArtifact region: us-east-1
JSON
{ "name": "DeployEC2", "actions": [ { "name": "EC2Deploy", "actionTypeId": { "category": "Deploy", "owner": "AWS", "provider": "EC2", "version": "1" }, "runOrder": 1, "configuration": { "DeploySpec": "deployspec.yaml", "InstanceTagKey": "Name", "InstanceTagValue": "my-instances", "InstanceType": "EC2" }, "outputArtifacts": [], "inputArtifacts": [ { "name": "SourceArtifact" } ], "region": "us-east-1" } ] },

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