Session Manager를 사용하여 빌드 디버그
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 정책이 있어야 합니다.
빌드를 시작할 때 CodeBuild 콘솔이 이 정책을 서비스 역할에 자동으로 연결하도록 할 수 있습니다. 또는 이 정책을 서비스 역할에 수동으로 연결할 수도 있습니다.
-
Systems Manager 기본 설정에서 감사 및 로깅 세션 활동을 활성화한 경우 CodeBuild 서비스 역할에도 추가 권한이 있어야 합니다. 권한은 로그가 저장되는 위치에 따라 다릅니다.
- CloudWatch Logs
-
CloudWatch Logs를 사용하여 로그를 저장하는 경우 CodeBuild 서비스 역할에 다음 권한을 추가합니다.
- Amazon S3
-
Amazon S3를 사용하여 로그를 저장하는 경우 CodeBuild 서비스 역할에 다음 권한을 추가합니다.
자세한 내용은 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