整合模型參考 - AWS CodePipeline

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

整合模型參考

第三方服務有數個預先建置的整合,可協助在管道發行程序中建置現有的客戶工具。合作夥伴或第三方服務供應商會使用整合模型實作 中使用的動作類型 CodePipeline。

當您規劃或使用 中支援整合模型管理的動作類型時,請使用此參考 CodePipeline。

若要將第三方動作類型認證為與 的合作夥伴整合 CodePipeline,請參閱 AWS Partner Network (APN)。此資訊是AWS CLI 參考 的補充。

第三方動作類型如何與整合器搭配使用

您可以將第三方動作類型新增至客戶管道,以完成客戶資源的任務。整合商會管理任務請求,並使用 執行動作 CodePipeline。下圖顯示為客戶在其管道中使用的第三方動作類型。客戶設定動作之後,動作會執行並建立由整合商的動作引擎處理的任務請求。

顯示整合商動作引擎如何處理第三方動作類型和成品的圖片

圖表顯示下列步驟:

  1. 動作定義已註冊,並可在 中使用 CodePipeline。第三方動作可供第三方供應商的客戶使用。

  2. 供應商的客戶在 中選擇和設定動作 CodePipeline。

  3. 動作執行和任務會在 中排入佇列 CodePipeline。當任務在 中準備就緒時 CodePipeline,它會傳送任務請求。

  4. 整合商 (第三方輪詢的作業工作者APIs或 Lambda 函數) 會提取作業請求、傳回確認,並處理動作的成品。

  5. 整合器會傳回成功/失敗輸出 (任務工作者使用成功/失敗APIs或 Lambda 函數傳送成功/失敗輸出),其中包含任務結果和延續權杖。

如需有關可用來請求、檢視和更新動作類型之步驟的資訊,請參閱 使用動作類型

概念

本節針對第三方動作類型使用下列詞彙:

動作類型

可重複的程序,可用於執行相同連續交付工作負載的管道。動作類型由 OwnerProviderCategory和 識別Version。例如:

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

相同類型的所有動作共用相同的實作。

動作

動作類型的單一執行個體,這是管道階段內發生的其中一個分散程序。這通常包含此動作執行管道特有的使用者值。

動作定義

動作類型的結構描述,定義設定動作和輸入/輸出成品所需的屬性。

動作執行

已執行的一系列任務,用於判斷客戶管道上的動作是否成功。

動作執行引擎

動作執行組態的 屬性,定義動作類型使用的整合類型。有效值為 JobWorkerLambda

整合

描述整合商執行以實作動作類型的軟體片段。 CodePipeline 支援對應至兩個支援動作引擎 JobWorker和 的兩種整合類型Lambda

整合商

擁有動作類型實作的人員。

任務

使用管道和客戶內容來執行整合的一件工作。動作執行由一或多個任務組成。

工作工作者

處理客戶輸入並執行任務的服務。

支援的整合模型

CodePipeline 有兩個整合模型:

  • Lambda 整合模型:此整合模型是使用 中動作類型的首選方法 CodePipeline。Lambda 整合模型使用 Lambda 函數,在您的動作執行時處理任務請求。

  • 工作工作者整合模型:工作工作者整合模型是先前用於第三方整合的模型。任務工作者整合模型使用設定為在 CodePipeline APIs動作執行時聯絡 的任務工作者,以處理任務請求。

為了進行比較,下表說明兩種模型的功能:

