CodeBuild의 빌드 환경에 SessionManager로 들어 보았습니다.

CircleCI는 SSH를 사용하여 빌드 컨테이너에 액세스 할 수 있지만
CodeBuild도 2020년 07월부터 SessionManager를 사용해 안에 넣게 되어 있었으므로 사용해 보았습니다.
htps : // 아 ws. 아마존. 이 m / jp / 아보 t- 아 ws / u ts- w / 2020/07 / 아 ws- 코코 부이 ld의 w- 쏘 rts 론멘 ts-u-th-a ws- 세시 온 - 마나게 r /

평상시 빌드 프로젝트의 소스는 CodePipeline으로 하고 있기 때문에, 디버그용으로 개별 실행할 때는 소스를 S3 변경할 필요가 있었습니다. (후술)

하는 방법



공식 문서 에 써 있는 대로입니다만.

1. BuildProject의 서비스 역할에 권한 추가


{
  "Effect": "Allow",
  "Action": [
    "ssmmessages:CreateControlChannel",
    "ssmmessages:CreateDataChannel",
    "ssmmessages:OpenControlChannel",
    "ssmmessages:OpenDataChannel"
  ],
  "Resource": "*"
}

2. 빌드 일시 정지하는 명령 (codebuild-breakpoint)을 buildspec에 추가하십시오.


phases:
  build:
    commands:
      - codebuild-breakpoint ←追加
      - python -m unittest discover tests

3. Enable session connection을 체크하여 실행


  • Advanced build overrides(고급 빌드 재정의)에서 환경 재정의 설정 표시

  • Enable session connection(세션 연결 사용)을 선택합니다.

  • (선택 사항) 소스 변경



    예를 들면 평소에는 CodePipeline을 소스로 하고 있는 프로젝트로, 그대로 매니콘으로부터 실행하려고 하면 에러가 나옵니다.
    CodePipeline에서 직전에 실패한 빌드 아티팩트를 S3 소스로 직접 지정하여 동일한 소스에서 실행할 수 있습니다.
  • 직전에 실패한 빌드의 Srouce Vesion에서 버킷 및 아티팩트 파일 확인
  • 그것을 수동 실행 빌드의 소스로 지정

  • 4. codebuild-breakpoint 곳에서 멈추기 때문에 브라우저에서 들어간다



    연결 가능한 상태가되면 Buils status의 오른쪽 하단에 Session Manager에 대한 링크가 나타나므로 클릭



    codebuild-breakpoint로 멈추지 않아도 나타납니다만, 들어가려고 하면 빌드가 진행되어 끝나거나 했으므로, 멈추어 들어가는 것이 좋을까라고 생각합니다.



    5. 끝나면 "codebuild-resume"에서 빌드를 재개하고 나온다



    CodeBuild 측에서 본 실행 상황


    로컬에서 성공하고 있었던 unittest가 실패하고 있었지만, 안으로 들어가 조사한 덕분에 원인 해명할 수 있었습니다. 했어!

    비고



    평소 CodePipeline에서 CodeBuild를 실행하고 있습니다만, 그 경우 「Enable session connection」에 체크를 넣는 상당한 설정을 찾을 수 없었기 때문에, CodeBuild 단독으로 움직여 안에 들어가 있습니다.

    평상시부터 「codebuild-breakpoint」를 buildspec에 넣어 두고, 디버그가 필요한 때만 CodeBuild에서 「Enable session connection」 유효하게 해 실행한다. 라는 운용이 좋습니까.

    ※「Enable session connection」하고 있지 않은 경우는 codebuild-breakpoint 및 codebuild-resume 커멘드는 무시되는 사양.

    좋은 웹페이지 즐겨찾기