AppSpec '후크' 섹션 - AWS CodeDeploy

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

AppSpec '후크' 섹션

AppSpec 파일 'hooks' 섹션의 내용은 배포용 컴퓨팅 플랫폼에 따라 다릅니다. EC2/온프레미스 배포에 대한 'hooks' 섹션에는 배포 수명 주기 이벤트 후크를 하나 이상의 스크립트에 연결하는 매핑이 포함되어 있습니다. Lambda 또는 Amazon ECS 배포에 대한 'hooks' 섹션은 배포 수명 주기 이벤트 중 실행하는 Lambda 확인 함수를 지정합니다. 이벤트 후크가 없는 경우 해당 이벤트에 대해 작업이 실행되지 않습니다. 이 섹션은 배포의 일부로 스크립트 또는 Lambda 확인 함수를 실행하는 경우에만 필요합니다.

AppSpec Amazon ECS 배포를 위한 '후크' 섹션

Amazon ECS 배포를 위한 수명 주기 이벤트 후크 목록

AWS Lambda 후크는 수명 주기 이벤트의 이름 뒤에 있는 새로운 줄에서 문자열로 지정된 Lambda 함수 중 하나입니다. 각 후크는 배포별로 한 번 실행됩니다. 다음은 Amazon ECS 배포 중에 후크를 실행할 수 있는 수명 주기 이벤트에 대한 설명입니다.

  • BeforeInstall – 대체 작업 세트가 생성되기 전에 작업을 실행하려면 이 항목을 사용합니다. 대상 그룹 하나가 원래 작업 세트와 연결됩니다. 테스트 리스너(선택 사항)가 지정된 경우 원래 작업 세트와 연결됩니다. 이 시점에서는 롤백이 불가능합니다.

  • AfterInstall – 대체 작업 세트가 생성되고 대상 그룹 중 하나가 연결된 후 작업을 실행하면 이 항목을 사용합니다. 테스트 리스너(선택 사항)가 지정된 경우 원래 작업 세트와 연결됩니다. 이 수명 주기 이벤트에서 후크 함수의 결과는 롤백을 트리거할 수 있습니다.

  • AfterAllowTestTraffic – 테스트 리스너가 대체 작업 세트에 트래픽을 제공한 후 작업을 실행하려면 이 항목을 사용합니다. 이 시점에서 후크 함수의 결과는 롤백을 트리거할 수 있습니다.

  • BeforeAllowTraffic – 두 번째 대상 그룹이 대체 작업 세트와 연결된 후 트래픽이 대체 작업 세트로 전환되기 전에 작업을 실행하려면 이 항목을 사용합니다. 이 수명 주기 이벤트에서 후크 함수의 결과는 롤백을 트리거할 수 있습니다.

  • AfterAllowTraffic – 두 번째 대상 그룹이 대체 작업 세트에 트래픽을 제공한 후 작업을 실행하려면 이 항목을 사용합니다. 이 수명 주기 이벤트에서 후크 함수의 결과는 롤백을 트리거할 수 있습니다.

자세한 내용은 Amazon ECS 배포 중에 발생하는 일튜토리얼: Amazon ECS 서비스 배포 및 확인 테스트 단원을 참조하세요.

Amazon ECS 배포 시 후크의 실행 순서

Amazon ECS 배포에서 이벤트 후크는 다음 순서대로 실행됩니다.

참고

배포의 시작 TestTraffic, 설치 AllowTraffic, 종료 이벤트는 스크립팅할 수 없으므로 이 다이어그램에서 회색으로 표시됩니다.

'hooks' 섹션의 구조

다음은 'hooks' 섹션 구조의 예입니다.

YAML 사용:

Hooks: - BeforeInstall: "BeforeInstallHookFunctionName" - AfterInstall: "AfterInstallHookFunctionName" - AfterAllowTestTraffic: "AfterAllowTestTrafficHookFunctionName" - BeforeAllowTraffic: "BeforeAllowTrafficHookFunctionName" - AfterAllowTraffic: "AfterAllowTrafficHookFunctionName"

JSON 사용:

"Hooks": [ { "BeforeInstall": "BeforeInstallHookFunctionName" }, { "AfterInstall": "AfterInstallHookFunctionName" }, { "AfterAllowTestTraffic": "AfterAllowTestTrafficHookFunctionName" }, { "BeforeAllowTraffic": "BeforeAllowTrafficHookFunctionName" }, { "AfterAllowTraffic": "AfterAllowTrafficHookFunctionName" } ] }