Lambda 整合模型 工作工作者整合模型
Description 整合器會將整合寫入為 Lambda 函數,每當有任務可供 動作 CodePipeline 使用時,就會叫用該函數。Lambda 函數不會輪詢可用的任務,而是等到收到下一個任務請求。 整合器會將整合寫入為任務工作者,持續輪詢客戶管道上可用的任務。然後,任務工作者會執行任務,並使用 將任務結果提交回 CodePipeline CodePipeline APIs。
基礎設施 AWS Lambda 將任務工作者程式碼部署到整合商的基礎設施,例如 Amazon EC2執行個體。
開發工作 整合僅包含業務邏輯。 除了包含業務邏輯之外,整合還需要與 CodePipeline APIs 互動。
操作工作 由於基礎設施只是 AWS 資源,因此營運工作較少。 由於作業工作者需要其獨立硬體,因此作業工作量更高。
最大任務執行時間 如果整合需要主動執行超過 15 分鐘,則無法使用此模型。此動作適用於需要啟動程序的整合商 (例如,根據客戶的程式碼成品啟動建置),並在完成時傳回結果。我們不建議整合商繼續等待建置完成。相反地,如果從整合商的程式碼收到繼續任務,則會在 30 秒內傳回繼續任務會建立新的任務,以檢查任務,直到任務完成為止。 CodePipeline 使用此模型可以持續執行非常長的任務 (小時/天)。

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】{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

    • 如果 為 Success或 ,則必須result為 null Continue

    • 有效值:

      • ConfigurationError

      • JobFailed

      • PermissionsError

      • RevisionOutOfSync

      • RevisionUnavailable

      • SystemUnavailable

  • continuation:要傳遞給目前動作執行中下一個任務的連續狀態。

    • 選用。如果結果為 則為必填Continue

    • 如果為 Success或 ,則必須result為 nullFail

    • 屬性:

      • State:要傳遞的狀態雜湊。

  • status:動作執行的狀態。

    • 選用。

    • 屬性:

      • ExternalExecutionId:要與任務建立關聯的選用外部執行 ID 或遞交 ID。

      • Summary:所發生事件的選用摘要。在失敗案例中,這會成為使用者看到的失敗訊息。

  • outputVariables:一組要傳遞給下一個動作執行的索引鍵/值對。

    • 選用。

    • 如果為 Continue或 ,則必須result為 nullFail

範例:

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

使用連續字符等待非同步程序的結果

continuation 權杖是 Lambda 函數承載和結果的一部分。這是將任務狀態傳遞給 CodePipeline 並指出任務需要繼續的一種方式。例如,在整合商在其資源上為客戶啟動建置之後,它不會等待建置完成,而是透過將建置的唯一 ID 作為 傳回 resultcontinue,並將建置的唯一 ID 傳回給 CodePipeline 作為continuation權杖 CodePipeline ,以表示它沒有終端結果。

注意

Lambda 函數最多只能執行 15 分鐘。如果任務需要執行更長的時間,您可以使用連續字符。

CodePipeline 團隊會在 30 秒後在其承載中使用相同的continuation權杖叫用整合器,以便檢查整合器是否完成。如果建置完成,整合器會傳回終端機成功/失敗結果,否則會繼續。

提供在執行階段叫用整合器 Lambda 函數的 CodePipeline 許可

您可以將許可新增至您的整合器 Lambda 函數,以便 CodePipeline 為服務提供使用 CodePipeline 服務主體調用服務的許可:codepipeline.amazonaws.com。您可以使用 AWS CloudFormation 或 命令列新增許可。如需範例,請參閱使用動作類型

工作工作者整合模型

設計好高階工作流程之後,您就可以建立工作工作者。雖然第三方動作的詳細資訊會決定作業工作者所需的項目,但大多數作業工作者的第三方動作都包含下列功能:

  • CodePipeline 使用 輪詢任務PollForThirdPartyJobs

  • CodePipeline 使用 AcknowledgeThirdPartyJob、 和 確認任務PutThirdPartyJobSuccessResult並將結果傳回給 PutThirdPartyJobFailureResult

  • 從管道的 Amazon S3 儲存貯體中擷取成品和/或將成品放入。若要從 Amazon S3 儲存貯體下載成品,您必須建立使用 Signature Version 4 簽署 (Sig V4) 的 Amazon S3 用戶端。需要 Sig V4 AWS KMS。

    若要將成品上傳到 Amazon S3 儲存貯體,您還必須設定 Amazon S3 PutObject請求以透過 AWS Key Management Service (AWS KMS) 使用加密。 AWS KMS 使用 AWS KMS keys。為了知道是否使用 AWS 受管金鑰 或客戶受管金鑰上傳成品,您的作業工作者必須查看任務資料並檢查加密金鑰屬性。如果已設定 屬性,您應該在設定 時使用該客戶受管金鑰 ID AWS KMS。如果金鑰屬性為 null,除非另有設定, AWS 受管金鑰 否則您可以使用 AWS 受管金鑰. CodePipeline uses。

    如需顯示如何在 Java 或 中建立 AWS KMS 參數的範例NET,請參閱使用 在 Amazon S3 AWS Key Management Service 中指定 AWS SDKs。如需 Amazon S3 儲存貯體的詳細資訊 CodePipeline,請參閱 CodePipeline 概念

選擇和設定任務工作者的許可管理策略

若要在 中為第三方動作開發作業工作者 CodePipeline,您需要整合使用者和許可管理的策略。

最簡單的策略是透過使用 AWS Identity and Access Management (IAM) EC2執行個體角色建立 Amazon 執行個體來新增作業工作者所需的基礎設施,這可讓您輕鬆擴展整合所需的資源。您可以使用 與 的內建整合 AWS 來簡化作業工作者與 之間的互動 CodePipeline。

進一步了解 Amazon,EC2並判斷其是否適合您的整合。如需詳細資訊,請參閱 Amazon EC2 - Virtual Server Hosting。如需設定 Amazon EC2執行個體的相關資訊,請參閱開始使用 Amazon EC2 Linux 執行個體

另一個要考慮的策略是使用身分聯合與 IAM來整合現有的身分提供者系統和資源。如果您已經擁有企業身分提供者,或已設定為支援使用 Web 身分提供者的使用者,則此策略非常有用。身分聯合可讓您授予 AWS 資源的安全存取權,包括 CodePipeline,而無需建立或管理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/" ] } ] }