빌드 알림 샘플은 다음과 같습니다. CodeBuild - AWS CodeBuild

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

빌드 알림 샘플은 다음과 같습니다. CodeBuild

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

중요

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

샘플 실행

이 샘플을 실행하려면
  1. Amazon SNS에서 이 샘플에 사용할 주제를 설정하고 구독한 경우 4단계로 건너뜁니다. 그렇지 않고 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 사용 설명서인라인 정책 작업(콘솔)에서 “그룹, 사용자 또는 역할에 대한 인라인 정책을 편집 또는 삭제하려면” 섹션을 참조하세요.

  2. Amazon SNS에서 주제를 만들거나 식별하십시오. AWS CodeBuild CloudWatch 이벤트를 사용하여 Amazon SNS를 통해 이 주제에 대한 빌드 알림을 보냅니다.

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

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

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

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

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

    5. 주제 세부 정보: CodeBuildDemoTopic 페이지에서 주제 ARN 값을 복사합니다. 다음 단계에서 이 값을 사용합니다.

    자세한 내용은 Amazon SNS 개발자 안내서주제 생성을 참조하세요.

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

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

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

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

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

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

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

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

    자세한 내용은 Amazon SNS 개발자 가이드주제 구독을 참조하세요.

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

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

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

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

  5. CloudWatch 이벤트에서 규칙을 생성하십시오. 이렇게 하려면 https://console.aws.amazon.com/cloudwatch 에서 CloudWatch 콘솔을 여십시오.

  6. 탐색 창의 이벤트에서 규칙을 선택한 다음 규칙 생성을 선택합니다.

  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 어레이를 모두 제거합니다.

    • 빌드가 완료될 때만 이벤트를 트리거하려면 build-status 배열에서 IN_PROGRESS를 제거합니다.

    • 빌드가 시작될 때만 이벤트를 트리거하려면 build-status 배열에서 IN_PROGRESS를 제외한 모든 값을 제거합니다.

    • 모든 빌드 프로젝트에 대해 이벤트를 트리거하려면 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 User Guide의 이벤트 패턴을 사용한 콘텐츠 기반 필터링을 참조하십시오.

    참고

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

    코드 교체를 완료하면 저장을 선택합니다.

  11. 대상(Targets)에서 대상 추가(Add target)를 선택합니다.

  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. 규칙 생성을 선택합니다.

  20. 빌드 프로젝트를 생성하고, 빌드를 실행하고, 빌드 정보를 확인하십시오.

  21. 이제 빌드 알림이 성공적으로 CodeBuild 전송되고 있는지 확인하세요. 예를 들어 빌드 알림 이메일이 현재 받은 편지함에 있는지 확인합니다.

규칙의 동작을 변경하려면 CloudWatch 콘솔에서 변경하려는 규칙을 선택하고 Actions를 선택한 다음 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:5.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:5.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" } }