통합 모델 참조 - AWS CodePipeline

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

통합 모델 참조

기존 고객 도구를 파이프라인 릴리스 프로세스에 통합하는 데 도움이 되도록 타사 서비스를 위한 몇 가지 사전 구축된 통합 기능이 있습니다. 파트너 또는 타사 서비스 제공업체는 통합 모델을 사용하여 에서 사용할 작업 유형을 CodePipeline 구현합니다.

에서 지원되는 통합 모델로 관리되는 작업 유형을 계획하거나 작업할 때 이 참조를 사용하십시오 CodePipeline.

타사 작업 유형을 파트너 통합으로 CodePipeline 인증하려면 AWS 파트너 네트워크 (APN) 를 참조하십시오. 이 정보는 AWS CLI 참조를 보완한 것입니다.

타사 작업 유형이 통합자와 함께 작동하는 방식

고객 파이프라인에 타사 작업 유형을 추가하여 고객 리소스에 대한 작업을 완료할 수 있습니다. 통합자는 작업 요청을 관리하고 함께 작업을 실행합니다. CodePipeline 다음 다이어그램은 고객이 파이프라인에서 사용할 수 있도록 만든 타사 작업 유형을 보여줍니다. 고객이 작업을 구성하면 작업이 실행되고 통합자의 작업 엔진에서 처리하는 작업 요청이 생성됩니다.

통합자의 작업 엔진이 타사 작업 유형 및 아티팩트를 처리하는 방법을 보여주는 이미지

이 다이어그램은 다음 단계를 보여 줍니다.

  1. 액션 정의는 에 등록되어 사용할 수 있습니다. CodePipeline 타사 작업은 타사 공급자의 고객이 사용할 수 있습니다.

  2. 제공자의 고객이 에서 작업을 선택하고 구성합니다. CodePipeline

  3. 작업이 실행되고 작업이 대기열에 추가됩니다. CodePipeline 작업이 준비되면 작업 요청을 보냅니다. CodePipeline

  4. 통합자 (타사 폴링의 작업 워커 APIs 또는 Lambda 함수) 가 작업 요청을 받아 확인을 반환하고 작업에 필요한 아티팩트를 처리합니다.

  5. 통합자는 작업 결과 및 연속 토큰과 함께 성공/실패 출력 (작업 작업자가 성공/실패 사용 APIs 또는 Lambda 함수가 성공/실패 출력 전송) 을 반환합니다.

작업 유형을 요청, 확인 및 업데이트하는 데 사용할 수 있는 단계에 대한 자세한 내용은 작업 유형 처리을 참조하세요.

개념

이 섹션에서는 타사 작업 유형에 대해 다음과 같은 용어를 사용합니다.

작업 유형

동일한 지속적 전송 워크로드를 수행하는 파이프라인에서 재사용할 수 있는 반복 가능한 프로세스입니다. 작업 유형은 Owner, Category, ProviderVersion으로 식별됩니다. 예:

{ "Category": "Deploy", "Owner": "AWS", "Provider": "CodeDeploy", "Version": "1" },

동일한 유형의 모든 작업은 동일한 구현을 공유합니다.

작업

작업 유형의 단일 인스턴스로, 파이프라인 단계 내에서 발생하는 개별 프로세스 중 하나입니다. 여기에는 일반적으로 이 작업이 실행되는 파이프라인 고유의 사용자 값이 포함됩니다.

작업 정의

작업 및 입력/출력 아티팩트를 구성하는 데 필요한 속성을 정의하는 작업 유형의 스키마입니다.

작업 실행

고객 파이프라인에서의 작업 성공 여부를 확인하기 위해 실행된 작업 모음입니다.

작업 실행 엔진

작업 유형에 사용되는 통합 유형을 정의하는 작업 실행 구성의 속성입니다. 유효 값은 JobWorkerLambda입니다.

통합

작업 유형을 구현하기 위해 통합자가 실행하는 소프트웨어를 설명합니다. CodePipeline 지원되는 두 작업 엔진 및 에 해당하는 두 가지 통합 유형을 지원합니다. JobWorker Lambda

Integrator

작업 유형의 구현을 소유한 사람입니다.

작업

파이프라인 및 고객 컨텍스트를 바탕으로 통합을 실행하는 작업입니다. 작업 실행은 하나 이상의 작업으로 구성됩니다.

작업자

고객 입력을 처리하고 작업을 실행하는 서비스입니다.

지원되는 통합 모델

