でカスタムアクションを作成して追加する CodePipeline - AWS CodePipeline

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

でカスタムアクションを作成して追加する CodePipeline

AWS CodePipeline には、自動リリースプロセスのリソースの構築、テスト、デプロイに役立つアクションが多数含まれています。社内で開発したビルドプロセスやテストスイート等、デフォルトアクションに含まれていないアクティビティがリリースプロセスに含まれる場合、その目的のためにカスタムアクションを作成し、パイプラインに含めることができます。を使用して AWS CLI 、 AWS アカウントに関連付けられたパイプラインにカスタムアクションを作成できます。

次のアクションカテゴリのカスタム AWS CodePipeline アクションを作成できます。

  • 項目を構築または変換するカスタムビルドアクション

  • 項目を 1 つ以上のサーバー、ウェブサイトまたはリポジトリにデプロイするカスタムデプロイアクション

  • 自動テストを設定して実行するカスタムテストアクション

  • 関数を実行するカスタム呼び出しアクション

カスタムアクションを作成するときは、このカスタムアクションのジョブリクエストをポーリングし、ジョブを実行し、ステータス結果を に返す CodePipeline ジョブワーカーも作成する必要があります CodePipeline。このジョブワーカーは、 のパブリックエンドポイントにアクセスできる限り、任意のコンピュータまたはリソースに配置できます CodePipeline。アクセスとセキュリティを簡単に管理するには、Amazon EC2インスタンスでジョブワーカーをホストすることを検討してください。

次の図では、カスタム構築アクションを含むパイプラインの高レベルビューを示します:

カスタム構築アクションを含むパイプラインの高レベルビュー。

パイプラインにステージの一部としてカスタムアクションが含まれる場合、パイプラインはジョブリクエストを作成します。カスタムジョブワーカーはそのリクエストを検出し、そのジョブを実行します (この例では、サードパーティー構築ソフトウェアを使用するカスタムプロセス)。アクションが完了すると、ジョブワーカーは成功結果または失敗結果を返します。成功結果を受け取ると、パイプラインはリビジョンと次のアクションのアーティファクトを提供します。失敗が返された場合、パイプラインはリビジョンを次のアクションに渡しません。

注記

これらの手順では、すでにの開始方法 CodePipelineのステップを完了していることを前提としています。

カスタムアクションを作成する

