AWS CodeDeploy
사용 설명서 (API 버전 2014-10-06)

이 설명서의 절차는 새 콘솔 디자인을 지원합니다. 이전 버전의 콘솔을 사용하도록 선택할 경우 이 설명서의 여러 가지 개념과 기본 절차가 계속 적용되는 것을 확인할 수 있습니다. 새 콘솔에서 도움말에 액세스하려면 정보 아이콘을 선택하십시오.

AppSpec File 예

이 주제에서는 AWS Lambda 및 EC2/온프레미스 배포에 대한 예제 AppSpec 파일을 살펴봅니다.

Amazon ECS​ 배포에 대한 ​AppSpec File​ 예제

다음은 Amazon ECS 서비스를 배포하기 위해 YAML로 작성된 AppSpec file의 예입니다.

version: 0.0 Resources: - TargetService: Type: AWS::ECS::Service Properties: TaskDefinition: "arn:aws:ecs:us-east-1:111222333444:task-definition/my-task-definition-family-name:1" LoadBalancerInfo: ContainerName: "SampleApplicationName" ContainerPort: 80 # Optional properties PlatformVersion: "LATEST" NetworkConfiguration: AwsvpcConfiguration: Subnets: ["subnet-1234abcd","subnet-5678abcd"] SecurityGroups: ["sg-12345678"] AssignPublicIp: "ENABLED" Hooks: - BeforeInstall: "LambdaFunctionToValidateBeforeInstall" - AfterInstall: "LambdaFunctionToValidateAfterTraffic" - AfterAllowTestTraffic: "LambdaFunctionToValidateAfterTestTrafficStarts" - BeforeAllowTraffic: "LambdaFunctionToValidateBeforeAllowingProductionTraffic" - AfterAllowTraffic: "LambdaFunctionToValidateAfterAllowingProductionTraffic"

다음은 위의 예제를 JSON으로 작성한 버전입니다.

{ "version": 0.0, "Resources": [ { "TargetService": { "Type": "AWS::ECS::Service", "Properties": { "TaskDefinition": "arn:aws:ecs:us-east-1:111222333444:task-definition/my-task-definition-family-name:1", "LoadBalancerInfo": { "ContainerName": "SampleApplicationName", "ContainerPort": 80 }, "PlatformVersion": "LATEST", "NetworkConfiguration": { "AwsvpcConfiguration": { "Subnets": [ "subnet-1234abcd", "subnet-5678abcd" ], "SecurityGroups": [ "sg-12345678" ], "AssignPublicIp": "ENABLED" } } } } } ], "Hooks": [ { "BeforeInstall": "LambdaFunctionToValidateBeforeInstall" }, { "AfterInstall": "LambdaFunctionToValidateAfterTraffic" }, { "AfterAllowTestTraffic": "LambdaFunctionToValidateAfterTestTrafficStarts" }, { "BeforeAllowTraffic": "LambdaFunctionToValidateBeforeAllowingProductionTraffic" }, { "AfterAllowTraffic": "LambdaFunctionToValidateAfterAllowingProductionTraffic" } ] }

다음은 배포 중 이벤트의 순서입니다.

  1. 업데이트된 Amazon ECS 애플리케이션을 대체 작업 세트에 설치하기 전에 LambdaFunctionToValidateBeforeInstall이라는 Lambda 함수가 실행됩니다.

  2. 업데이트된 Amazon ECS 애플리케이션을 대체 작업 세트에 설치했지만 트래픽을 수신하기 전에 LambdaFunctionToValidateAfterTraffic이라는 Lambda 함수가 실행됩니다.

  3. 대체 작업 세트의 Amazon ECS 애플리케이션은 테스트 리스너에서 트래픽을 수신하기 시작한 후, LambdaFunctionToValidateAfterTestTrafficStarts라는 Lambda 함수가 실행됩니다. 이 함수는 배포가 계속되는지 여부를 확인하는 확인 테스트를 실행할 가능성이 있습니다. 배포 그룹에서 테스트 리스너를 지정하지 않는 경우, 이 후크는 무시됩니다.

  4. AfterAllowTestTraffic 후크의 확인 테스트가 완료되고 프로덕션 트래픽이 업데이트된 Amazon ECS 애플리케이션에 제공되기 전에, LambdaFunctionToValidateBeforeAllowingProductionTraffic이라는 Lambda 함수가 실행됩니다.

  5. 프로덕션 트래픽이 대체 작업 세트의 업데이트된 Amazon ECS 애플리케이션에 제공된 후 LambdaFunctionToValidateAfterAllowingProductionTraffic이라는 Lambda 함수가 실행됩니다.