CodePipeline 에는 두 가지 통합 모델이 있습니다.

  • Lambda 통합 모델: 이 통합 모델은 에서 작업 유형을 사용하는 데 선호되는 방법입니다. CodePipeline Lambda 통합 모델은 Lambda 함수를 사용하여 작업이 실행될 때 작업 요청을 처리합니다.

  • 작업자 통합 모델: 작업자 통합 모델은 이전에 타사 통합에 사용되었던 모델입니다. 작업 작업자 통합 모델은 작업이 실행될 때 작업 요청을 처리하기 CodePipeline APIs 위해 연결하도록 구성된 작업 작업자를 사용합니다.

비교를 위해 다음 표에서는 두 모델의 기능을 설명합니다.

Lambda 통합 모델 작업자 통합 모델
설명 통합자는 Lambda 함수로 통합을 작성합니다. Lambda 함수는 작업에 사용할 수 있는 작업이 있을 때마다 CodePipeline 호출됩니다. Lambda 함수는 사용 가능한 작업을 폴링하지 않고 대신 다음 작업 요청이 수신될 때까지 기다립니다. 통합자는 고객의 파이프라인에서 사용 가능한 작업을 지속적으로 폴링하는 작업자로 통합을 작성합니다. 그러면 작업 작업자는 작업을 실행하고 를 사용하여 작업 결과를 다시 제출합니다. CodePipeline CodePipeline APIs
인프라 AWS Lambda Amazon EC2 인스턴스와 같은 통합자의 인프라에 작업 작업자 코드를 배포합니다.
개발 노력 통합에는 비즈니스 로직만 포함됩니다. 통합은 비즈니스 로직을 포함하는 것 CodePipeline APIs 외에도 상호 작용해야 합니다.
운영 노력 인프라는 AWS 리소스일 뿐이므로 운영 노력이 줄어듭니다. 작업자에게 독립형 하드웨어가 필요하기 때문에 운영 노력이 더 많이 듭니다.
최대 작업 런타임 통합을 15분 이상 활발하게 실행해야 하는 경우 이 모델을 사용할 수 없습니다. 이 작업은 프로세스를 시작(예: 고객의 코드 아티팩트를 기반으로 빌드 시작)하고 프로세스가 완료되면 결과를 반환해야 하는 통합자를 위한 것입니다. 통합자는 빌드가 완료될 때까지 계속 기다리지 않는 것이 좋습니다. 대신 연속을 반환하세요. CodePipeline작업이 완료될 때까지 작업을 확인하라는 통합자의 코드가 계속되면 30초 후에 새 작업을 생성합니다. 이 모델을 사용하면 매우 오래 실행되는 작업(시간/일)을 지속할 수 있습니다.

Lambda 통합 모델

지원되는 Lambda 통합 모델에는 Lambda 함수 생성 및 타사 작업 유형에 대한 출력 정의가 포함됩니다.

다음 입력을 처리하도록 Lambda 함수를 업데이트하십시오. CodePipeline

새 Lambda 함수를 생성할 수 있습니다. 파이프라인에서 작업 유형에 사용할 수 있는 작업이 있을 때마다 실행되는 Lambda 함수에 비즈니스 로직을 추가할 수 있습니다. 인스턴스의 경우, 고객 및 파이프라인의 컨텍스트를 고려하면 고객을 위해 서비스 빌드를 시작하는 것이 좋습니다.

다음 파라미터를 사용하여 입력을 처리하도록 Lambda 함수를 업데이트하십시오. CodePipeline