を使用してカスタムアクションを作成するには AWS CLI
  1. テキストエディタを開き、アクションカテゴリ、アクションプロバイダー、カスタムアクションに必要な設定を含むカスタムアクション用のJSONファイルを作成します。例えば、1 つのプロパティのみを必要とするカスタムビルドアクションを作成するには、JSONファイルは次のようになります。

    { "category": "Build", "provider": "My-Build-Provider-Name", "version": "1", "settings": { "entityUrlTemplate": "https://my-build-instance/job/{Config:ProjectName}/", "executionUrlTemplate": "https://my-build-instance/job/{Config:ProjectName}/lastSuccessfulBuild/{ExternalExecutionId}/" }, "configurationProperties": [{ "name": "ProjectName", "required": true, "key": true, "secret": false, "queryable": false, "description": "The name of the build project must be provided when this action is added to the pipeline.", "type": "String" }], "inputArtifactDetails": { "maximumCount": integer, "minimumCount": integer }, "outputArtifactDetails": { "maximumCount": integer, "minimumCount": integer }, "tags": [{ "key": "Project", "value": "ProjectA" }] }

    この例では、カスタムアクションで Project タグキーと ProjectA 値を含めることで、カスタムアクションにタグ付けを追加します。でのリソースのタグ付けの詳細については CodePipeline、「」を参照してくださいリソースのタグ付け

    JSON ファイルには、 entityUrlTemplateという 2 つのプロパティが含まれていますexecutionUrlTemplate。テンプレート内のカスタムアクションの設定プロパティで名前を参照するには、設定プロパティが必須であり、シークレットでない限り{Config:name}、 の形式URLに従います。例えば、上記のサンプルでは、entityUrlTemplate値は設定プロパティを参照します。ProjectName.

    • entityUrlTemplate: アクションのサービスプロバイダーに関する情報を提供する静的リンク。この例では、ビルドシステムには、各ビルドプロジェクトへの静的リンクが含まれます。リンク形式は、ビルドプロバイダー (または、テストなど別のアクションタイプを作成する場合はその他のサービスプロバイダー) に応じて変わります。このリンク形式を指定し、カスタムアクションが追加されたときに、ユーザーはこのリンクを選択してブラウザを開き、ビルドプロジェクト (またはテスト環境) の詳細を提供するウェブサイト上のページに移動できるようにする必要があります。

    • executionUrlTemplate: アクションの現在の実行または最新の実行に関する情報で更新される動的リンク。カスタムジョブワーカーがジョブのステータス (成功、失敗、進行中など) を更新するときに、リンクを完了するために使用される externalExecutionId も提供されます。このリンクを使用して、アクションの実行に関する詳細を提供できます。

    例えば、パイプラインでアクションを表示すると、次の 2 つのリンクが表示されます。

    CodePipeline コンソール内のリンクは、パイプラインの実行に関する詳細情報につながります。

    1 この静的リンクは、カスタムアクションを追加し、entityUrlTemplate でアドレスを指した後で表示されます (カスタムアクションを作成するときに指定します)。

    2 この動的なリンクは、アクションを実行し、executionUrlTemplate でアドレスを指すたびに更新されます (カスタムアクションを作成するときに指定します)。

    これらのリンクタイプ、RevisionURLTemplateおよび の詳細については、 CodePipeline APIリファレンスCreateCustomActionTypeActionTypeSettings「」およびThirdPartyURL「」を参照してください。アクション構造の要件とアクションの作成方法の詳細については、「CodePipeline パイプライン構造リファレンス」を参照してください。

  2. JSON ファイルを保存し、簡単に覚えられる名前 (例:MyCustomAction.json)。

  3. AWS CLIをインストールしたコンピュータで、ターミナルセッション (Linux、OS X、Unix) またはコマンドプロンプト (Windows) を開きます。

  4. AWS CLI を使用して aws codepipeline create-custom-action-type コマンドを実行し、作成したばかりのJSONファイルの名前を指定します。

    例えば、ビルドカスタムアクションを作成するには以下のようにします。

    重要

    ファイル名の前に必ず file:// を含めてください。このコマンドでは必須です。

    aws codepipeline create-custom-action-type --cli-input-json file://MyCustomAction.json
  5. このコマンドは、作成したカスタムアクションの構造全体、および追加された JobList アクション設定プロパティを返します。パイプラインにカスタムアクションを追加するときは、JobList を使用して、プロバイダーからのプロジェクトのうちジョブをポーリングできるものを指定できます。これを設定しない場合、カスタムジョブワーカーがジョブをポーリングするときに、使用可能なすべてのジョブが返されます。

    例えば、前のコマンドは、次のような構造を返します。

    { "actionType": { "inputArtifactDetails": { "maximumCount": 1, "minimumCount": 1 }, "actionConfigurationProperties": [ { "secret": false, "required": true, "name": "ProjectName", "key": true, "description": "The name of the build project must be provided when this action is added to the pipeline." } ], "outputArtifactDetails": { "maximumCount": 0, "minimumCount": 0 }, "id": { "category": "Build", "owner": "Custom", "version": "1", "provider": "My-Build-Provider-Name" }, "settings": { "entityUrlTemplate": "https://my-build-instance/job/{Config:ProjectName}/", "executionUrlTemplate": "https://my-build-instance/job/mybuildjob/lastSuccessfulBuild/{ExternalExecutionId}/" } } }
    注記

    create-custom-action-type コマンドの出力の一部として、 idセクションには "owner": "Custom". CodePipeline automatically assigns がカスタムアクションタイプの所有者Customとして含まれています。create-custom-action-type コマンドまたは update-pipeline コマンドを使用する場合、この値を割り当てまたは変更することはできません。

カスタムアクションのジョブワーカーを作成する

カスタムアクションには、カスタムアクションの CodePipeline ジョブリクエストをポーリングし、ジョブを実行し、ステータス結果を に返すジョブワーカーが必要です CodePipeline。ジョブワーカーは、 のパブリックエンドポイントにアクセスできる限り、任意のコンピュータまたはリソースに配置できます CodePipeline。

ジョブワーカーを設計する方法は複数あります。以下のセクションでは、 のカスタムジョブワーカーを開発するための実用的なガイダンスを提供します CodePipeline。