후크 중에 실행되는 Lambda 함수는 확인 테스트를 수행하거나 트래픽 지표를 수집할 수 있습니다.

AWS Lambda​ 배포에 대한 ​AppSpec File​ 예제

다음은 Lambda 함수 버전을 배포하기 위해 YAML로 작성된 AppSpec file의 예입니다.

version: 0.0 Resources: - myLambdaFunction: Type: AWS::Lambda::Function Properties: Name: "myLambdaFunction" Alias: "myLambdaFunctionAlias" CurrentVersion: "1" TargetVersion: "2" Hooks: - BeforeAllowTraffic: "LambdaFunctionToValidateBeforeTrafficShift" - AfterAllowTraffic: "LambdaFunctionToValidateAfterTrafficShift"

다음은 위의 예제를 JSON으로 작성한 버전입니다.

{ "version": 0.0, "Resources": [{ "myLambdaFunction": { "Type": "AWS::Lambda::Function", "Properties": { "Name": "myLambdaFunction", "Alias": "myLambdaFunctionAlias", "CurrentVersion": "1", "TargetVersion": "2" } } }], "Hooks": [{ "BeforeAllowTraffic": "LambdaFunctionToValidateBeforeTrafficShift" }, { "AfterAllowTraffic": "LambdaFunctionToValidateAfterTrafficShift" } ] }

다음은 배포 중 이벤트의 순서입니다.

  1. myLambdaFunction이라는 Lambda 함수 버전 1의 트래픽을 버전 2로 전환하기 전에 배포가 트래픽 전환을 시작할 준비가 되었는지 확인하기 위해 LambdaFunctionToValidateBeforeTrafficShift라는 Lambda 함수를 실행합니다.

  2. LambdaFunctionToValidateBeforeTrafficShift가 종료 코드 0(성공)을 반환하면 myLambdaFunction 버전 2로 트래픽 이동을 시작합니다. 이 배포에 대한 배포 구성은 트래픽 이동 속도를 지정합니다.

  3. myLambdaFunction이라는 Lambda 함수 버전 1의 트래픽을 버전 2로 전환하는 작업이 완료되면 배포가 성공적으로 완료되었는지 확인하기 위해 LambdaFunctionToValidateAfterTrafficShift라는 Lambda 함수를 실행합니다.

EC2/온프레미스​ 배포에 대한 ​AppSpec File​ 예제

다음은 Amazon Linux, Ubuntu Server 또는 RHEL 인스턴스에 대한 인 플레이스 배포의 AppSpec file 예제입니다.

참고

Windows Server 인스턴스에 배포하는 기능은 runas 요소를 지원하지 않습니다. 현재 Windows Server 인스턴스를 배포하고 있다면, 이 요소를 AppSpec file에 포함하지 마십시오.

version: 0.0 os: linux files: - source: Config/config.txt destination: /webapps/Config - source: source destination: /webapps/myApp hooks: BeforeInstall: - location: Scripts/UnzipResourceBundle.sh - location: Scripts/UnzipDataBundle.sh AfterInstall: - location: Scripts/RunResourceTests.sh timeout: 180 ApplicationStart: - location: Scripts/RunFunctionalTests.sh timeout: 3600 ValidateService: - location: Scripts/MonitorService.sh timeout: 3600 runas: codedeployuser

Windows Server 인스턴스의 경우 os: linuxos: windows로 변경합니다. 또한 destination 경로를 정규화해야 합니다(예: c:\temp\webapps\Configc:\temp\webapps\myApp). runas 요소를 포함하면 안 됩니다.

다음은 배포 중 이벤트의 순서입니다.

  1. Scripts/UnzipResourceBundle.sh에 있는 스크립트를 실행합니다.

  2. 이전 스크립트가 종료 코드 0(성공)을 반환한 경우 이 스크립트를 Scripts/UnzipDataBundle.sh에서 실행합니다.

  3. Config/config.txt 경로의 파일을 /webapps/Config/config.txt 경로로 복사합니다.

  4. source 디렉터리의 파일을 /webapps/myApp 디렉터리로 모두 복사합니다.

  5. Scripts/RunResourceTests.sh에 있는 스크립트를 실행합니다. 제한 시간은 180초(3분)입니다.

  6. Scripts/RunFunctionalTests.sh에 있는 스크립트를 실행합니다. 제한 시간은 3600초(1시간)입니다.

  7. Scripts/MonitorService.sh에 있는 스크립트를 사용자 codedeploy로 실행합니다. 제한 시간은 3600초(1시간)입니다.