샘플 Lambda 'hooks' 함수

'hooks'섹션을 사용하여 Amazon ECS 배포를 검증하기 위해 호출할 수 CodeDeploy 있는 Lambda 함수를 지정합니다. BeforeInstall,, AfterInstall AfterAllowTestTrafficBeforeAllowTraffic, 및 AfterAllowTraffic 배포 수명 주기 이벤트에 동일한 함수를 사용하거나 다른 함수를 사용할 수 있습니다. 검증 테스트가 완료되면 AfterAllowTraffic Lambda 함수가 CodeDeploy 콜백하여 또는 결과를 전달합니다. Succeeded Failed

중요

Lambda 검증 함수에서 CodeDeploy 1시간 이내에 알림을 받지 않으면 배포가 실패한 것으로 간주됩니다.

Lambda 후크 함수 호출 전에 서버는 putLifecycleEventHookExecutionStatus 명령을 사용하여 배포 ID와 수명 주기 이벤트 후크 실행 ID를 통지받아야 합니다.

다음은 Node.js로 작성된 샘플 Lambda 후크 함수입니다.

'use strict'; const aws = require('aws-sdk'); const codedeploy = new aws.CodeDeploy({apiVersion: '2014-10-06'}); exports.handler = (event, context, callback) => { //Read the DeploymentId from the event payload. var deploymentId = event.DeploymentId; //Read the LifecycleEventHookExecutionId from the event payload var lifecycleEventHookExecutionId = event.LifecycleEventHookExecutionId; /* Enter validation tests here. */ // Prepare the validation test results with the deploymentId and // the lifecycleEventHookExecutionId for CodeDeploy. var params = { deploymentId: deploymentId, lifecycleEventHookExecutionId: lifecycleEventHookExecutionId, status: 'Succeeded' // status can be 'Succeeded' or 'Failed' }; // Pass CodeDeploy the prepared validation test results. codedeploy.putLifecycleEventHookExecutionStatus(params, function(err, data) { if (err) { // Validation failed. callback('Validation test failed'); } else { // Validation succeeded. callback(null, 'Validation test succeeded'); } }); };

AppSpec AWSLambda 배포를 위한 '후크' 섹션

AWS Lambda 배포를 위한 수명 주기 이벤트 후크 목록

AWS Lambda 후크는 수명 주기 이벤트의 이름 뒤에 있는 새로운 줄에서 문자열로 지정된 Lambda 함수 중 하나입니다. 각 후크는 배포별로 한 번 실행됩니다. 다음은 파일에서 사용할 수 있는 후크에 대한 설명입니다. AppSpec

  • BeforeAllowTraffic— 트래픽이 배포된 Lambda 함수 버전으로 이동하기 전에 작업을 실행하는 데 사용합니다.

  • AfterAllowTraffic— 모든 트래픽이 배포된 Lambda 함수 버전으로 이동한 후 작업을 실행하는 데 사용합니다.

Lambda 함수 버전 배포에서 후크 실행 순서

서버리스 Lambda 함수 버전 배포에서 이벤트 후크는 다음 순서로 실행됩니다.

참고

배포의 시작종료 이벤트는 스크립팅할 수 없으므로 이 다이어그램에서 회색으로 표시됩니다. AllowTraffic

'hooks' 섹션의 구조

다음은 'hooks' 섹션 구조의 예입니다.

YAML 사용:

hooks: - BeforeAllowTraffic: BeforeAllowTrafficHookFunctionName - AfterAllowTraffic: AfterAllowTrafficHookFunctionName

JSON 사용:

"hooks": [{ "BeforeAllowTraffic": "BeforeAllowTrafficHookFunctionName" }, { "AfterAllowTraffic": "AfterAllowTrafficHookFunctionName" }]

샘플 Lambda 'hooks' 함수

Lambda 배포를 검증하기 위해 호출할 수 CodeDeploy 있는 Lambda 함수를 지정하려면 '후크' 섹션을 사용하십시오. BeforeAllowTrafficAfterAllowTraffic 배포 수명 주기 이벤트에 동일한 함수 또는 다른 함수를 사용할 수 있습니다. 검증 테스트가 완료되면 Lambda 검증 함수가 CodeDeploy 콜백하여 또는 결과를 전달합니다. Succeeded Failed

중요

Lambda 검증 함수에서 CodeDeploy 1시간 이내에 알림을 받지 않으면 배포가 실패한 것으로 간주됩니다.

Lambda 후크 함수 호출 전에 서버는 putLifecycleEventHookExecutionStatus 명령을 사용하여 배포 ID와 수명 주기 이벤트 후크 실행 ID를 통지받아야 합니다.

다음은 Node.js로 작성된 샘플 Lambda 후크 함수입니다.

'use strict'; const aws = require('aws-sdk'); const codedeploy = new aws.CodeDeploy({apiVersion: '2014-10-06'}); exports.handler = (event, context, callback) => { //Read the DeploymentId from the event payload. var deploymentId = event.DeploymentId; //Read the LifecycleEventHookExecutionId from the event payload var lifecycleEventHookExecutionId = event.LifecycleEventHookExecutionId; /* Enter validation tests here. */ // Prepare the validation test results with the deploymentId and // the lifecycleEventHookExecutionId for CodeDeploy. var params = { deploymentId: deploymentId, lifecycleEventHookExecutionId: lifecycleEventHookExecutionId, status: 'Succeeded' // status can be 'Succeeded' or 'Failed' }; // Pass CodeDeploy the prepared validation test results. codedeploy.putLifecycleEventHookExecutionStatus(params, function(err, data) { if (err) { // Validation failed. callback('Validation test failed'); } else { // Validation succeeded. callback(null, 'Validation test succeeded'); } }); };

AppSpec EC2/온프레미스 배포를 위한 '후크' 섹션

수명 주기 이벤트 후크 목록

EC2/온프레미스 배포 후크는 인스턴스에 대한 배포별로 한 번 실행됩니다. 후크에서 실행할 하나 이상의 스크립트를 지정할 수 있습니다. 수명 주기 이벤트에 대한 각 후크는 별도의 줄에서 문자열로 지정됩니다. 다음은 파일에서 사용할 수 있는 후크에 대한 설명입니다. AppSpec

어떤 수명 주기 이벤트 후크가 어떤 배포 및 롤백 유형에 유효한지는 수명 주기 이벤트 후크 가용성 단원을 참조하세요.

  • ApplicationStop – 이 배포 수명 주기 이벤트는 애플리케이션 수정이 다운로드되기 전에도 발생합니다. 이 이벤트에 대해서는 애플리케이션을 안전하게 종료하거나 배포 준비 중에 현재 설치된 패키지를 제거하도록 스크립트를 지정할 수 있습니다. 이 배포 수명 주기 이벤트에 사용된 AppSpec 파일 및 스크립트는 이전에 성공적으로 배포된 애플리케이션 수정 버전에서 가져온 것입니다.

    참고

    배포하기 전에는 인스턴스에 AppSpec 파일이 존재하지 않습니다. 이러한 이유로, 인스턴스에 처음으로 배포할 때는 ApplicationStop 후크가 실행되지 않습니다. 인스턴스에 두 번째로 배포할 때는 ApplicationStop 후크를 사용할 수 있습니다.

    마지막으로 성공적으로 배포된 애플리케이션 수정 버전의 위치를 확인하기 위해 CodeDeploy 에이전트는 deployment-group-id_last_successful_install 파일에 나열된 위치를 조회합니다. 이 파일의 위치는 다음과 같습니다.

    Amazon Linux, Ubuntu Server 및 RHEL Amazon EC2의 /opt/codedeploy-agent/deployment-root/deployment-instructions 폴더

    Windows Server Amazon EC2 인스턴스에 대한 C:\ProgramData\Amazon\CodeDeploy\deployment-instructions 폴더.

    ApplicationStop 배포 수명 주기 이벤트 중 실패하는 배포 문제를 해결하려면 실패한 ApplicationStop, BeforeBlockTraffic 또는 AfterBlockTraffic 배포 수명 주기 이벤트 문제 해결 단원을 참조하세요.

  • DownloadBundle— 이 배포 수명 주기 이벤트 동안 CodeDeploy 에이전트는 응용 프로그램 수정 파일을 임시 위치에 복사합니다.

    Amazon Linux, Ubuntu Server 및 RHEL Amazon EC2의 /opt/codedeploy-agent/deployment-root/deployment-group-id/deployment-id/deployment-archive 폴더

    Windows Server Amazon EC2 인스턴스에 대한 C:\ProgramData\Amazon\CodeDeploy\deployment-group-id\deployment-id\deployment-archive 폴더.

    이 이벤트는 CodeDeploy 에이전트용이며 스크립트를 실행하는 데에는 사용할 수 없습니다.

    DownloadBundle 배포 수명 주기 이벤트 중 실패하는 배포 문제를 해결하려면 실패하고 UnknownError: not opened for reading이 표시되는 DownloadBundle 배포 수명 주기 이벤트 문제 해결 단원을 참조하세요.

  • BeforeInstall – 파일 암호화 해제 및 현재 버전의 백업 만들기와 같은 사전 설치 작업에 이 배포 수명 주기 이벤트를 사용할 수 있습니다.

  • Install— 이 배포 수명 주기 이벤트 동안 CodeDeploy 에이전트는 임시 위치의 수정 파일을 최종 대상 폴더로 복사합니다. 이 이벤트는 CodeDeploy 에이전트용이며 스크립트를 실행하는 데 사용할 수 없습니다.

  • AfterInstall – 애플리케이션 구성 또는 파일 권한 변경과 같은 작업에 이 배포 수명 주기 이벤트를 사용할 수 있습니다.

  • ApplicationStart - ApplicationStop 중에 중지된 서비스를 다시 시작하려면 일반적으로 이 배포 수명 주기 이벤트를 사용합니다.

  • ValidateService – 마지막 배포 수명 주기 이벤트입니다. 배포가 성공적으로 완료되었는지 확인하는 데 사용됩니다.

  • BeforeBlockTraffic – 로드 밸런서에서 작업이 등록 취소되기 전에 인스턴스에서 작업을 실행하려면 이 배포 수명 주기 이벤트를 사용할 수 있습니다.

    BeforeBlockTraffic 배포 수명 주기 이벤트 중 실패하는 배포 문제를 해결하려면 실패한 ApplicationStop, BeforeBlockTraffic 또는 AfterBlockTraffic 배포 수명 주기 이벤트 문제 해결 단원을 참조하세요.

  • BlockTraffic – 이 배포 수명 주기 이벤트 중에는 트래픽을 현재 제공하고 있는 인스턴스에 액세스할 수 없도록 인터넷 트래픽이 차단됩니다. 이 이벤트는 CodeDeploy 에이전트용이며 스크립트를 실행하는 데 사용할 수 없습니다.

  • AfterBlockTraffic – 각 로드 밸런서에서 작업이 등록 취소된 후 인스턴스에서 작업을 실행하려면 이 배포 수명 주기 이벤트를 사용할 수 있습니다.

    AfterBlockTraffic 배포 수명 주기 이벤트 중 실패하는 배포 문제를 해결하려면 실패한 ApplicationStop, BeforeBlockTraffic 또는 AfterBlockTraffic 배포 수명 주기 이벤트 문제 해결 단원을 참조하세요.

  • BeforeAllowTraffic – 로드 밸런서에 작업이 등록되기 전에 인스턴스에서 작업을 실행하려면 이 배포 수명 주기 이벤트를 사용할 수 있습니다.

  • AllowTraffic – 이 배포 수명 주기 이벤트 중에는 배포 후 인터넷 트래픽이 인스턴스에 액세스할 수 있도록 허용됩니다. 이 이벤트는 CodeDeploy 에이전트용이며 스크립트를 실행하는 데 사용할 수 없습니다.

  • AfterAllowTraffic – 로드 밸런서에 작업이 등록된 후 인스턴스에서 작업을 실행하려면 이 배포 수명 주기 이벤트를 사용할 수 있습니다.

수명 주기 이벤트 후크 가용성

다음 표에는 각 배포 및 롤백 시나리오에 사용할 수 있는 수명 주기 이벤트 후크가 나와 있습니다.

수명 주기 이벤트 이름 Auto Scaling 시작 배포¹ Auto Scaling 종료 배포¹ 현재 위치 배포¹ 블루/그린 배포: 원본 인스턴스 블루/그린 배포: 대체 인스턴스 블루/그린 배포 롤백: 원본 인스턴스 블루/그린 배포 롤백: 대체 인스턴스
ApplicationStop
DownloadBundle³
BeforeInstall
Install³
AfterInstall
ApplicationStart
ValidateService
BeforeBlockTraffic
BlockTraffic³
AfterBlockTraffic
BeforeAllowTraffic
AllowTraffic³
AfterAllowTraffic

¹ Amazon EC2 Auto Scaling 배포에 대한 자세한 내용은 Amazon EC2 Auto Scaling에서 CodeDeploy를 사용하는 방식 단원을 참조하세요.

² 현재 위치 배포의 롤백에도 적용됩니다.

³ CodeDeploy 운영용으로 예약되어 있습니다. 스크립트를 실행하는 데 사용할 수 없습니다.

배포 시 후크의 실행 순서

Auto Scaling 시작 배포

Auto Scaling 시작 배포 중에 이벤트 후크를 다음 순서로 CodeDeploy 실행합니다.

Amazon EC2 Auto Scaling 시작 배포에 대한 자세한 내용은 Amazon EC2 Auto Scaling에서 CodeDeploy를 사용하는 방식 단원을 참조하세요.

참고

배포의 시작 DownloadBundleAllowTraffic, 설치종료 이벤트는 스크립팅할 수 없으므로 이 다이어그램에서 회색으로 표시됩니다. 하지만 AppSpec 파일 'files' 섹션을 편집하여 설치 이벤트 중에 설치되는 항목을 지정할 수 있습니다.

Auto Scaling 종료 배포

Auto Scaling 종료 배포 중에 이벤트 후크를 다음 순서로 CodeDeploy 실행합니다.

Amazon EC2 Auto Scaling 종료 배포에 대한 자세한 내용은 Auto Scaling 확장 이벤트 중 종료 배포 활성화 단원을 참조하세요.

참고

배포의 StartEnd 이벤트는 스크립팅할 수 없으므로 이 다이어그램에서 회색으로 표시됩니다. BlockTraffic

인 플레이스(in-place) 배포

인 플레이스(in-place) 배포 시(인 플레이스(in-place) 배포의 롤백 포함) 이벤트 후크는 다음 순서로 실행됩니다.

참고

인 플레이스 배포의 경우 트래픽 차단 및 허용과 관련된 6개의 후크는 배포 그룹의 Elastic Load Balancing에서 Classic Load Balancer, Application Load Balancer 또는 Network Load Balancer를 지정한 경우에만 적용됩니다.

참고

배포의 시작 DownloadBundle, 설치종료 이벤트는 스크립팅할 수 없으므로 이 다이어그램에서 회색으로 표시됩니다. 하지만 AppSpec 파일 'files' 섹션을 편집하여 설치 이벤트 중에 설치되는 항목을 지정할 수 있습니다.

블루/그린 배포

블루/그림 배포에서 이벤트 후크는 다음 순서대로 실행됩니다.

참고

배포의 시작 DownloadBundle, 설치 BlockTrafficAllowTraffic, 및 종료 이벤트는 스크립팅할 수 없으므로 이 다이어그램에서 회색으로 표시됩니다. 하지만 파일의 '파일' 섹션을 편집하여 설치 이벤트 중에 설치되는 항목을 지정할 수 있습니다. AppSpec

'hooks' 섹션의 구조

'hooks' 섹션의 구조는 다음과 같습니다.

hooks: deployment-lifecycle-event-name: - location: script-location timeout: timeout-in-seconds runas: user-name

배포 수명 주기 이벤트 이름 뒤의 hook 항목에 다음 요소를 포함할 수 있습니다.

location

필수 사항입니다. 수정의 스크립트 파일 번들 위치 hooks 섹션에서 지정한 스크립트 위치는 애플리케이션 수정 번들의 루트를 기준으로 합니다. 자세한 설명은 CodeDeploy의 개정 계획 섹션을 참조하세요.

제한 시간

선택 사항입니다. 스크립트가 실패로 간주되기 전에 실행할 수 있는 기간(초). 기본값은 3600초(1시간)입니다.

참고

3600초(1시간)은 각 배포 수명 주기 이벤트에 대한 스크립트 실행에 허용되는 최대 시간입니다. 스크립트가 이 한도를 초과하면 배포가 중지되고 인스턴스에 대한 배포가 실패합니다. 각 배포 수명 주기 이벤트의 모든 스크립트에 대해 timeout에 지정된 총 시간(초)이 이 한도를 초과하지 않아야 합니다.

runas

선택 사항입니다. 스크립트 실행 시 가장하는 사용자. 기본적으로 이 에이전트는 인스턴스에서 실행되는 CodeDeploy 에이전트입니다. CodeDeploy 비밀번호를 저장하지 않으므로 runas 사용자에게 비밀번호가 필요한 경우 사용자를 가장할 수 없습니다. 이 요소는 Amazon Linux, Ubuntu Server 및 RHEL 인스턴스에만 적용됩니다.

후크 스크립트에서 파일 참조

에 설명된 대로 스크립트를 CodeDeploy 수명 주기 이벤트에 연결하고 스크립트의 파일 (예:helper.sh) 을 참조하려면 다음을 사용하여 지정해야 합니다. AppSpec '후크' 섹션 helper.sh

절대 경로 사용

절대 경로를 사용하여 파일을 참조하려면 다음 중 하나를 사용할 수 있습니다.

배포 아카이브 위치

DownloadBundle수명 주기 이벤트 중에 CodeDeploy 에이전트는 배포용 수정 버전을 추출하여 다음 형식의 디렉터리에 배포합니다.

root-directory/deployment-group-id/deployment-id/deployment-archive

경로의 root-directory 부분은 항상 다음 표에 표시된 기본값으로 설정되거나 :root_dir 구성 설정으로 제어됩니다. 구성 설정에 대한 자세한 내용은 CodeDeploy 에이전트 구성 참조 단원을 참조하세요.

에이전트 플랫폼 기본 루트 디렉터리
Linux – 모든 RPM 분포 /opt/codedeploy-agent/deployment-root
Ubuntu 서버 – 모든 Debian 분포 /opt/codedeploy-agent/deployment-root
Windows Server %ProgramData%\Amazon\CodeDeploy

후크 스크립트에서 루트 디렉터리 경로와 DEPLOYMENT_IDDEPLOYMENT_GROUP_ID 환경 변수를 사용하여 현재 배포 아카이브에 액세스할 수 있습니다. 사용할 수 있는 변수에 대한 자세한 내용은 후크의 환경 변수 가용성 섹션을 참조하세요.

예를 들어 Linux에서 개정 버전의 루트에 있는 data.json 파일에 액세스하는 방법은 다음과 같습니다.

#!/bin/bash rootDirectory="/opt/codedeploy-agent/deployment-root" # note: this will be different if you # customize the :root_dir configuration dataFile="$rootDirectory/$DEPLOYMENT_GROUP_ID/$DEPLOYMENT_ID/deployment-archive/data.json" data=$(cat dataFile)

다른 예로, 다음은 Windows에서 Powershell을 사용하여 개정 버전의 루트에 있는 data.json 파일에 액세스하는 방법입니다.

$rootDirectory="$env:ProgramData\Amazon\CodeDeploy" # note: this will be different if you # customize the :root_dir configuration $dataFile="$rootDirectory\$env:DEPLOYMENT_GROUP_ID\$env:DEPLOYMENT_ID\deployment-archive\data.json" $data=(Get-Content $dataFile)

상대 경로 사용

상대 경로를 사용하여 파일을 참조하려면 CodeDeploy 에이전트의 작업 디렉터리를 알아야 합니다. 파일 경로는 이 디렉터리를 기준으로 합니다.

다음 표에는 CodeDeploy 에이전트의 지원되는 각 플랫폼에 대한 작업 디렉터리가 나와 있습니다.

에이전트 플랫폼 프로세스 관리 방법 수명 주기 이벤트 스크립트용 작업 디렉터리
Linux – 모든 RPM 분포 systemd(기본 값) /
init.d – 자세히 알아보기 /opt/codedeploy-agent
Ubuntu 서버 – 모든 Debian 분포 모두 /opt/codedeploy-agent
Windows Server 해당 사항 없음 C:\Windows\System32

후크의 환경 변수 가용성

각 배포 수명 주기 이벤트 중 후크 스크립트는 다음 환경 변수에 액세스할 수 있습니다.

APPLICATION_NAME

현재 배포에 CodeDeploy 포함된 애플리케이션의 이름 (예:WordPress_App).

DEPLOYMENT_ID

ID가 현재 배포에 CodeDeploy 할당되었습니다 (예:d-AB1CDEF23).

DEPLOYMENT_GROUP_NAME

현재 배포에 CodeDeploy 속한 배포 그룹의 이름 (예:WordPress_DepGroup).

DEPLOYMENT_GROUP_ID

현재 배포에 CodeDeploy 속한 배포 그룹의 ID (예:b1a2189b-dd90-4ef5-8f40-4c1c5EXAMPLE)

LIFECYCLE_EVENT

현재 배포 수명 주기 이벤트의 이름(예: AfterInstall)

이러한 환경 변수는 각 배포 수명 주기 이벤트에 대해 로컬에서 적용됩니다.

배포 번들의 소스에 따라 후크 스크립트에 사용할 수 있는 추가 환경 변수가 있습니다.

Amazon S3의 번들

  • BUNDLE_BUCKET

    배포 번들을 다운로드할 수 있는 Amazon S3 버킷의 이름입니다(예: my-s3-bucket).

  • BUNDLE_KEY

    Amazon S3 버킷에서 다운로드한 번들의 객체 키입니다(예: WordPress_App.zip).

  • BUNDLE_VERSION

    번들의 객체 버전입니다(예: 3sL4kqtJlcpXroDTDmJ+rmSpXd3dIbrHY+MTRCxf3vjVBH40Nr8X8gdRQBpUMLUo). 이 변수는 Amazon S3 버킷에 객체 버전 관리가 활성화된 경우에만 설정됩니다.

  • BUNDLE_ETAG

    번들의 객체 etag입니다(예: b10a8db164e0754105b7a99be72e3fe5-4).

번들: GitHub

  • BUNDLE_COMMIT

    Git에서 생성한 번들의 SHA256 커밋 해시입니다(예: d2a84f4b8b650937ec8f73cd8be2c74add5a911ba64df27458ed8229da804a26).

다음 스크립트는 DEPLOYMENT_GROUP_NAME의 값이 Staging과 동일하면 Apache HTTP 서버의 수신 포트를 80이 아니라 9090으로 변경합니다. BeforeInstall 배포 수명 주기 이벤트 중에 이 스크립트를 호출해야 합니다.

if [ "$DEPLOYMENT_GROUP_NAME" == "Staging" ] then sed -i -e 's/Listen 80/Listen 9090/g' /etc/httpd/conf/httpd.conf fi

다음 스크립트 예제는 DEPLOYMENT_GROUP_NAME 환경 변수의 값이 Staging과 동일하면 오류 로그에 기록되는 메시지의 세부 수준을 경고에서 디버그로 변경합니다. BeforeInstall 배포 수명 주기 이벤트 중에 이 스크립트를 호출해야 합니다.

if [ "$DEPLOYMENT_GROUP_NAME" == "Staging" ] then sed -i -e 's/LogLevel warn/LogLevel debug/g' /etc/httpd/conf/httpd.conf fi

다음 스크립트 예제는 지정된 웹 페이지의 텍스트를 이러한 환경 변수의 값을 표시하는 텍스트로 바꿉니다. AfterInstall 배포 수명 주기 이벤트 중에 이 스크립트를 호출해야 합니다.

#!/usr/bin/python import os strToSearch="<h2>This application was deployed using CodeDeploy.</h2>" strToReplace="<h2>This page for "+os.environ['APPLICATION_NAME']+" application and "+os.environ['DEPLOYMENT_GROUP_NAME']+" deployment group with "+os.environ['DEPLOYMENT_GROUP_ID']+" deployment group ID was generated by a "+os.environ['LIFECYCLE_EVENT']+" script during "+os.environ['DEPLOYMENT_ID']+" deployment.</h2>" fp=open("/var/www/html/index.html","r") buffer=fp.read() fp.close() fp=open("/var/www/html/index.html","w") fp.write(buffer.replace(strToSearch,strToReplace)) fp.close()

후크 예제

AfterInstall 수명 주기 이벤트에 대한 두 개의 후크를 지정하는 hooks 항목의 예입니다.

hooks: AfterInstall: - location: Scripts/RunResourceTests.sh timeout: 180 - location: Scripts/PostDeploy.sh timeout: 180

Scripts/RunResourceTests.sh 스크립트는 배포 프로세스의 AfterInstall 단계 중 실행됩니다. 스크립트 실행 시간이 180초(3분)를 넘어가면 배포에 성공하지 못합니다.

'hooks' 섹션에서 지정한 스크립트 위치는 애플리케이션 수정 번들의 루트를 기준으로 합니다. 위의 예제에서 RunResourceTests.sh 파일은 Scripts 디렉터리에 있습니다. Scripts 디렉터리는 번들의 루트 수준에 있습니다. 자세한 설명은 CodeDeploy의 개정 계획 섹션을 참조하세요.