ジョブワーカー用にアクセス許可管理戦略を選択して設定する

でカスタムアクションのカスタムジョブワーカーを開発するには CodePipeline、ユーザーとアクセス許可管理の統合戦略が必要です。

最も簡単な戦略は、IAMインスタンスロールで Amazon EC2インスタンスを作成してカスタムジョブワーカーに必要なインフラストラクチャを追加することです。これにより、統合に必要なリソースを簡単にスケールアップできます。組み込みの統合を使用して AWS 、カスタムジョブワーカーと 間のインタラクションを簡素化できます CodePipeline。

Amazon EC2インスタンスを設定するには
  1. Amazon の詳細を確認しEC2、統合に適した選択であるかどうかを判断します。詳細については、「Amazon EC2 - Virtual Server Hosting」を参照してください。

  2. Amazon EC2インスタンスの作成を開始します。詳細については、「Amazon EC2 Linux インスタンスの開始方法」を参照してください。

考慮すべきもう 1 つの戦略は、 と ID フェデレーションを使用して既存の ID IAM プロバイダーのシステムとリソースを統合することです。この戦略は、お客様がすでに企業 ID プロバイダーを持っているか、ウェブ ID プロバイダーを使用するユーザーをサポートできるよう設定されている場合に、特に便利です。ID フェデレーションを使用すると、IAMユーザーを作成または管理することなく CodePipeline、 などの AWS リソースへの安全なアクセスを許可できます。パスワードのセキュリティ要件や認証情報の更新に機能やポリシーを活用できます。サンプルアプリケーションをお客様自身の設計のテンプレートとして使用できます。

ID フェデレーションをセットアップするには
  1. IAM 認証フェデレーションの詳細について学習します。詳細については、「フェデレーションの管理」を参照してください。

  2. 一時的なアクセス権を付与するシナリオ」の例を参照して、カスタムアクションのニーズに最適な一時アクセスのシナリオを確認します。

  3. インフラストラクチャに関連する ID フェデレーションのコード例を確認します。例えば、以下の参照先をご覧ください。

  4. ID フェデレーションの設定を開始します。詳細については、IAM「 ユーザーガイド」の「アイデンティティプロバイダーとフェデレーション」を参照してください。

カスタムアクションとジョブワーカーを実行するときに、使用する次のいずれかを AWS アカウント で作成します。

ユーザーが の AWS 外部とやり取りする場合は、プログラムによるアクセスが必要です AWS Management Console。プログラムによるアクセスを許可する方法は、 にアクセスするユーザーのタイプによって異なります AWS。

ユーザーにプログラマチックアクセス権を付与するには、以下のいずれかのオプションを選択します。

プログラマチックアクセス権を必要とするユーザー 目的 方法

ワークフォースアイデンティティ

(IAMアイデンティティセンターで管理されるユーザー)

一時的な認証情報を使用して AWS CLI、 AWS SDKs、または へのプログラムによるリクエストに署名します AWS APIs。

使用するインターフェイス用の手引きに従ってください。

IAM 一時的な認証情報を使用して AWS CLI、 AWS SDKs、または へのプログラムによるリクエストに署名します AWS APIs。 IAM 「 ユーザーガイド」のAWS 「リソースで一時的な認証情報を使用する」の手順に従います。
IAM

(非推奨)

長期認証情報を使用して、 AWS CLI AWS SDKs、または へのプログラムによるリクエストに署名します AWS APIs。

使用するインターフェイス用の手引きに従ってください。

次は、カスタムジョブワーカーで使用するために作成する可能性があるポリシーの例です。このポリシーは例に過ぎず、そのまま提供されています。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codepipeline:PollForJobs", "codepipeline:AcknowledgeJob", "codepipeline:GetJobDetails", "codepipeline:PutJobSuccessResult", "codepipeline:PutJobFailureResult" ], "Resource": [ "arn:aws:codepipeline:us-east-2::actionType:custom/Build/MyBuildProject/1/" ] } ] }
注記

AWSCodePipelineCustomActionAccess マネージドポリシーの使用を検討してください。

カスタムアクションのジョブワーカーを開発する

