AWS CodeBuild에서 실행 중인 빌드를 일시 중지한 다음, AWS Systems Manager Session Manager를 사용하여 빌드 컨테이너에 연결하고 컨테이너의 상태를 볼 수 있습니다.
참고
이 기능은 Windows 환경에서는 제공되지 않습니다.
사전 조건
Session Manager를 빌드 세션과 함께 사용할 수 있게 하려면 빌드의 세션 연결을 활성화해야 합니다. 다음과 같은 두 가지 사전 요구 사항이 있습니다.
-
CodeBuild Linux 표준 큐레이트된 이미지에는 이미 SSM Agent가 설치되어 있고 SSM Agent 컨테이너 모드가 활성화되어 있습니다.
빌드에 사용자 지정 이미지를 사용하는 경우 다음을 수행하세요.
-
SSM Agent 설치 자세한 내용은 AWS Systems Manager 사용 설명서의 Linux용 EC2 인스턴스에 수동으로 SSM Agent 설치를 참조하세요. SSM Agent는 3.0.1295.0 이상 버전이어야 합니다.
-
https://github.com/aws/aws-codebuild-docker-images/blob/master/ubuntu/standard/5.0/amazon-ssm-agent.json
파일을 이미지의 /etc/amazon/ssm/
디렉터리에 복사합니다. 이렇게 하면 SSM 에이전트에서 컨테이너 모드가 활성화됩니다.
참고
이 기능이 예상대로 작동하려면 사용자 지정 이미지에 최근 업데이트한 SSM 에이전트가 필요합니다.
-
-
CodeBuild 서비스 역할에는 다음과 같은 SSM 정책이 있어야 합니다.
{ "Effect": "Allow", "Action": [ "ssmmessages:CreateControlChannel", "ssmmessages:CreateDataChannel", "ssmmessages:OpenControlChannel", "ssmmessages:OpenDataChannel" ], "Resource": "*" }
빌드를 시작할 때 CodeBuild 콘솔이 이 정책을 서비스 역할에 자동으로 연결하도록 할 수 있습니다. 또는 이 정책을 서비스 역할에 수동으로 연결할 수도 있습니다.
-
Systems Manager 기본 설정에서 감사 및 로깅 세션 활동을 활성화한 경우 CodeBuild 서비스 역할에도 추가 권한이 있어야 합니다. 권한은 로그가 저장되는 위치에 따라 다릅니다.
- CloudWatch Logs
-
CloudWatch Logs를 사용하여 로그를 저장하는 경우 CodeBuild 서비스 역할에 다음 권한을 추가합니다.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "logs:DescribeLogGroups", "Resource": "arn:aws:logs:
<region-id>
:<account-id>
:log-group:*:*" }, { "Effect": "Allow", "Action": [ "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "arn:aws:logs:<region-id>
:<account-id>
:log-group:<log-group-name>
:*" } ] } - Amazon S3
-
Amazon S3를 사용하여 로그를 저장하는 경우 CodeBuild 서비스 역할에 다음 권한을 추가합니다.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetEncryptionConfiguration", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::
<bucket-name>
", "arn:aws:s3:::<bucket-name>
/*" ] } ] }
자세한 내용은 AWS Systems Manager 사용 설명서의 세션 활동 감사 및 로깅을 참조하세요.
빌드 일시 중지
빌드를 일시 중지하려면 buildspec 파일의 모든 빌드 단계에 codebuild-breakpoint 명령을 삽입합니다. 이 시점에서 빌드가 일시 중지되므로 빌드 컨테이너에 연결하여 컨테이너를 현재 상태로 볼 수 있습니다.
예를 들어, buildspec 파일의 빌드 단계에 다음을 추가합니다.
phases:
pre_build:
commands:
- echo Entered the pre_build phase...
- echo "Hello World" > /tmp/hello-world
- codebuild-breakpoint
이 코드는 /tmp/hello-world
파일을 생성한 다음, 이 시점에서 빌드를 일시 중지합니다.
빌드를 시작합니다.
Session Manager를 빌드 세션과 함께 사용할 수 있게 하려면 빌드의 세션 연결을 활성화해야 합니다. 이렇게 하려면 빌드를 시작할 때 다음 절차를 따르세요.
https://console.aws.amazon.com/codesuite/codebuild/home
에서 AWS CodeBuild 콘솔을 엽니다. -
탐색 창에서 프로젝트 빌드를 선택합니다. 빌드 프로젝트를 선택한 다음, 재정의로 빌드 시작을 선택합니다.
-
Advanced build overrides(고급 빌드 재정의)를 선택합니다.
-
환경 섹션에서 세션 연결 활성화 옵션을 선택합니다. 이 옵션을 선택하지 않으면 codebuild-breakpoint 및 codebuild-resume 명령이 모두 무시됩니다.
-
다른 사항을 원하는 대로 변경하고 빌드 시작을 선택합니다.
-
콘솔에서 빌드 상태를 모니터링합니다. 세션을 사용할 수 있게 되면 빌드 상태 섹션에 AWS Session Manager 링크가 나타납니다.
빌드 컨테이너에 연결
다음 두 방법 중 하나로 빌드 컨테이너에 연결할 수 있습니다.
- CodeBuild 콘솔
-
웹 브라우저에서 AWS Session Manager 링크를 열어 빌드 컨테이너에 연결합니다. 빌드 컨테이너를 탐색하고 제어할 수 있는 터미널 세션이 열립니다.
- AWS CLI
-
참고
이 절차를 수행하려면 로컬 컴퓨터에 Session Manager 플러그인이 설치되어 있어야 합니다. 자세한 내용은 AWS Systems Manager 사용 설명서의 AWS CLI용 Session Manager 플러그인 설치를 참조하세요.
-
빌드 ID로 batch-get-builds API를 호출하여 세션 대상 식별자를 비롯한 빌드 관련 정보를 가져옵니다. 세션 대상 식별자 속성 이름은
aws
명령의 출력 유형에 따라 달라집니다. 바로 이 때문에--output json
이 명령에 추가된 것입니다.aws codebuild batch-get-builds --ids
<buildID>
--region<region>
--output json -
sessionTarget
속성 값을 복사합니다.sessionTarget
속성 이름은aws
명령의 출력 유형에 따라 달라질 수 있습니다. 바로 이 때문에--output json
이 이전 단계의 명령에 추가된 것입니다. -
다음 명령을 사용하여 빌드 컨테이너에 연결합니다.
aws ssm start-session --target
<sessionTarget>
--region<region>
-
이 예제에서는 /tmp/hello-world
파일이 존재하고 텍스트 Hello World
가 포함되어 있는지 확인하세요.
빌드 재개
빌드 컨테이너 검사를 마친 후 컨테이너 쉘에서 codebuild-resume 명령을 실행합니다.
$
codebuild-resume