CodeBuild용 빌드 알림 샘플 - AWS CodeBuild

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

CodeBuild용 빌드 알림 샘플

Amazon CloudWatch Events 에 대해 기본적으로 지원됩니다.AWS CodeBuild. CloudWatch 이벤트는 사용자의 변경 사항을 설명하는 시스템 이벤트 스트림입니다.AWS있습니다. CloudWatch Events를 사용하면 관심 있는 이벤트를 수행할 자동화된 작업과 연결하는 선언적 규칙을 작성할 수 있습니다. 이 샘플은 Amazon CloudWatch Events 및 Amazon SNS (Amazon SNS) 를 사용하여 빌드가 성공하거나 실패하거나 빌드 단계에서 다른 빌드 단계로 이동하거나 이러한 이벤트의 조합으로 이동할 때마다 구독자에게 빌드 알림을 보냅니다.

중요

이 샘플을 실행하면 AWS 계정에 요금이 발생할 수 있습니다. 여기에는 CodeBuild 및 요금이 포함됩니다.AWSAmazon CloudWatch 및 Amazon SNS SNS와 관련된 리소스 및 작업 자세한 내용은 단원을 참조하십시오.CodeBuild 요금,Amazon CloudWatch 요금, 및Amazon SNS 요금.

샘플 실행