형식:

  • jobId:

    • 작업의 고유한 시스템 생성 ID입니다.

    • 유형: 문자열

    • 패턴: [0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}

  • accountId:

    • 작업을 수행할 때 사용할 고객 AWS 계정의 ID.

    • 유형: 문자열

    • 패턴: [0-9]{12}

  • data:

    • 통합이 작업을 완료하는 데 사용하는 작업에 대한 기타 정보입니다.

    • 다음과 같은 맵을 포함합니다.

      • actionConfiguration:

        • 작업에 대한 구성 데이터. 작업 구성 필드는 고객이 값을 입력할 수 있도록 키-값 페어를 매핑한 것입니다. 키는 작업을 설정할 때 작업 유형 정의 파일의 주요 파라미터에 의해 결정됩니다. 이 예제에서 값은 작업 사용자가 UsernamePassword 필드에 정보를 지정하여 결정합니다.

        • 유형: 문자열 간 맵, 선택적으로 표시

          예제:

          "configuration": { "Username": "MyUser", "Password": "MyPassword" },
      • encryptionKey:

        • 아티팩트 저장소의 데이터를 암호화하는 데 사용되는 키 (예: 키) 에 대한 정보를 나타냅니다. AWS KMS

        • 내용: 데이터 유형 encryptionKey의 유형, 선택적으로 표시

      • inputArtifacts:

        • 작업할 아티팩트에 대한 정보 목록입니다(예: 테스트 또는 빌드 아티팩트).

        • 내용: 데이터 유형 Artifact의 목록, 선택적으로 표시

      • outputArtifacts:

        • 작업의 출력에 대한 정보 목록입니다.

        • 내용: 데이터 유형 Artifact의 목록, 선택적으로 표시

      • actionCredentials:

        • AWS 세션 자격 증명 객체를 나타냅니다. 이러한 자격 증명은 AWS STS에서 발급한 임시 자격 증명입니다. 파이프라인의 아티팩트를 저장하는 데 사용되는 S3 버킷의 입력 및 출력 아티팩트에 액세스하는 데 사용할 수 있습니다. CodePipeline

          또한 이러한 자격 증명은 작업 유형 정의 파일에 지정된 정책 설명 템플릿과 동일한 권한을 가집니다.

        • 내용: 데이터 유형 AWSSessionCredentials의 유형, 선택적으로 표시

      • actionExecutionId:

        • 작업 실행의 외부 ID.

        • 유형: 문자열

      • continuationToken:

        • 작업을 비동기적으로 계속하기 위해 작업에 필요한 시스템 생성 토큰(예: 배포 ID)입니다.

        • 유형: 문자열, 선택적으로 표시

데이터 형식:

  • encryptionKey:

    • id:

      • 키를 식별하는 데 사용되는 ID입니다. 키의 경우 AWS KMS 키 ID, 키 또는 별칭을 사용할 수 있습니다. ARN ARN

      • 유형: 문자열

    • type:

      • 암호화 키 유형 (예: AWS KMS 키).

      • 타입: 문자열

      • 유효값: KMS

  • Artifact:

    • name:

      • 아티팩트의 이름입니다.

      • 유형: 문자열, 선택적으로 표시

    • revision:

      • 아티팩트의 개정 ID입니다. 객체 유형에 따라 커밋 ID (GitHub) 또는 수정 ID (Amazon S3) 가 될 수 있습니다.

      • 유형: 문자열, 선택적으로 표시

    • location:

      • 아티팩트의 위치입니다.

      • 내용: 데이터 유형 ArtifactLocation의 유형, 선택적으로 표시

  • ArtifactLocation:

    • type:

      • 위치에서 아티팩트의 유형입니다.

      • 유형: 문자열, 선택적으로 표시

      • 유효값: S3

    • s3Location:

      • 개정이 포함된 S3 버킷의 위치입니다.

      • 내용: 데이터 유형 S3Location의 유형, 선택적으로 표시

  • S3Location:

    • bucketName:

      • S3 버킷의 이름.

      • 유형: 문자열

    • objectKey:

      • 버킷의 객체를 고유하게 식별하는 S3 버킷의 객체 키입니다.

      • 유형: 문자열

  • AWSSessionCredentials:

    • accessKeyId:

      • 세션에 대한 액세스 키입니다.

      • 유형: 문자열

    • secretAccessKey:

      • 세션에 대한 비밀 액세스 키입니다.

      • 유형: 문자열

    • sessionToken:

      • 세션에 대한 토큰입니다.

      • 유형: 문자열

예제:

{ "jobId": "01234567-abcd-abcd-abcd-012345678910", "accountId": "012345678910", "data": { "actionConfiguration": { "key1": "value1", "key2": "value2" }, "encryptionKey": { "id": "123-abc", "type": "KMS" }, "inputArtifacts": [ { "name": "input-art-name", "location": { "type": "S3", "s3Location": { "bucketName": "inputBucket", "objectKey": "inputKey" } } } ], "outputArtifacts": [ { "name": "output-art-name", "location": { "type": "S3", "s3Location": { "bucketName": "outputBucket", "objectKey": "outputKey" } } } ], "actionExecutionId": "actionExecutionId", "actionCredentials": { "accessKeyId": "access-id", "secretAccessKey": "secret-id", "sessionToken": "session-id" }, "continuationToken": "continueId-xxyyzz" } }

Lambda 함수의 결과를 다음으로 반환합니다. CodePipeline

통합자의 작업 작업자 리소스는 성공, 실패 또는 지속의 경우 유효한 페이로드를 반환해야 합니다.

