AppSpec 파일 예제 - AWS CodeDeploy

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

AppSpec 파일 예제

이 주제에서는 AppSpec 파일을 살펴보고AWSLambda 2/온프레미스 배포 및 EC2/온프레미스 배포

아마존 ECS 배포를 위한 AppSpec 파일 예제

다음은 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 애플리케이션이 대체 작업 세트에 설치되기 전에 Lambda 함수는LambdaFunctionToValidateBeforeInstall를 실행합니다.

  2. 업데이트된 Amazon ECS 애플리케이션을 대체 작업 세트에 설치했지만 트래픽을 수신하기 전에LambdaFunctionToValidateAfterInstall를 실행합니다.

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

  4. 의 유효성 검사 테스트 후AfterAllowTestTraffic후크가 완료되고 프로덕션 트래픽이 업데이트된 Amazon ECS 애플리케이션에 제공되기 전에,LambdaFunctionToValidateBeforeAllowingProductionTraffic를 실행합니다.

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

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

에 대 한 AppSpec 파일 예제AWSLambda 배포

다음은 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. 라는 Lambda 함수의 버전 1에서 트래픽을 이동하기 전에myLambdaFunction를 버전 2Lambda 업그레이드하려면LambdaFunctionToValidateBeforeTrafficShift가 트래픽 이동을 시작할 준비가 되었는지 확인합니다.

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

  3. Lambda 함수의 버전 1에서 트래픽을 이동 한 후myLambdaFunction가 완료되면 Lambda 함수를 실행하십시오.LambdaFunctionToValidateAfterTrafficShift배포가 성공적으로 완료되었습니다.

EC2/온프레미스 배포에 대한 AppSpec 파일 예

다음은 Amazon Linux, Ubuntu Server 또는 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: linuxtoos: 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시간)입니다.