이 샘플을 실행하려면

  1. 이 샘플에 사용할 Amazon SNS에서 이미 주제를 설정하고 구독한 경우 4단계로 건너뜁니다. 그렇지 않은 경우, IAM 사용자를 사용하는 경우AWS루트 계정 또는 관리자 IAM 사용자가 Amazon SNS와 함께 작업하려면 다음 명령문을 추가합니다 (### 여기에 문 추가 시작 ###### 여기에 문 추가 끝내기 ###) 사용자 (또는 사용자가 연결된 IAM 그룹) 로 이동합니다. AWS 루트 계정을 사용하는 것은 권장되지 않습니다. 이 설명을 통해 Amazon SNS 주제에 대한 알림 전송을 확인, 생성, 구독 및 테스트할 수 있습니다. 간결하게 나타내고 명령문 추가 위치를 알 수 있도록 줄임표(...)가 사용되었습니다. 어떤 명령문도 제거하지 않아야 하며, 이러한 줄임표는 기존 정책에 입력하지 않아야 합니다.

    { "Statement": [ ### BEGIN ADDING STATEMENT HERE ### { "Action": [ "sns:CreateTopic", "sns:GetTopicAttributes", "sns:List*", "sns:Publish", "sns:SetTopicAttributes", "sns:Subscribe" ], "Resource": "*", "Effect": "Allow" }, ### END ADDING STATEMENT HERE ### ... ], "Version": "2012-10-17" }
    참고

    이 정책을 수정하는 IAM 엔터티에는 정책을 수정하는 IAM에서 정책을 수정하는 IAM의 권한이 있어야 합니다.

    자세한 내용은 단원을 참조하십시오.고객 관리형 정책 편집또는 “그룹, 사용자 또는 역할의 인라인 정책을 편집하거나 삭제하려면” 섹션을 참조하십시오.인라인 정책 작업 (콘솔)IAM 사용 설명서.

  2. Amazon SNS에서 주제를 생성하거나 식별합니다.AWS CodeBuild는 CloudWatch 이벤트를 사용하여 Amazon SNS 통해 이 주제에 빌드 알림을 보냅니다.

    주제를 생성하려면 다음과 같이 합니다.

    1. 에서 Amazon SNS 콘솔을 엽니다.https://console.aws.amazon.com/sns.

    2. 주제 생성을 선택합니다.

    3. 새로운 주제 생성주제 이름에 주제 이름(예: CodeBuildDemoTopic)을 입력합니다. 다른 이름을 선택하는 경우 이 샘플 전체에서 해당 이름으로 바꿉니다.

    4. 주제 생성을 선택합니다.

    5. 주제 세부 정보: 코드빌드데모토픽페이지, 복사주제 ARNUSD 상당. 다음 단계에서 이 값을 사용합니다.

    자세한 내용은 단원을 참조하십시오.주제 생성Amazon SNS 개발자 안내서.

  3. 한 명 이상의 수신자가 주제를 구독하여 이메일 알림을 수신하게 합니다.

    수신자가 주제를 구독하게 하려면 다음과 같이 합니다.

    1. 이전 단계에서 Amazon SNS 콘솔을 연 상태로 탐색 창에서구독를 선택한 다음 를 선택합니다.구독 생성.

    2. 구독 생성주제 ARN에 이전 단계에서 복사한 주제 ARN을 붙여 넣습니다.

    3. 프로토콜에서 이메일을 선택합니다.

    4. 엔드포인트에 수신자의 전체 이메일 주소를 입력합니다.

    5. 구독 생성을 선택합니다.

    6. Amazon SNS 수신자에게 구독 확인 이메일을 보냅니다. 이메일 알림 수신을 시작하려면 수신자는구독 확인구독 확인 이메일에 링크합니다. 수신자가 링크를 클릭한 후 구독에 성공하면 Amazon SNS에서 해당 수신자의 웹 브라우저에 확인 메시지를 표시합니다.

    자세한 내용은 단원을 참조하십시오.주제 구독Amazon SNS 개발자 안내서.

  4. 다음 대신 IAM 사용자를 사용하는 경우AWS루트 계정 또는 관리자 IAM 사용자가 CloudWatch 이벤트로 작업하려면 다음 명령문을 추가합니다 (### 여기에 문 추가 시작 ###### 여기에 문 추가 끝내기 ###) 사용자 (또는 사용자가 연결된 IAM 그룹) 로 이동합니다. AWS 루트 계정을 사용하는 것은 권장되지 않습니다. 이 문은 사용자가 CloudWatch 이벤트로 작업할 수 있도록 하는 데 사용됩니다. 간결하게 나타내고 명령문 추가 위치를 알 수 있도록 줄임표(...)가 사용되었습니다. 어떤 명령문도 제거하지 않아야 하며, 이러한 줄임표는 기존 정책에 입력하지 않아야 합니다.

    { "Statement": [ ### BEGIN ADDING STATEMENT HERE ### { "Action": [ "events:*", "iam:PassRole" ], "Resource": "*", "Effect": "Allow" }, ### END ADDING STATEMENT HERE ### ... ], "Version": "2012-10-17" }
    참고

    이 정책을 수정하는 IAM 엔터티에는 정책을 수정하는 IAM에서 정책을 수정하는 IAM의 권한이 있어야 합니다.

    자세한 내용은 단원을 참조하십시오.고객 관리형 정책 편집또는 “그룹, 사용자 또는 역할의 인라인 정책을 편집하거나 삭제하려면” 섹션을 참조하십시오.인라인 정책 작업 (콘솔)IAM 사용 설명서.

  5. CloudWatch 이벤트에서 규칙을 생성합니다. 이렇게 하려면 에서 CloudWatch 콘솔을 엽니다.https://console.aws.amazon.com/cloudwatch.

  6. 탐색 창의 탐색 창의이벤트, 선택Rules를 선택한 다음 를 선택합니다.규칙 생성.

  7. 단계 1: 규칙 생성 페이지,이벤트 패턴서비스별 이벤트와 일치시킬 이벤트 패턴을 작성가 이미 선택되어 있어야 합니다.

  8. 서비스 이름, 선택CodeBuild. 이벤트 유형에서 모든 이벤트가 이미 선택된 상태여야 합니다.

  9. 이벤트 패턴 미리 보기에 다음 코드가 표시되어야 합니다.

    { "source": [ "aws.codebuild" ] }
  10. 편집을 선택하여 이벤트 패턴 미리 보기를 다음 두 가지 규칙 패턴 중 하나로 교체합니다.

    이 첫 번째 규칙 패턴은 빌드가 시작되거나 완료될 때 AWS CodeBuild에 지정된 빌드 프로젝트에 대해 이벤트를 트리거합니다.

    { "source": [ "aws.codebuild" ], "detail-type": [ "CodeBuild Build State Change" ], "detail": { "build-status": [ "IN_PROGRESS", "SUCCEEDED", "FAILED", "STOPPED" ], "project-name": [ "my-demo-project-1", "my-demo-project-2" ] } }

    앞의 규칙에서 필요에 따라 다음 코드를 변경합니다.

    • 빌드가 시작되거나 완료될 때 이벤트를 트리거하려면 build-status 어레이에 표시된 모든 값을 그대로 두거나 build-status 어레이를 모두 제거합니다.

    • 빌드가 완료될 때만 이벤트를 트리거하려면 제거IN_PROGRESS( 사용)build-status어레이.

    • 빌드가 시작될 때만 이벤트를 트리거하려면 다음을 제외한 모든 값을 제거하십시오.IN_PROGRESS( 사용)build-status어레이.

    • 모든 빌드 프로젝트에 대한 이벤트를 트리거하려면project-name배열을 모두 사용합니다.

    • 개별 빌드 프로젝트에 대해서만 이벤트를 트리거하려면 에서 각 빌드 프로젝트의 이름을 지정합니다.project-name어레이.

    이 두 번째 규칙 패턴은 AWS CodeBuild에 지정된 빌드 프로젝트에 대해 빌드가 한 빌드 단계에서 다른 빌드 단계로 이동할 때마다 이벤트를 트리거합니다.

    { "source": [ "aws.codebuild" ], "detail-type": [ "CodeBuild Build Phase Change" ], "detail": { "completed-phase": [ "SUBMITTED", "PROVISIONING", "DOWNLOAD_SOURCE", "INSTALL", "PRE_BUILD", "BUILD", "POST_BUILD", "UPLOAD_ARTIFACTS", "FINALIZING" ], "completed-phase-status": [ "TIMED_OUT", "STOPPED", "FAILED", "SUCCEEDED", "FAULT", "CLIENT_ERROR" ], "project-name": [ "my-demo-project-1", "my-demo-project-2" ] } }

    앞의 규칙에서 필요에 따라 다음 코드를 변경합니다.

    • 모든 빌드 단계 변경(각 빌드에 대해 최대 9개의 알림을 보낼 수 있음)에 대해 이벤트를 트리거하려면 completed-phase 어레이에 표시된 모든 값을 그대로 두거나 completed-phase 어레이를 모두 제거합니다.

    • 개별 빌드 단계 변경에 대해서만 이벤트를 트리거하려면completed-phase이벤트를 트리거하지 않으려는 배열입니다.

    • 모든 빌드 단계 상태 변경에 대해 이벤트를 트리거하려면 에 표시된 모든 값을 그대로 두십시오.completed-phase-status배열 또는 제거completed-phase-status배열을 모두 사용합니다.

    • 개별 빌드 단계 상태 변경에 대해서만 이벤트를 트리거하려면 에서 각 빌드 단계 상태의 이름을 제거합니다.completed-phase-status이벤트를 트리거하지 않으려는 배열입니다.

    • 모든 빌드 프로젝트에 대한 이벤트를 트리거하려면project-name어레이.

    • 개별 빌드 프로젝트에 대한 이벤트를 트리거하려면 에서 각 빌드 프로젝트의 이름을 지정합니다.project-name어레이.

    이벤트 패턴에 대한 자세한 내용은 단원을 참조하십시오.이벤트 패턴Amazon EventBridge 사용 설명서의 내용을 참조하십시오.

    이벤트 패턴을 사용하여 필터링에 대한 자세한 내용은 단원을 참조하십시오.이벤트 패턴을 사용한 콘텐츠 기반 필터링Amazon EventBridge 사용 설명서의 내용을 참조하십시오.

    참고

    빌드 상태 변경 및 빌드 단계 변경에 대한 이벤트를 트리거하려는 경우, 빌드 상태 변경에 대한 규칙 및 빌드 단계 변경을 위한 규칙이라는 두 가지 별도의 규칙을 생성해야 합니다. 두 가지 규칙을 단일 규칙으로 결합하려고 하면 결합된 해당 규칙으로 인해 예기치 않은 결과가 발생하거나 작업이 모두 중단될 수 있습니다.

    코드 교체를 마쳤으면 를 선택합니다.Save.

  11. 대상에서 대상 추가를 선택합니다.

  12. 대상 목록에서 SNS 주제를 선택합니다.

  13. 주제에서 식별하거나 이전에 생성한 주제를 선택합니다.

  14. 입력 구성을 확장한 후 입력 변환기를 선택합니다.

  15. 입력 경로 상자에 다음 입력 경로 중 하나를 입력합니다.

    CodeBuild Build State Changedetail-type 값을 사용하는 규칙에 대해 다음을 입력합니다.

    {"build-id":"$.detail.build-id","project-name":"$.detail.project-name","build-status":"$.detail.build-status"}

    CodeBuild Build Phase Changedetail-type 값을 사용하는 규칙에 대해 다음을 입력합니다.

    {"build-id":"$.detail.build-id","project-name":"$.detail.project-name","completed-phase":"$.detail.completed-phase","completed-phase-status":"$.detail.completed-phase-status"}

    다른 유형의 정보를 가져오려면빌드 알림 입력 형식 참조.

  16. 입력 템플릿 상자에 다음 입력 템플릿 중 하나를 입력합니다.

    CodeBuild Build State Changedetail-type 값을 사용하는 규칙에 대해 다음을 입력합니다.

    "Build '<build-id>' for build project '<project-name>' has reached the build status of '<build-status>'."

    CodeBuild Build Phase Changedetail-type 값을 사용하는 규칙에 대해 다음을 입력합니다.

    "Build '<build-id>' for build project '<project-name>' has completed the build phase of '<completed-phase>' with a status of '<completed-phase-status>'."
  17. 세부 정보 구성을 선택합니다.

  18. 단계 2: 규칙 세부 정보 구성페이지에서 이름과 설명 (선택 사항) 을 입력합니다. 상태에 대해 사용을 선택한 상태로 둡니다.

  19. 규칙 생성(Create rule)을 선택합니다.

  20. 직접 CodeBuild에 있는 단계를 수행하여 빌드 프로젝트를 생성하고, 빌드를 실행하고, 빌드 정보를 확인합니다.

  21. CodeBuild가 빌드 알림을 성공적으로 보내고 있는지 확인합니다. 예를 들어 빌드 알림 이메일이 현재 받은 편지함에 있는지 확인합니다.

규칙의 동작을 변경하려면 CloudWatch 콘솔에서 변경하려는 규칙을 선택한 후작업를 선택한 다음 를 선택합니다.Edit. 규칙을 변경하고 구성 세부 정보를 선택한 후 규칙 업데이트를 선택합니다.

규칙을 사용하여 빌드 알림을 보내는 것을 중지하려면 CloudWatch 콘솔에서 사용을 중지하려는 규칙을 선택한 후작업를 선택한 다음 를 선택합니다.비활성화.

규칙을 모두 삭제하려면 CloudWatch 콘솔에서 삭제하려는 규칙을 선택한 후작업를 선택한 다음 를 선택합니다.삭제.

관련 리소스

빌드 알림 입력 형식 참조

CloudWatch는 JSON 형식으로 알림을 전송합니다.

빌드 상태 변경 알림은 다음 형식을 사용합니다.

{ "version": "0", "id": "c030038d-8c4d-6141-9545-00ff7b7153EX", "detail-type": "CodeBuild Build State Change", "source": "aws.codebuild", "account": "123456789012", "time": "2017-09-01T16:14:28Z", "region": "us-west-2", "resources":[ "arn:aws:codebuild:us-west-2:123456789012:build/my-sample-project:8745a7a9-c340-456a-9166-edf953571bEX" ], "detail":{ "build-status": "SUCCEEDED", "project-name": "my-sample-project", "build-id": "arn:aws:codebuild:us-west-2:123456789012:build/my-sample-project:8745a7a9-c340-456a-9166-edf953571bEX", "additional-information": { "artifact": { "md5sum": "da9c44c8a9a3cd4b443126e823168fEX", "sha256sum": "6ccc2ae1df9d155ba83c597051611c42d60e09c6329dcb14a312cecc0a8e39EX", "location": "arn:aws:s3:::codebuild-123456789012-output-bucket/my-output-artifact.zip" }, "environment": { "image": "aws/codebuild/standard:4.0", "privileged-mode": false, "compute-type": "BUILD_GENERAL1_SMALL", "type": "LINUX_CONTAINER", "environment-variables": [] }, "timeout-in-minutes": 60, "build-complete": true, "initiator": "MyCodeBuildDemoUser", "build-start-time": "Sep 1, 2017 4:12:29 PM", "source": { "location": "codebuild-123456789012-input-bucket/my-input-artifact.zip", "type": "S3" }, "logs": { "group-name": "/aws/codebuild/my-sample-project", "stream-name": "8745a7a9-c340-456a-9166-edf953571bEX", "deep-link": "https://console.aws.amazon.com/cloudwatch/home?region=us-west-2#logEvent:group=/aws/codebuild/my-sample-project;stream=8745a7a9-c340-456a-9166-edf953571bEX" }, "phases": [ { "phase-context": [], "start-time": "Sep 1, 2017 4:12:29 PM", "end-time": "Sep 1, 2017 4:12:29 PM", "duration-in-seconds": 0, "phase-type": "SUBMITTED", "phase-status": "SUCCEEDED" }, { "phase-context": [], "start-time": "Sep 1, 2017 4:12:29 PM", "end-time": "Sep 1, 2017 4:13:05 PM", "duration-in-seconds": 36, "phase-type": "PROVISIONING", "phase-status": "SUCCEEDED" }, { "phase-context": [], "start-time": "Sep 1, 2017 4:13:05 PM", "end-time": "Sep 1, 2017 4:13:10 PM", "duration-in-seconds": 4, "phase-type": "DOWNLOAD_SOURCE", "phase-status": "SUCCEEDED" }, { "phase-context": [], "start-time": "Sep 1, 2017 4:13:10 PM", "end-time": "Sep 1, 2017 4:13:10 PM", "duration-in-seconds": 0, "phase-type": "INSTALL", "phase-status": "SUCCEEDED" }, { "phase-context": [], "start-time": "Sep 1, 2017 4:13:10 PM", "end-time": "Sep 1, 2017 4:13:10 PM", "duration-in-seconds": 0, "phase-type": "PRE_BUILD", "phase-status": "SUCCEEDED" }, { "phase-context": [], "start-time": "Sep 1, 2017 4:13:10 PM", "end-time": "Sep 1, 2017 4:14:21 PM", "duration-in-seconds": 70, "phase-type": "BUILD", "phase-status": "SUCCEEDED" }, { "phase-context": [], "start-time": "Sep 1, 2017 4:14:21 PM", "end-time": "Sep 1, 2017 4:14:21 PM", "duration-in-seconds": 0, "phase-type": "POST_BUILD", "phase-status": "SUCCEEDED" }, { "phase-context": [], "start-time": "Sep 1, 2017 4:14:21 PM", "end-time": "Sep 1, 2017 4:14:21 PM", "duration-in-seconds": 0, "phase-type": "UPLOAD_ARTIFACTS", "phase-status": "SUCCEEDED" }, { "phase-context": [], "start-time": "Sep 1, 2017 4:14:21 PM", "end-time": "Sep 1, 2017 4:14:26 PM", "duration-in-seconds": 4, "phase-type": "FINALIZING", "phase-status": "SUCCEEDED" }, { "start-time": "Sep 1, 2017 4:14:26 PM", "phase-type": "COMPLETED" } ] }, "current-phase": "COMPLETED", "current-phase-context": "[]", "version": "1" } }

빌드 단계 변경 알림은 다음 형식을 사용합니다.

{ "version": "0", "id": "43ddc2bd-af76-9ca5-2dc7-b695e15adeEX", "detail-type": "CodeBuild Build Phase Change", "source": "aws.codebuild", "account": "123456789012", "time": "2017-09-01T16:14:21Z", "region": "us-west-2", "resources":[ "arn:aws:codebuild:us-west-2:123456789012:build/my-sample-project:8745a7a9-c340-456a-9166-edf953571bEX" ], "detail":{ "completed-phase": "COMPLETED", "project-name": "my-sample-project", "build-id": "arn:aws:codebuild:us-west-2:123456789012:build/my-sample-project:8745a7a9-c340-456a-9166-edf953571bEX", "completed-phase-context": "[]", "additional-information": { "artifact": { "md5sum": "da9c44c8a9a3cd4b443126e823168fEX", "sha256sum": "6ccc2ae1df9d155ba83c597051611c42d60e09c6329dcb14a312cecc0a8e39EX", "location": "arn:aws:s3:::codebuild-123456789012-output-bucket/my-output-artifact.zip" }, "environment": { "image": "aws/codebuild/standard:4.0", "privileged-mode": false, "compute-type": "BUILD_GENERAL1_SMALL", "type": "LINUX_CONTAINER", "environment-variables": [] }, "timeout-in-minutes": 60, "build-complete": true, "initiator": "MyCodeBuildDemoUser", "build-start-time": "Sep 1, 2017 4:12:29 PM", "source": { "location": "codebuild-123456789012-input-bucket/my-input-artifact.zip", "type": "S3" }, "logs": { "group-name": "/aws/codebuild/my-sample-project", "stream-name": "8745a7a9-c340-456a-9166-edf953571bEX", "deep-link": "https://console.aws.amazon.com/cloudwatch/home?region=us-west-2#logEvent:group=/aws/codebuild/my-sample-project;stream=8745a7a9-c340-456a-9166-edf953571bEX" }, "phases": [ { "phase-context": [], "start-time": "Sep 1, 2017 4:12:29 PM", "end-time": "Sep 1, 2017 4:12:29 PM", "duration-in-seconds": 0, "phase-type": "SUBMITTED", "phase-status": "SUCCEEDED" }, { "phase-context": [], "start-time": "Sep 1, 2017 4:12:29 PM", "end-time": "Sep 1, 2017 4:13:05 PM", "duration-in-seconds": 36, "phase-type": "PROVISIONING", "phase-status": "SUCCEEDED" }, { "phase-context": [], "start-time": "Sep 1, 2017 4:13:05 PM", "end-time": "Sep 1, 2017 4:13:10 PM", "duration-in-seconds": 4, "phase-type": "DOWNLOAD_SOURCE", "phase-status": "SUCCEEDED" }, { "phase-context": [], "start-time": "Sep 1, 2017 4:13:10 PM", "end-time": "Sep 1, 2017 4:13:10 PM", "duration-in-seconds": 0, "phase-type": "INSTALL", "phase-status": "SUCCEEDED" }, { "phase-context": [], "start-time": "Sep 1, 2017 4:13:10 PM", "end-time": "Sep 1, 2017 4:13:10 PM", "duration-in-seconds": 0, "phase-type": "PRE_BUILD", "phase-status": "SUCCEEDED" }, { "phase-context": [], "start-time": "Sep 1, 2017 4:13:10 PM", "end-time": "Sep 1, 2017 4:14:21 PM", "duration-in-seconds": 70, "phase-type": "BUILD", "phase-status": "SUCCEEDED" }, { "phase-context": [], "start-time": "Sep 1, 2017 4:14:21 PM", "end-time": "Sep 1, 2017 4:14:21 PM", "duration-in-seconds": 0, "phase-type": "POST_BUILD", "phase-status": "SUCCEEDED" }, { "phase-context": [], "start-time": "Sep 1, 2017 4:14:21 PM", "end-time": "Sep 1, 2017 4:14:21 PM", "duration-in-seconds": 0, "phase-type": "UPLOAD_ARTIFACTS", "phase-status": "SUCCEEDED" }, { "phase-context": [], "start-time": "Sep 1, 2017 4:14:21 PM", "end-time": "Sep 1, 2017 4:14:26 PM", "duration-in-seconds": 4, "phase-type": "FINALIZING", "phase-status": "SUCCEEDED" }, { "start-time": "Sep 1, 2017 4:14:26 PM", "phase-type": "COMPLETED" } ] }, "completed-phase-status": "SUCCEEDED", "completed-phase-duration-seconds": 4, "version": "1", "completed-phase-start": "Sep 1, 2017 4:14:21 PM", "completed-phase-end": "Sep 1, 2017 4:14:26 PM" } }