AppSpec 파일 예제 - AWS CodeDeploy

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

AppSpec 파일 예제

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

AppSpec Amazon ECS 배포를 위한 파일 예제

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

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" CapacityProviderStrategy: - Base: 1 CapacityProvider: "FARGATE_SPOT" Weight: 2 - Base: 0 CapacityProvider: "FARGATE" Weight: 1 Hooks: - BeforeInstall: "LambdaFunctionToValidateBeforeInstall" - AfterInstall: "LambdaFunctionToValidateAfterInstall" - 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" } }, "CapacityProviderStrategy": [ { "Base" : 1, "CapacityProvider" : "FARGATE_SPOT", "Weight" : 2 }, { "Base" : 0, "CapacityProvider" : "FARGATE", "Weight" : 1 } ] } } } ], "Hooks": [ { "BeforeInstall": "LambdaFunctionToValidateBeforeInstall" }, { "AfterInstall": "LambdaFunctionToValidateAfterInstall" }, { "AfterAllowTestTraffic": "LambdaFunctionToValidateAfterTestTrafficStarts" }, { "BeforeAllowTraffic": "LambdaFunctionToValidateBeforeAllowingProductionTraffic" }, { "AfterAllowTraffic": "LambdaFunctionToValidateAfterAllowingProductionTraffic" } ] }

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

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

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

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

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

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

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

AppSpec AWS Lambda 배포를 위한 파일 예제

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

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 함수를 실행합니다.

AppSpec EC2/온프레미스 배포를 위한 파일 예제

다음은 Amazon Linux, 우분투 서버 또는 RHEL 인스턴스에 인플레이스 배포를 위한 AppSpec 파일의 예입니다.

참고

Windows Server 인스턴스에 배포하는 기능은 runas 요소를 지원하지 않습니다. Windows Server 인스턴스에 배포하는 경우 파일에 해당 인스턴스를 포함시키지 마십시오. AppSpec

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: linux을(를) os: 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시간)입니다.