アクセス許可管理戦略を選択したら、ジョブワーカーが とやり取りする方法を検討する必要があります CodePipeline。次の概要図は、ビルドプロセスのカスタムアクションおよびジョブワーカーのワークフローを示します。

ビルドプロセスのカスタムアクションおよびジョブワーカーのワークフロー。
  1. ジョブワーカーは、 を使用してジョブ CodePipeline をポーリングしますPollForJobs

  2. パイプラインがソースステージでの変更によってトリガーされる際 (例えば、開発者が変更をコミットした際)、自動リリースプロセスが開始します。プロセスは、カスタムアクションが設定されたステージまで継続します。この段階でアクションに達すると、 はジョブを CodePipeline キューに入れます。このジョブは、ジョブワーカーがステータスを取得するために PollForJobs を再度呼び出すと、表示されます。PollForJobs からジョブ詳細を取得し、ジョブワーカーに渡します。

  3. ジョブワーカーが AcknowledgeJobを呼び出して CodePipeline ジョブ確認を送信します。ジョブワーカーがジョブを継続する必要があることを示す確認応答 CodePipeline が返されます (InProgress)。または、ジョブに対して複数のジョブワーカーポーリングがあり、別のジョブワーカーがすでにジョブをリクエストしている場合は、InvalidNonceExceptionエラーレスポンスが返されます。InProgress 確認後、結果が返されるまで CodePipeline 待機します。

  4. ジョブワーカーはリビジョンでカスタムアクションを開始し、その後にアクションが実行されます。他のアクションとともに、カスタムアクションは結果をジョブワーカーに返します。ビルドカスタムアクションの例では、アクションが Amazon S3 バケットからアーティファクトを引き出し、構築して、構築されたアーティファクトを Amazon S3 バケットに正常にプッシュします。

  5. アクションの実行中に、ジョブワーカーは継続トークン (ビルド識別子のJSON形式や Amazon S3 オブジェクトキーなど、ジョブワーカーによって生成されたジョブの状態のシリアル化) と、 のリンクの入力に使用されるExternalExecutionId情報PutJobSuccessResultを使用して を呼び出すことができますexecutionUrlTemplate。これは、進行中に特定のアクション詳細への有効なリンクとともにパイプラインのコンソールビューを更新します。必要ではありませんが、ユーザーがカスタムアクションの実行中にそのステータスを確認することを可能にするため、ベストプラクティスです。

    PutJobSuccessResult が呼び出されると、ジョブは完了したと見なされます。継続トークン CodePipeline を含む新しいジョブが に作成されます。このジョブは、ジョブワーカーが再度 PollForJobs を呼び出すと表示されます。この新しいジョブは、アクションの状態を確認するために使用でき、継続トークンを伴って返すか、アクションが完了すると、継続トークンを伴わずに返します。

    注記

    ジョブワーカーがカスタムアクションの処理をすべて行っている場合、ジョブワーカーの処理を少なくとも 2 つのステップに分割することを考慮した方が良いでしょう。最初のステップでは、アクションの詳細ページを確立します。詳細ページを作成すると、ジョブワーカーの状態をシリアル化し、サイズ制限の対象である継続トークンとして返します。 (のクォータ AWS CodePipelineを参照してください)。例えば、継続トークンとして使用する文字列に、アクションの状態を書き込むことができます。ジョブワーカーの処理の 2 番目のステップ (およびその後のステップ) が、アクションの実際の作業を実行します。最終ステップは成功または失敗を に返します。最終ステップには継続トークン CodePipelineはありません。

    継続トークンの使用の詳細については、 PutJobSuccessResultCodePipeline APIリファレンスの の仕様を参照してください。

  6. カスタムアクションが完了すると、ジョブワーカーは 2 つの のいずれかを呼び出す CodePipeline ことで、カスタムアクションの結果を に返しますAPIs。

    • カスタムアクションの実行が成功したことを示す、継続トークンなしの PutJobSuccessResult

    • PutJobFailureResult のカスタムアクションが成功しなかったことを示す

    結果によって、パイプラインは次のアクションに継続 (成功) するか、停止 (失敗) します。

カスタムジョブワーカーのアーキテクチャと例