형식:

  • result: 작업 결과입니다.

    • 필수

    • 유효한 값(대소문자 구분 안 함):

      • Success: 작업이 성공했으며 터미널임을 나타냅니다.

      • Continue: 작업이 성공했으며 계속되어야 함을 나타냅니다(예: 동일한 작업 실행을 위해 작업자가 다시 호출되는 경우).

      • Fail: 작업이 실패했고 터미널임을 나타냅니다.

  • failureType: 실패한 작업과 관련된 실패 유형입니다.

    파트너 작업의 failureType 범주는 작업을 실행하는 동안 발생한 실패 유형을 설명합니다. 통합자는 작업 실패 결과를 로 반환할 때 실패 메시지와 함께 유형을 설정합니다. CodePipeline

    • 선택 사항입니다. 결과가 Fail인 경우 필수입니다.

    • resultSuccess 또는 Continue인 경우 null이어야 합니다.

    • 유효한 값:

      • ConfigurationError

      • JobFailed

      • PermissionsError

      • RevisionOutOfSync

      • RevisionUnavailable

      • SystemUnavailable

  • continuation: 현재 작업 실행 중 다음 작업으로 전달되는 연속 상태입니다.

    • 선택 사항입니다. 결과가 Continue인 경우 필수입니다.

    • resultSuccess 또는 Fail인 경우 null이어야 합니다.

    • 속성:

      • State: 전달될 상태의 해시입니다.

  • status: 작업 실행 상태입니다.

    • 선택 사항입니다.

    • 속성:

      • ExternalExecutionId: 작업과 연결할 선택적 외부 실행 ID 또는 커밋 ID입니다.

      • Summary: 발생한 상황에 대한 선택적 요약입니다. 실패 시나리오에서는 이 메시지가 사용자에게 표시되는 실패 메시지가 됩니다.

  • outputVariables: 다음 작업 실행 시 전달되는 키/값 페어 세트입니다.

    • 선택 사항입니다.

    • resultContinue 또는 Fail인 경우 null이어야 합니다.

예제:

{ "result": "success", "failureType": null, "continuation": null, "status": { "externalExecutionId": "my-commit-id-123", "summary": "everything is dandy" }, "outputVariables": { "FirstOne": "Nice", "SecondOne": "Nicest", ... } }

연속 토큰을 사용하여 비동기 프로세스의 결과를 기다립니다.

continuation 토큰은 Lambda 함수의 페이로드 및 결과의 일부입니다. 이는 작업 상태를 에 CodePipeline 전달하고 작업을 계속해야 함을 나타내는 방법입니다. 예를 들어 통합자가 자신의 리소스에서 고객을 위해 빌드를 시작한 후에는 빌드가 완료될 때까지 기다리지 않고 as를 continue 반환하고 빌드의 고유 ID를 result as 토큰에 반환하여 최종 결과가 없음을 알립니다. CodePipeline CodePipeline continuation

참고

Lambda 함수는 최대 15분 동안만 실행할 수 있습니다. 작업을 더 오래 실행해야 하는 경우 연속 토큰을 사용할 수 있습니다.

CodePipeline 팀은 30초 후에 페이로드에 동일한 continuation 토큰을 넣고 통합자를 호출하여 완료 여부를 확인할 수 있도록 합니다. 빌드가 완료되면 통합자는 터미널 성공/실패 결과를 반환하고 그렇지 않으면 계속됩니다.

런타임 CodePipeline 시 통합자 Lambda 함수를 호출할 수 있는 권한을 제공합니다.

통합자 Lambda 함수에 권한을 추가하여 서비스 보안 CodePipeline 주체를 사용하여 호출할 수 있는 권한을 서비스에 제공합니다. CodePipeline codepipeline.amazonaws.com AWS CloudFormation 또는 명령줄을 사용하여 권한을 추가할 수 있습니다. 예시는 작업 유형 처리에서 확인하십시오.

작업자 통합 모델

