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 배포에서 이벤트 후크는 다음 순서로 실행됩니다.

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, AfterAllowTestTraffic BeforeAllowTrafficAfterAllowTraffic 배포 수명 주기 이벤트에 동일한 함수 또는 다른 함수를 사용할 수 있습니다. 검증 테스트를 완료한 후 Lambda AfterAllowTraffic 함수는 Succeeded 또는 의 결과를 다시 CodeDeploy 호출하고 전달합니다Failed.

중요

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

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 AWS Lambda 배포에 대한 '후크' 섹션

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

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

  • BeforeAllowTraffic - 트래픽이 배포된 Lambda 함수 버전으로 전환되기 전에 태스크를 실행하는 데 사용합니다.

  • AfterAllowTraffic - 모든 트래픽이 배포된 Lambda 함수 버전으로 전환된 후 태스크를 실행하는 데 사용합니다.

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 검증 함수는 Succeeded 또는 의 결과를 다시 호출 CodeDeploy 하고 전달합니다Failed.

중요

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

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 파일에 나열된 위치를 조회합니다. 이 파일의 위치는 다음과 같습니다.

    /opt/codedeploy-agent/deployment-root/deployment-instructions Amazon Linux, Ubuntu Server 및 RHEL Amazon EC2 인스턴스의 폴더입니다.

    C:\ProgramData\Amazon\CodeDeploy\deployment-instructions Windows Server Amazon EC2 인스턴스의 폴더입니다.

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

  • DownloadBundle - 이 배포 수명 주기 이벤트 중에 CodeDeploy 에이전트는 애플리케이션 개정 파일을 임시 위치에 복사합니다.

    /opt/codedeploy-agent/deployment-root/deployment-group-id/deployment-id/deployment-archive Amazon Linux, Ubuntu Server 및 RHEL Amazon EC2 인스턴스의 폴더입니다.

    C:\ProgramData\Amazon\CodeDeploy\deployment-group-id\deployment-id\deployment-archive Windows Server Amazon EC2 인스턴스의 폴더입니다.

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

    DownloadBundle 배포 수명 주기 이벤트 중 실패하는 배포 문제를 해결하려면 를 사용하여 실패한 DownloadBundle 배포 수명 주기 이벤트 문제 해결 UnknownError: 읽기 위해 열리지 않음 단원을 참조하세요.

  • 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
DownloadBundle3
BeforeInstall
Install³
AfterInstall
ApplicationStart
ValidateService
BeforeBlockTraffic
BlockTraffic3
AfterBlockTraffic
BeforeAllowTraffic
AllowTraffic3
AfterAllowTraffic

1 Amazon EC2 Auto Scaling 배포에 대한 자세한 내용은 섹션을 참조하세요Amazon EC2 Auto Scaling과 함께 작동하는 방식 CodeDeploy.

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

3 CodeDeploy 작업에 예약되었습니다. 스크립트를 실행하는 데 사용할 수 없습니다.

배포 시 후크의 실행 순서

Auto Scaling 시작 배포

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

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

Auto Scaling 시작 배포 중 이벤트 후크의 순서입니다.
참고

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

Auto Scaling 종료 배포

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

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

Auto Scaling 종료 배포 중 이벤트 후크의 순서입니다.
참고

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

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

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

참고

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

배치 내 배포 롤백 중 이벤트 후크의 순서입니다.
참고

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

블루/그린 배포

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

블루/그린 배포의 이벤트 후크 순서입니다.
참고

배포의 시작 , DownloadBundle, 설치 , BlockTraffic, AllowTraffic, 종료 이벤트는 스크립팅할 수 없으므로 이 다이어그램에서 회색으로 표시됩니다. 그러나 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 주기 이벤트에 스크립트를 연결 AppSpec '후크' 섹션중이고 스크립트에서 파일(예: helper.sh)을 참조하려는 경우 다음을 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인 경우 Apache HTTP 서버의 수신 대기 포트를 80이 아닌 9090으로 변경합니다Staging. 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 단원을 참조하십시오.