高レベルワークフローを綿密に計画した後、ジョブワーカーを作成できます。最終的にはカスタムアクションの仕様がジョブワーカーに必要なものを決定しますが、カスタムアクションのジョブワーカーの多くは以下の機能を含みます:

  • CodePipeline を使用してジョブをポーリングしますPollForJobs

  • ジョブを確認し、 AcknowledgeJob、、PutJobSuccessResultおよび CodePipeline を使用して結果を に返しますPutJobFailureResult

  • パイプラインの Amazon S3 バケットからアーティファクトを取得する、またはアーティファクトを配置する。Amazon S3 バケットからアーティファクトをダウンロードするには、署名バージョン 4 の署名 (Sig V4) を使用する Amazon S3 クライアントを作成する必要があります。には Sig V4 が必要です AWS KMS。

    Amazon S3 バケットにアーティファクトをアップロードするには、さらに Amazon S3 リクエスト PutObject が暗号化を使用するよう設定する必要があります。現在、 AWS キー管理サービス (AWS KMS) のみが encryption. AWS KMS uses でサポートされています 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 の概念

カスタムジョブワーカーのより複雑な例は、 で入手できます GitHub。このサンプルは、オープンソースコードであり、現状のまま提供されています。

パイプラインにカスタムアクションを追加する

ジョブワーカーを作成したら、新しいアクションを作成してパイプラインの作成ウィザードの使用時に選択するか、既存のパイプラインを編集してカスタムアクションを追加するか AWS CLI、、SDKs、または を使用して、カスタムアクションをパイプラインに追加できますAPIs。

注記

ビルドまたはデプロイアクションであれば、パイプラインの作成ウィザードでカスタムアクションを含むパイプラインを作成できます。カスタムアクションがテスト カテゴリーにある場合は、既存のパイプラインを編集して追加する必要があります。

既存のパイプラインにカスタムアクションを追加する (CLI)

を使用して AWS CLI 、既存のパイプラインにカスタムアクションを追加できます。

  1. ターミナルセッション (Linux、macOS または Unix) またはコマンドプロンプト (Windows) を開き、 get-pipeline コマンドを実行して、編集するパイプライン構造をJSONファイルにコピーします。例えば、MyFirstPipeline という名前のパイプラインの場合は、以下のコマンドを入力します。

    aws codepipeline get-pipeline --name MyFirstPipeline >pipeline.json

    このコマンドは何も返しませんが、作成したファイルは、コマンドを実行したディレクトリにあります。

  2. 任意のテキストエディタでJSONファイルを開き、ファイルの構造を変更して、カスタムアクションを既存のステージに追加します。

    注記

    そのステージでアクションを別のアクションと並行して実行する場合は、そのアクションと同じ runOrder 値を割り当てます。

    例えば、パイプラインの構造を変更して Build という名前のステージを追加し、そのステージにビルドカスタムアクションを追加するには、次のように を変更JSONしてデプロイステージの前にビルドステージを追加します。

    , { "name": "MyBuildStage", "actions": [ { "inputArtifacts": [ { "name": "MyApp" } ], "name": "MyBuildCustomAction", "actionTypeId": { "category": "Build", "owner": "Custom", "version": "1", "provider": "My-Build-Provider-Name" }, "outputArtifacts": [ { "name": "MyBuiltApp" } ], "configuration": { "ProjectName": "MyBuildProject" }, "runOrder": 1 } ] }, { "name": "Staging", "actions": [ { "inputArtifacts": [ { "name": "MyBuiltApp" } ], "name": "Deploy-CodeDeploy-Application", "actionTypeId": { "category": "Deploy", "owner": "AWS", "version": "1", "provider": "CodeDeploy" }, "outputArtifacts": [], "configuration": { "ApplicationName": "CodePipelineDemoApplication", "DeploymentGroupName": "CodePipelineDemoFleet" }, "runOrder": 1 } ] } ] }
  3. 変更を適用するには、次のようなパイプラインJSONファイルを指定して update-pipeline コマンドを実行します。

    重要

    ファイル名の前に必ず file:// を含めてください。このコマンドでは必須です。

    aws codepipeline update-pipeline --cli-input-json file://pipeline.json

    このコマンドは、編集したパイプラインの構造全体を返します。

  4. CodePipeline コンソールを開き、編集したパイプラインの名前を選択します。

    そのパイプラインには、行った変更が示されます。ソース場所を次に変更すると、修正した構造のパイプラインによりそのリビジョンが実行されます。