상위 수준 워크플로우를 설계한 후 작업자를 생성할 수 있습니다. 타사 작업의 세부 사항이 작업자에 필요한 사항을 결정하지만 타사 작업의 대다수 작업자에는 다음 기능이 포함되어 있습니다.

  • 를 CodePipeline 사용하여 PollForThirdPartyJobs 수행한 작업에 대한 폴링.

  • 작업 승인 및 결과 반환 CodePipeline AcknowledgeThirdPartyJobPutThirdPartyJobSuccessResult, 및. PutThirdPartyJobFailureResult

  • 파이프라인에 대한 아티팩트를 Amazon S3 버킷에서 검색 및/또는 버킷에 배치. Amazon S3 버킷에서 아티팩트를 다운로드하려면 서명 버전 4 서명(Sig V4)을 사용하는 Amazon S3 클라이언트를 생성해야 합니다. 에는 Sig V4가 필요합니다. AWS KMS

    Amazon S3 버킷에 아티팩트를 업로드하려면 AWS Key Management Service (AWS KMS) 를 통한 암호화를 사용하도록 Amazon S3 PutObject 요청도 구성해야 합니다. AWS KMS 사용 AWS KMS keys. 아티팩트를 업로드할 때 를 사용할지 AWS 관리형 키 아니면 고객 관리 키를 사용할지 알기 위해서는 담당 직원이 작업 데이터를 살펴보고 암호화 키 속성을 확인해야 합니다. 속성이 설정된 경우 구성할 AWS KMS때 해당 고객 관리 키 ID를 사용해야 합니다. 키 속성이 null인 경우 를 사용합니다. AWS 관리형 키 CodePipeline 달리 AWS 관리형 키 구성하지 않는 한 를 사용합니다.

    다음은 Java 또는 에서 AWS KMS 매개변수를 생성하는 방법을 보여주는 예제입니다. NET자세한 내용은 Amazon AWS Key Management Service S3에서 를 사용하여 지정하기를 참조하십시오 AWS SDKs. Amazon S3 버킷에 대한 자세한 내용은 CodePipeline 을 참조하십시오CodePipeline 개념 .

작업자에 대한 권한 관리 전략 선택 및 구성

에서 CodePipeline 타사 작업을 위한 작업 작업자를 개발하려면 사용자 및 권한 관리를 통합하기 위한 전략이 필요합니다.

가장 간단한 전략은 AWS Identity and Access Management (IAM) 인스턴스 역할을 가진 Amazon EC2 인스턴스를 생성하여 작업 작업자에게 필요한 인프라를 추가하는 것입니다. 그러면 통합에 필요한 리소스를 쉽게 확장할 수 있습니다. 와 함께 AWS 내장된 통합을 사용하여 작업자와 간의 상호 작용을 단순화할 수 CodePipeline 있습니다.

EC2Amazon에 대해 자세히 알아보고 통합에 적합한 선택인지 판단하십시오. 자세한 내용은 Amazon EC2 - 가상 서버 호스팅을 참조하십시오. Amazon 인스턴스 설정에 대한 자세한 내용은 Amazon EC2 Linux EC2 인스턴스 시작하기를 참조하십시오.

고려해야 할 또 다른 전략은 ID 페더레이션을 사용하여 기존 ID 공급자 시스템과 리소스를 IAM 통합하는 것입니다. 이 전략은 기업 자격 증명 공급자가 이미 있거나 웹 자격 증명 공급자를 사용하여 사용자를 지원하도록 이미 구성되어 있는 경우에 유용합니다. ID 페더레이션을 사용하면 IAM 사용자를 만들거나 관리할 필요 없이 AWS 리소스에 대한 보안 액세스 권한을 부여할 수 있습니다. CodePipeline 암호 보안 요구 사항 및 자격 증명 교체에 대한 기능과 정책을 사용할 수 있습니다. 샘플 애플리케이션을 고유한 설계를 위한 템플릿으로 사용할 수 있습니다. 자세한 내용은 연동 관리를 참조하십시오.

액세스 권한을 제공하려면 사용자, 그룹 또는 역할에 권한을 추가하세요:

  • 내 사용자 및 그룹 AWS IAM Identity Center:

    권한 세트를 생성합니다. AWS IAM Identity Center 사용 설명서권한 세트 생성의 지침을 따릅니다.

  • ID 공급자를 IAM 통해 관리되는 사용자:

    ID 페더레이션을 위한 역할을 생성합니다. 사용 IAM설명서의 타사 ID 공급자 (페더레이션) 를 위한 역할 생성의 지침을 따르십시오.

  • IAM사용자:

    • 사용자가 맡을 수 있는 역할을 생성합니다. 사용 설명서의 IAM사용자 역할 생성에 나와 있는 지침을 따르십시오. IAM

    • (권장되지 않음)정책을 사용자에게 직접 연결하거나 사용자를 사용자 그룹에 추가합니다. 사용 설명서의 사용자 (콘솔) 에 권한 추가의 IAM 지침을 따르십시오.

다음은 타사 작업자와 함께 사용하기 위해 생성할 수 있는 예제 정책입니다. 이 정책은 예로만 사용되며 있는 그대로 제공됩니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codepipeline:PollForThirdPartyJobs", "codepipeline:AcknowledgeThirdPartyJob", "codepipeline:GetThirdPartyJobDetails", "codepipeline:PutThirdPartyJobSuccessResult", "codepipeline:PutThirdPartyJobFailureResult" ], "Resource": [ "arn:aws:codepipeline:us-east-2::actionType:ThirdParty/Build/Provider/1/" ] } ] }