プッシュイベントを使用するようにパイプラインを編集する - AWS CodePipeline

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

プッシュイベントを使用するようにパイプラインを編集する

AWS CodePipelineフルサポート、 end-to-end 継続的デリバリー。コードの変更があったときはいつでも、パイプラインが開始されます。コードが変更されたときにパイプラインを開始する方法は 2 つあります。

  • イベント (いずれかのアマゾン) CloudWatch イベントまたはウェブフック)

  • ポーリング (定期的に確認)

当初は、ポーリングのみがサポートされていました。イベントは、コードが変更されたときにパイプラインを開始するためのデフォルトの推奨方法です。

重要

ポーリングからパイプラインを停止するには、ソースアクションの設定内で PollForSourceChanges パラメータを false に明示的に設定する必要があります。その結果、両方のイベントベースの変更検出を使用してパイプラインを誤って構成する可能性があります。そしてたとえば、の設定によるポーリング CloudWatch イベントルールと省略してPollForSourceChangesパラメータ。これにより、パイプラインが重複して実行される可能性があり、パイプラインはポーリング中のパイプラインの合計数の制限に対してカウントされます。この制限はデフォルトではイベントベースのパイプラインよりもかなり低くなっています。

ポーリングの代わりにプッシュイベントを使用することには、重要な利点があります。

  • イベントは、平均して大幅に高速化されます。定期的なチェックが必要なポーリングとは異なり、イベントでは、発生直後にパイプラインを開始します。

  • 制限の引き上げ。変更をポーリングするパイプラインに比べて CodePipeline は、より多くのイベントベースのパイプラインをサポートできます。

  • 多数のパイプラインでのエクスペリエンスの向上。お客様によっては、多数のパイプラインでのコードの変更を調べるためにリポジトリを継続的にポーリングすることで、スロットリングまたはコストの増加が発生する場合があります。これらの問題はイベントを使用することで回避できます。

を使用しての CodePipeline コンソールまたは AWS CodeStar パイプラインを作成するには、イベントはデフォルトで有効になっています。下位互換性として、API、AWS CLI、または AWS CloudFormation で作成された新しいパイプラインでは、元のポーリング機能が使用されます。イベントを使用することを強くお勧めします。オプトインするには、AWS CLIまたはAWS CloudFormationを作成するために CloudWatch イベントまたは Webhook を実行し、ポーリングを無効にします。以下の表の手順を使用してください。

新しいコンソールが起動される前に作成されたパイプラインでもイベントを使用する必要があります。オプトインするには、 CodePipeline コンソールで作成 CloudWatch イベントまたは Webhook を実行し、ポーリングを無効にします。以下の表の手順を使用してください。

を更新するには CodeCommit ソースアクション
タイプ 必要なアクション 指示
AWS CLI でパイプラインを作成して管理する場合 を使用するAWS CLIで、定期チェックを無効にし、Amazon を作成する CloudWatch イベントリソース プッシュイベント用にパイプラインを更新する (CodeCommit ソース) (CLI)
AWS CloudFormation でパイプラインを作成して管理する場合 を使用するAWS CloudFormationで、定期チェックを無効にしてAmazonを作成する変更セットを実行する CloudWatch イベントリソース プッシュイベント用にパイプラインを更新する (CodeCommit ソース) (AWS CloudFormation テンプレート)
2017 年 10 月 11 日より前にコンソールでパイプラインを作成した場合 を使用する CodePipeline コンソールでlet CodePipeline 定期チェックを無効にし、Amazon を作成する CloudWatch イベントリソース プッシュイベント用にパイプラインを更新する ( CodeCommit または Amazon S3 ソース) (コンソール)
2017 年 10 月 11 日以降にコンソールでパイプラインを作成した場合 アクションは不要
Amazon S3 ソースアクションを更新するには
タイプ 必要なアクション 指示
AWS CLI でパイプラインを作成して管理する場合 を使用するAWS CLIで、定期チェックを無効にし、Amazon を作成する CloudWatch イベントと CloudTrail リソース プッシュイベント用にパイプラインを更新する (Amazon S3 ソース) (CLI)
AWS CloudFormation でパイプラインを作成して管理する場合 を使用するAWS CloudFormationで、定期チェックを無効にしてAmazonを作成する変更セットを実行する CloudWatch イベントとAWS CloudTrailリソース プッシュイベント用にパイプラインを更新する ( Amazon S3 ソース) (AWS CloudFormation テンプレート)
2018 年 3 月 22 日より前にコンソールでパイプラインを作成した場合 を使用する CodePipeline コンソールでlet CodePipeline 定期チェックを無効にし、Amazonを作成する CloudWatch イベントとAWS CloudTrailリソース プッシュイベント用にパイプラインを更新する ( CodeCommit または Amazon S3 ソース) (コンソール)
2018 年 3 月 22 日以降にコンソールでパイプラインを作成する場合 アクションは不要
を更新するには GitHub ソースアクション
タイプ 必要なアクション 指示
AWS CLI でパイプラインを作成して管理する場合 AWS CLI で、定期チェックを無効にし、ウェブフックを作成して登録する プッシュイベント用にパイプラインを更新する ()GitHub バージョン 1 のソースアクション)
AWS CloudFormation でパイプラインを作成して管理する場合 AWS CloudFormation で、定期チェックを無効にしてウェブフックを作成、登録する変更セットを実行する プッシュイベント用にパイプラインを更新する ()GitHub バージョン 1 のソースアクション)AWS CloudFormationテンプレート)
2018 年 5 月 1 日より前にコンソールでパイプラインを作成した場合 を使用する CodePipeline コンソールでlet CodePipeline 定期チェックを無効にし、ウェブフックを作成して登録する プッシュイベント用にパイプラインを更新する ()GitHub バージョン 1 のソースアクション)
2018 年 3 月 1 日以降にコンソールでパイプラインを作成する場合 アクションは不要

プッシュイベント用にパイプラインを更新する (コンソール)

♪ CodePipeline コンソールで、推奨の変更検出方法を使用するようにパイプラインを更新できます。

プッシュイベント用にパイプラインを更新する ( CodeCommit または Amazon S3 ソース) (コンソール)

♪ CodePipeline Amazon を使用するようにパイプラインを更新するためのコンソール CloudWatch の変更を検出するイベント CodeCommit ソースリポジトリまたは Amazon S3 ソースバケット。

注記

コンソールを使用してパイプラインを編集すると、 CodeCommit ソースリポジトリや Amazon S3 ソースバケット、ルールと IAM ロールが自動的に作成されます。♪AWS CLIパイプラインを編集するには、Amazon を作成する必要があります CloudWatch イベントルールと IAM ロールを自分で作成します。詳細については、「 CodeCommit ソースアクションと CloudWatch イベント」を参照してください。

定期的なチェックを使用しているパイプラインを編集するには、これらの手順を使用します。パイプラインを作成する場合は、「CodePipeline でパイプラインを作成します。」を参照してください。

パイプラインソースステージを編集するには

  1. にサインインします。AWS Management Consoleを開き、 CodePipeline コンソールhttp://console.aws.amazon.com/codesuite/codepipeline/home

    AWS アカウントに関連付けられているすべてのパイプラインの名前が表示されます。

  2. [Name] で、編集するパイプラインの名前を選択します。これにより、パイプラインの詳細ビューが開いて、パイプラインの各ステージの各アクションの状態などがわかります。

  3. パイプライン詳細ページで、[編集] を選択します。

  4. [Edit stage] で、ソースアクションの編集アイコンを選択します。

  5. 拡張検出オプションの変更を選択しを使用する CloudWatch 変更が発生したときにパイプラインを自動的に開始するイベント (推奨)

    Amazon を示すメッセージが表示されます。 CloudWatch このパイプラインに対して作成されるイベントルール。[Update] (アップデート) を選択します。

    Amazon S3 ソースを含むパイプラインを更新する場合は、以下のメッセージが表示されます。[Update] (アップデート) を選択します。

  6. パイプラインの編集が終わったら、[パイプラインの変更を保存] を選択して概要ページに戻ります。

    Amazon の名前を示すメッセージが表示されます。 CloudWatch パイプラインに対して作成されるイベントルール。[Save and continue] を選択します。

  7. アクションをテストするには、AWS CLI を使用して、パイプラインのソースステージで指定されたソースに変更をコミットすることで、変更をリリースします。

プッシュイベント用にパイプラインを更新する (CLI)

CLI を使用して、推奨の変更検出方法を使用するようにパイプラインを更新できます。

プッシュイベント用にパイプラインを更新する (CodeCommit ソース) (CLI)

を使用するためにポーリング (定期的なチェック) を使用しているパイプラインを編集するには、次のステップを使用します。 CloudWatch パイプラインを開始するイベントルール。パイプラインを作成する場合は、「CodePipeline でパイプラインを作成します。」を参照してください。

CodeCommit でイベント駆動型パイプラインを構築するには、パイプラインの PollForSourceChanges パラメータを編集してから、以下のリソースを作成します。

  • アマゾン CloudWatch イベントイベント

  • このイベントによるパイプラインの開始を許可する IAM ロール

パイプラインの PollForSourceChanges パラメータを編集するには

重要

このメソッドを使用してパイプラインを作成すると、PollForSourceChanges パラメータはデフォルトで true になります (ただし、明示的に false に設定した場合は除きます)。イベントベースの変更検出を追加する場合は、このパラメータを出力に追加する必要があります。ポーリングを無効にするには、このパラメータを false に設定します。そうしないと、1 つのソース変更に対してパイプラインが 2 回起動されます。詳細については、「PollForSourceChanges パラメータのデフォルト設定」を参照してください

  1. get-pipeline コマンドを実行して、パイプライン構造を JSON ファイルにコピーします。例えば、MyFirstPipeline という名前のパイプラインに対して、以下のコマンドを実行します。

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

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

  2. 任意のプレーンテキストエディタで JSON ファイルを開き、以下に示しているように、PollForSourceChanges パラメータを false に変更してソースステージを編集します。

    この変更を行う理由 このパラメータを false に変更すると、定期的チェックがオフになるため、イベントベースの変更検出のみ使用することができます。

    "configuration": { "PollForSourceChanges": "false", "BranchName": "main", "RepositoryName": "MyTestRepo" },
  3. get-pipeline コマンドを使用して取得したパイプライン構造を使用している場合、JSON ファイルから metadata 行を削除します。それ以外の場合は、update-pipeline コマンドで使用することはできません。"metadata": { } 行と、"created""pipelineARN""updated" フィールドを削除します。

    例えば、構造から以下の行を削除します。

    "metadata": { "pipelineArn": "arn:aws:codepipeline:region:account-ID:pipeline-name", "created": "date", "updated": "date" }

    ファイルを保存します。

  4. 変更を適用するには、パイプライン JSON ファイルを指定して、update-pipeline コマンドを実行します。

    重要

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

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

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

    注記

    update-pipeline コマンドは、パイプラインを停止します。update-pipeline コマンドを実行したときにパイプラインによりリビジョンが実行されている場合、その実行は停止します。更新されたパイプラインによりそのリビジョンを実行するには、パイプラインを手動で開始する必要があります。パイプラインを手動で開始するには start-pipeline-execution コマンドを使用します。

を作成するには CloudWatch イベントルール CodeCommit をイベントソースとして CodePipeline ターゲットとして

  1. Amazon のアクセス許可を追加する CloudWatch 使用するイベント CodePipeline を使用してルールを起動します。詳細については、次を参照してください。Amazon のリソースベースのポリシーを利用する CloudWatch イベント

    1. 次のサンプルを使用して、許可する信頼ポリシーを作成します。 CloudWatch サービスロールを引き受ける、イベント。信頼ポリシーに trustpolicyforCWE.json と名前を付けます。

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "events.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
    2. 次のコマンドを使用して、Role-for-MyRule ロールを作成し、信頼ポリシーをアタッチします。

      aws iam create-role --role-name Role-for-MyRule --assume-role-policy-document file://trustpolicyforCWE.json
    3. 次のサンプルに示すように、MyFirstPipeline というパイプラインに対して、アクセス権限ポリシー JSON を作成します。アクセス権限ポリシーに permissionspolicyforCWE.json と名前を付けます。

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codepipeline:StartPipelineExecution" ], "Resource": [ "arn:aws:codepipeline:us-west-2:80398EXAMPLE:MyFirstPipeline" ] } ] }
    4. 次のコマンドを使用して、Role-for-MyRule ロールに CodePipeline-Permissions-Policy-for-CWE アクセス権限ポリシーをアタッチします。

      この変更を行う理由 ロールにこのポリシーを追加すると、のアクセス許可が作成されます。 CloudWatch [Events (イベント)] 。

      aws iam put-role-policy --role-name Role-for-MyRule --policy-name CodePipeline-Permissions-Policy-For-CWE --policy-document file://permissionspolicyforCWE.json
  2. put-rule コマンドを呼び出し、--name--event-pattern--role-arn パラメータを含めます。

    この変更を行う理由 このコマンドでは、AWS CloudFormation でイベントを作成することができます。

    次のサンプルコマンドは、MyCodeCommitRepoRule というルールを作成します。

    aws events put-rule --name "MyCodeCommitRepoRule" --event-pattern "{\"source\":[\"aws.codecommit\"],\"detail-type\":[\"CodeCommit Repository State Change\"],\"resources\":[\"repository-ARN\"],\"detail\":{\"referenceType\":[\"branch\"],\"referenceName\":[\"main\"]}}" --role-arn "arn:aws:iam::ACCOUNT_ID:role/Role-for-MyRule"
  3. を追加するには CodePipeline ターゲットとして、put-targetsコマンドを入力し、次のパラメータを含めます。

    • --rule パラメータは、put-rule を使用して作成した rule_name で使用されます。

    • --targets パラメータは、ターゲットリストのリスト Id とターゲットパイプラインの ARN で使用されます。

    次のサンプルコマンドでは、MyCodeCommitRepoRule と呼ばれるルールに対して指定し、ターゲット Id は 1 番で構成されています。これは、ルールのターゲットのリストが何であるかを示し、この場合は ターゲット 1 です。このサンプルコマンドでは、パイプラインのサンプルの ARN も指定されます。パイプラインは、リポジトリ内に変更が加えられると開始します。

    aws events put-targets --rule MyCodeCommitRepoRule --targets Id=1,Arn=arn:aws:codepipeline:us-west-2:80398EXAMPLE:TestPipeline

プッシュイベント用にパイプラインを更新する (Amazon S3 ソース) (CLI)

でイベントを使用するためにポーリング (定期的なチェック) を使用しているパイプラインを編集するには、次のステップを使用します。 CloudWatch 代わりにイベント。パイプラインを作成する場合は、「CodePipeline でパイプラインを作成します。」を参照してください。

Amazon S3 でイベント駆動型パイプラインを構築するには、パイプラインの PollForSourceChanges パラメータを編集してから、以下のリソースを作成します。

  • 発生するイベントのログ記録に Amazon S3 が使用できる AWS CloudTrail 証跡、バケット、およびバケットポリシー。

  • アマゾン CloudWatch イベントイベント

  • を許可する IAM ロール CloudWatch パイプラインを開始するイベント

AWS CloudTrail 証跡を作成して、ログ記録を有効にするには

AWS CLI を使用して証跡を作成するには、以下を指定して create-trail コマンドを呼び出します。

  • 証跡名。

  • AWS CloudTrail にバケットポリシーをすでに適用しているバケットです。

詳細については、次を参照してください。を使用して証跡の作成AWSコマンドラインインターフェイス

  1. create-trail コマンドを呼び出し、--name および --s3-bucket-name パラメータを含めます。

    この変更を行う理由 これにより、S3 ソースバケットに必要な CloudTrail 証跡が作成されます。

    次のコマンドでは、--name および --s3-bucket-name を使用して、my-trail という名前の証跡と、myBucket という名前のバケットを作成します。

    aws cloudtrail create-trail --name my-trail --s3-bucket-name myBucket
  2. start-logging コマンドを呼び出し、--name パラメータを含めます。

    この変更を行う理由 このコマンドは、 CloudTrail でソースバケットのログ記録を行い、にイベントを送信します CloudWatch [Events (イベント)] 。

    例:

    次のコマンドでは、--name を使用して、my-trail という名前の証跡のログ記録を開始します。

    aws cloudtrail start-logging --name my-trail
  3. put-event-selectors コマンドを呼び出し、--trail-name および --event-selectors パラメータを含めます。イベントセレクタを使用してソースバケットでログ記録するデータイベントを指定し、このイベントを Amazon に送信します。 CloudWatch イベントルール。

    この変更を行う理由 このコマンドはイベントをフィルタ処理します。

    例:

    次のサンプルコマンドでは、--trail-name および --event-selectors を使用してソースバケットと myBucket/myFolder という名前のプレフィックスにデータイベントの管理を指定します。

    aws cloudtrail put-event-selectors --trail-name my-trail --event-selectors '[{ "ReadWriteType": "WriteOnly", "IncludeManagementEvents":false, "DataResources": [{ "Type": "AWS::S3::Object", "Values": ["arn:aws:s3:::myBucket/myFolder/file.zip"] }] }]'

を作成するには CloudWatch Amazon S3 をイベントソースとして Amazon S3 をイベントルールとし、 CodePipeline をターゲットとして、アクセス権限ポリシーを適用する

  1. Amazon のアクセス権限を付与する CloudWatch 使用するイベント CodePipeline を使用してルールを起動します。詳細については、次を参照してください。Amazon のリソースベースのポリシーを利用する CloudWatch イベント

    1. 次のサンプルを使用して、許可する信頼ポリシーを作成します。 CloudWatch サービスロールを引き受ける、イベント。このスクリプトに trustpolicyforCWE.json という名前を付けます。

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "events.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
    2. 次のコマンドを使用して、Role-for-MyRule ロールを作成し、信頼ポリシーをアタッチします。

      この変更を行う理由 ロールにこの信頼ポリシーを追加すると、のアクセス許可が作成されます。 CloudWatch [Events (イベント)] 。

      aws iam create-role --role-name Role-for-MyRule --assume-role-policy-document file://trustpolicyforCWE.json
    3. 次に示すように、MyFirstPipeline という名前のパイプラインに対してアクセス許可ポリシー JSON を作成します。アクセス権限ポリシーに permissionspolicyforCWE.json と名前を付けます。

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codepipeline:StartPipelineExecution" ], "Resource": [ "arn:aws:codepipeline:us-west-2:80398EXAMPLE:MyFirstPipeline" ] } ] }
    4. 次のコマンドを実行して、作成した Role-for-MyRule ロールに新しい CodePipeline-Permissions-Policy-for-CWE アクセス権限ポリシーをアタッチします。

      aws iam put-role-policy --role-name Role-for-MyRule --policy-name CodePipeline-Permissions-Policy-For-CWE --policy-document file://permissionspolicyforCWE.json
  2. put-rule コマンドを呼び出し、--name--event-pattern--role-arn パラメータを含めます。

    次のサンプルコマンドでは、MyS3SourceRule という名前のルールが作成されます。

    aws events put-rule --name "MyS3SourceRule" --event-pattern "{\"source\":[\"aws.s3\"],\"detail-type\":[\"AWS API Call via CloudTrail\"],\"detail\":{\"eventSource\":[\"s3.amazonaws.com\"],\"eventName\":[\"CopyObject\",\"PutObject\",\"CompleteMultipartUpload\"],\"requestParameters\":{\"bucketName\":[\"my-bucket\"],\"key\":[\"my-key\"]}}} --role-arn "arn:aws:iam::ACCOUNT_ID:role/Role-for-MyRule"
  3. を追加するには CodePipeline ターゲットとして、put-targetsコマンドを入力し、--ruleそして--targetsパラメータ。

    次のコマンドでは、MyS3SourceRule という名前のルールに対して指定し、ターゲット Id は 1 番で構成されています。これは、ルールのターゲットのリストが何であるかを示し、この場合は ターゲット 1 です。このコマンドでは、パイプラインのサンプルの ARN も指定されます。パイプラインは、リポジトリ内に変更が加えられると開始します。

    aws events put-targets --rule MyS3SourceRule --targets Id=1,Arn=arn:aws:codepipeline:us-west-2:80398EXAMPLE:TestPipeline

パイプラインの PollForSourceChanges パラメータを編集するには

重要

このメソッドを使用してパイプラインを作成すると、PollForSourceChanges パラメータはデフォルトで true になります (ただし、明示的に false に設定した場合は除きます)。イベントベースの変更検出を追加する場合は、このパラメータを出力に追加する必要があります。ポーリングを無効にするには、このパラメータを false に設定します。そうしないと、1 つのソース変更に対してパイプラインが 2 回起動されます。詳細については、「PollForSourceChanges パラメータのデフォルト設定」を参照してください

  1. get-pipeline コマンドを実行して、パイプライン構造を JSON ファイルにコピーします。例えば、MyFirstPipeline という名前のパイプラインに対して、以下のコマンドを実行します。

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

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

  2. この例に示すように、プレーンテキストエディタでJSONファイルを開き、storage-bucket という名前のバケットの PollForSourceChanges パラメータを false に変更してソースステージを編集します。

    この変更を行う理由 このパラメータを false に設定すると、定期的チェックがオフになるため、イベントベースの変更検出のみ使用することができます。

    "configuration": { "S3Bucket": "storage-bucket", "PollForSourceChanges": "false", "S3ObjectKey": "index.zip" },
  3. get-pipeline コマンドを使用して取得したパイプライン構造を使用している場合、JSON ファイルから metadata 行を削除する必要があります。それ以外の場合は、update-pipeline コマンドで使用することはできません。"metadata": { } 行と、"created""pipelineARN""updated" フィールドを削除します。

    例えば、構造から以下の行を削除します。

    "metadata": { "pipelineArn": "arn:aws:codepipeline:region:account-ID:pipeline-name", "created": "date", "updated": "date" }

    ファイルを保存します。

  4. 変更を適用するには、パイプライン JSON ファイルを指定して、update-pipeline コマンドを実行します。

    重要

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

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

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

    注記

    update-pipeline コマンドは、パイプラインを停止します。update-pipeline コマンドを実行したときにパイプラインによりリビジョンが実行されている場合、その実行は停止します。更新されたパイプラインによりそのリビジョンを実行するには、パイプラインを手動で開始する必要があります。パイプラインを手動で開始するには start-pipeline-execution コマンドを使用します。

プッシュイベント用にパイプラインを更新する (AWS CloudFormation テンプレート)

推奨の方法を使用してソースの変更を検出するように、AWS CloudFormation でパイプラインを更新できます。

定期的なチェックを使用しているパイプラインを AWS CloudFormation で編集するには、以下のステップに従います。パイプラインを作成する場合は、「CodePipeline による継続的デリバリー」を参照してください。

プッシュイベント用にパイプラインを更新する (CodeCommit ソース) (AWS CloudFormation テンプレート)

AWS CodeCommit でイベント駆動型パイプラインを構築するには、パイプラインの PollForSourceChanges パラメータを編集してから、以下のリソースをテンプレートに追加します。

  • アマゾン CloudWatch イベントルール

  • の IAM ロール CloudWatch イベントルール

AWS CloudFormation でパイプラインを作成して管理する場合、テンプレートには以下のような内容が含まれます。

注記

PollForSourceChanges と呼ばれるソースステージの Configuration プロパティ。プロパティがテンプレートに含まれていない場合、PollForSourceChanges はデフォルトで true に設定されます。

YAML
Resources: AppPipeline: Type: AWS::CodePipeline::Pipeline Properties: Name: codecommit-polling-pipeline RoleArn: !GetAtt CodePipelineServiceRole.Arn Stages: - Name: Source Actions: - Name: SourceAction ActionTypeId: Category: Source Owner: AWS Version: 1 Provider: CodeCommit OutputArtifacts: - Name: SourceOutput Configuration: BranchName: !Ref BranchName RepositoryName: !Ref RepositoryName PollForSourceChanges: true RunOrder: 1
JSON
"Stages": [ { "Name": "Source", "Actions": [ { "Name": "SourceAction", "ActionTypeId": { "Category": "Source", "Owner": "AWS", "Version": 1, "Provider": "CodeCommit" }, "OutputArtifacts": [ { "Name": "SourceOutput" } ], "Configuration": { "BranchName": { "Ref": "BranchName" }, "RepositoryName": { "Ref": "RepositoryName" }, "PollForSourceChanges": true }, "RunOrder": 1 } ] },

パイプラインを更新するにはAWS CloudFormationテンプレートを作成し CloudWatch イベントルール

  1. テンプレートの Resources で、AWS::IAM::RoleAWS CloudFormation リソースを使用して、イベントにパイプラインの開始を許可する IAM ロールを設定します。このエントリによって、2 つのポリシーを使用するロールが作成されます。

    • 最初のポリシーでは、ロールを引き受けることを許可します。

    • 2 つめのポリシーでは、パイプラインを開始するアクセス権限が付与されます。

    この変更を行う理由 を追加するAWS::IAM::Roleリソースは有効にするAWS CloudFormationのアクセス許可を作成するには CloudWatch [Events (イベント)] 。このリソースは AWS CloudFormation スタックに追加されます。

    YAML
    AmazonCloudWatchEventRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Principal: Service: - events.amazonaws.com Action: sts:AssumeRole Path: / Policies: - PolicyName: cwe-pipeline-execution PolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Action: codepipeline:StartPipelineExecution Resource: !Join [ '', [ 'arn:aws:codepipeline:', !Ref 'AWS::Region', ':', !Ref 'AWS::AccountId', ':', !Ref AppPipeline ] ]
    JSON
    "AmazonCloudWatchEventRole": { "Type": "AWS::IAM::Role", "Properties": { "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "events.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }, "Path": "/", "Policies": [ { "PolicyName": "cwe-pipeline-execution", "PolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "codepipeline:StartPipelineExecution", "Resource": { "Fn::Join": [ "", [ "arn:aws:codepipeline:", { "Ref": "AWS::Region" }, ":", { "Ref": "AWS::AccountId" }, ":", { "Ref": "AppPipeline" } ] ...
  2. テンプレートで、Resourcesとすると、AWS::Events::Rule AWS CloudFormation追加するリソース CloudWatch イベントルール。このイベントパターンは、リポジトリへのプッシュの変更を監視するイベントを作成します。 CloudWatch イベントでリポジトリーの状態の変更が検出され、ルールが起動します。StartPipelineExecutionターゲットパイプラインの上での

    この変更を行う理由 AWS::Events::Rule リソースを追加すると、AWS CloudFormation でイベントを作成できるようになります。このリソースは AWS CloudFormation スタックに追加されます。

    YAML
    AmazonCloudWatchEventRule: Type: AWS::Events::Rule Properties: EventPattern: source: - aws.codecommit detail-type: - 'CodeCommit Repository State Change' resources: - !Join [ '', [ 'arn:aws:codecommit:', !Ref 'AWS::Region', ':', !Ref 'AWS::AccountId', ':', !Ref RepositoryName ] ] detail: event: - referenceCreated - referenceUpdated referenceType: - branch referenceName: - main Targets: - Arn: !Join [ '', [ 'arn:aws:codepipeline:', !Ref 'AWS::Region', ':', !Ref 'AWS::AccountId', ':', !Ref AppPipeline ] ] RoleArn: !GetAtt AmazonCloudWatchEventRole.Arn Id: codepipeline-AppPipeline
    JSON
    "AmazonCloudWatchEventRule": { "Type": "AWS::Events::Rule", "Properties": { "EventPattern": { "source": [ "aws.codecommit" ], "detail-type": [ "CodeCommit Repository State Change" ], "resources": [ { "Fn::Join": [ "", [ "arn:aws:codecommit:", { "Ref": "AWS::Region" }, ":", { "Ref": "AWS::AccountId" }, ":", { "Ref": "RepositoryName" } ] ] } ], "detail": { "event": [ "referenceCreated", "referenceUpdated" ], "referenceType": [ "branch" ], "referenceName": [ "main" ] } }, "Targets": [ { "Arn": { "Fn::Join": [ "", [ "arn:aws:codepipeline:", { "Ref": "AWS::Region" }, ":", { "Ref": "AWS::AccountId" }, ":", { "Ref": "AppPipeline" } ] ] }, "RoleArn": { "Fn::GetAtt": [ "AmazonCloudWatchEventRole", "Arn" ] }, "Id": "codepipeline-AppPipeline" } ] } },
  3. 更新したテンプレートをローカルコンピュータに保存し、AWS CloudFormation コンソールを開きます。

  4. スタックを選択し、[既存スタックの変更セットの作成] を選択します。

  5. テンプレートをアップロードし、AWS CloudFormation に示された変更を表示します。これらがスタックに加えられる変更です。新しいリソースがリストに表示されています。

  6. [Execute] (実行) を選択します。

パイプラインの PollForSourceChanges パラメータを編集するには

重要

多くの場合、パイプラインの作成時に PollForSourceChanges パラメータはデフォルトで true になります。イベントベースの変更検出を追加する場合は、このパラメータを出力に追加する必要があります。ポーリングを無効にするには、このパラメータを false に設定します。そうしないと、1 つのソース変更に対してパイプラインが 2 回起動されます。詳細については、「PollForSourceChanges パラメータのデフォルト設定」を参照してください

  • テンプレートで、PollForSourceChangesfalse に変更します。パイプライン定義に PollForSourceChanges が含まれていなかった場合は、追加して false に設定します。

    この変更を行う理由 このパラメータを false に変更すると、定期的チェックがオフになるため、イベントベースの変更検出のみ使用することができます。

    YAML
    Name: Source Actions: - Name: SourceAction ActionTypeId: Category: Source Owner: AWS Version: 1 Provider: CodeCommit OutputArtifacts: - Name: SourceOutput Configuration: BranchName: !Ref BranchName RepositoryName: !Ref RepositoryName PollForSourceChanges: false RunOrder: 1
    JSON
    { "Name": "Source", "Actions": [ { "Name": "SourceAction", "ActionTypeId": { "Category": "Source", "Owner": "AWS", "Version": 1, "Provider": "CodeCommit" }, "OutputArtifacts": [ { "Name": "SourceOutput" } ], "Configuration": { "BranchName": { "Ref": "BranchName" }, "RepositoryName": { "Ref": "RepositoryName" }, "PollForSourceChanges": false }, "RunOrder": 1 } ] },

これらのリソースを AWS CloudFormation で作成すると、パイプラインは、リポジトリのファイルの作成時または更新時にトリガーされます。以下に示しているのは、最終的なテンプレートスニペットです。

YAML
Resources: AmazonCloudWatchEventRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Principal: Service: - events.amazonaws.com Action: sts:AssumeRole Path: / Policies: - PolicyName: cwe-pipeline-execution PolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Action: codepipeline:StartPipelineExecution Resource: !Join [ '', [ 'arn:aws:codepipeline:', !Ref 'AWS::Region', ':', !Ref 'AWS::AccountId', ':', !Ref AppPipeline ] ] AmazonCloudWatchEventRule: Type: AWS::Events::Rule Properties: EventPattern: source: - aws.codecommit detail-type: - 'CodeCommit Repository State Change' resources: - !Join [ '', [ 'arn:aws:codecommit:', !Ref 'AWS::Region', ':', !Ref 'AWS::AccountId', ':', !Ref RepositoryName ] ] detail: event: - referenceCreated - referenceUpdated referenceType: - branch referenceName: - main Targets: - Arn: !Join [ '', [ 'arn:aws:codepipeline:', !Ref 'AWS::Region', ':', !Ref 'AWS::AccountId', ':', !Ref AppPipeline ] ] RoleArn: !GetAtt AmazonCloudWatchEventRole.Arn Id: codepipeline-AppPipeline AppPipeline: Type: AWS::CodePipeline::Pipeline Properties: Name: codecommit-events-pipeline RoleArn: !GetAtt CodePipelineServiceRole.Arn Stages: - Name: Source Actions: - Name: SourceAction ActionTypeId: Category: Source Owner: AWS Version: 1 Provider: CodeCommit OutputArtifacts: - Name: SourceOutput Configuration: BranchName: !Ref BranchName RepositoryName: !Ref RepositoryName PollForSourceChanges: false RunOrder: 1 ...
JSON
"Resources": { ... "AmazonCloudWatchEventRole": { "Type": "AWS::IAM::Role", "Properties": { "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "events.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }, "Path": "/", "Policies": [ { "PolicyName": "cwe-pipeline-execution", "PolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "codepipeline:StartPipelineExecution", "Resource": { "Fn::Join": [ "", [ "arn:aws:codepipeline:", { "Ref": "AWS::Region" }, ":", { "Ref": "AWS::AccountId" }, ":", { "Ref": "AppPipeline" } ] ] } } ] } } ] } }, "AmazonCloudWatchEventRule": { "Type": "AWS::Events::Rule", "Properties": { "EventPattern": { "source": [ "aws.codecommit" ], "detail-type": [ "CodeCommit Repository State Change" ], "resources": [ { "Fn::Join": [ "", [ "arn:aws:codecommit:", { "Ref": "AWS::Region" }, ":", { "Ref": "AWS::AccountId" }, ":", { "Ref": "RepositoryName" } ] ] } ], "detail": { "event": [ "referenceCreated", "referenceUpdated" ], "referenceType": [ "branch" ], "referenceName": [ "main" ] } }, "Targets": [ { "Arn": { "Fn::Join": [ "", [ "arn:aws:codepipeline:", { "Ref": "AWS::Region" }, ":", { "Ref": "AWS::AccountId" }, ":", { "Ref": "AppPipeline" } ] ] }, "RoleArn": { "Fn::GetAtt": [ "AmazonCloudWatchEventRole", "Arn" ] }, "Id": "codepipeline-AppPipeline" } ] } }, "AppPipeline": { "Type": "AWS::CodePipeline::Pipeline", "Properties": { "Name": "codecommit-events-pipeline", "RoleArn": { "Fn::GetAtt": [ "CodePipelineServiceRole", "Arn" ] }, "Stages": [ { "Name": "Source", "Actions": [ { "Name": "SourceAction", "ActionTypeId": { "Category": "Source", "Owner": "AWS", "Version": 1, "Provider": "CodeCommit" }, "OutputArtifacts": [ { "Name": "SourceOutput" } ], "Configuration": { "BranchName": { "Ref": "BranchName" }, "RepositoryName": { "Ref": "RepositoryName" }, "PollForSourceChanges": false }, "RunOrder": 1 } ] }, ...

プッシュイベント用にパイプラインを更新する ( Amazon S3 ソース) (AWS CloudFormation テンプレート)

以下の手順を使用して、Amazon S3 ソースを含むパイプラインを、ポーリングからイベントベースの変更検出に編集します。

Amazon S3 でイベント駆動型パイプラインを構築するには、パイプラインの PollForSourceChanges パラメータを編集してから、以下のリソースをテンプレートに追加します。

  • アマゾン CloudWatch イベントでは、すべての Amazon S3 イベントをログに記録する必要があります。発生するイベントのロク記録に Amazon S3 が使用できる AWS CloudTrail 証跡、バケット、バケットポリシーを作成する必要があります。詳細については、「 証跡のデータイベント 」と「 管理イベントのログ記録 」を参照してください。

  • アマゾン CloudWatch このイベントによるパイプラインの開始を許可するイベントルールと IAM ロール。

AWS CloudFormation でパイプラインを作成して管理する場合、テンプレートには以下のような内容が含まれます。

注記

PollForSourceChanges と呼ばれるソースステージの Configuration プロパティ。テンプレートにプロパティが含まれていない場合、PollForSourceChanges はデフォルトで true に設定されます。

YAML
AppPipeline: Type: AWS::CodePipeline::Pipeline Properties: RoleArn: !GetAtt CodePipelineServiceRole.Arn Stages: - Name: Source Actions: - Name: SourceAction ActionTypeId: Category: Source Owner: AWS Version: 1 Provider: S3 OutputArtifacts: - Name: SourceOutput Configuration: S3Bucket: !Ref SourceBucket S3ObjectKey: !Ref S3SourceObjectKey PollForSourceChanges: true RunOrder: 1 ...
JSON
"AppPipeline": { "Type": "AWS::CodePipeline::Pipeline", "Properties": { "RoleArn": { "Fn::GetAtt": ["CodePipelineServiceRole", "Arn"] }, "Stages": [ { "Name": "Source", "Actions": [ { "Name": "SourceAction", "ActionTypeId": { "Category": "Source", "Owner": "AWS", "Version": 1, "Provider": "S3" }, "OutputArtifacts": [ { "Name": "SourceOutput" } ], "Configuration": { "S3Bucket": { "Ref": "SourceBucket" }, "S3ObjectKey": { "Ref": "SourceObjectKey" }, "PollForSourceChanges": true }, "RunOrder": 1 } ] }, ...

を作成するには CloudWatch Amazon S3 をイベントソースとして Amazon S3 をイベントルールとし、 CodePipeline をターゲットとし、アクセス権限ポリシーを適用します。

  1. テンプレートの Resources で、AWS::IAM::RoleAWS CloudFormation リソースを使用して、イベントにパイプラインの開始を許可する IAM ロールを設定します。このエントリによって、2 つのポリシーを使用するロールが作成されます。

    • 最初のポリシーでは、ロールを引き受けることを許可します。

    • 2 つめのポリシーでは、パイプラインを開始するアクセス権限が付与されます。

    この変更を行う理由 追加AWS::IAM::Roleリソースは有効にするAWS CloudFormationAmazon のアクセス許可を作成するには CloudWatch [Events (イベント)] 。このリソースは AWS CloudFormation スタックに追加されます。

    YAML
    AmazonCloudWatchEventRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Principal: Service: - events.amazonaws.com Action: sts:AssumeRole Path: / Policies: - PolicyName: cwe-pipeline-execution PolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Action: codepipeline:StartPipelineExecution Resource: !Join [ '', [ 'arn:aws:codepipeline:', !Ref 'AWS::Region', ':', !Ref 'AWS::AccountId', ':', !Ref AppPipeline ] ] ...
    JSON
    "AmazonCloudWatchEventRole": { "Type": "AWS::IAM::Role", "Properties": { "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "events.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }, "Path": "/", "Policies": [ { "PolicyName": "cwe-pipeline-execution", "PolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "codepipeline:StartPipelineExecution", "Resource": { "Fn::Join": [ "", [ "arn:aws:codepipeline:", { "Ref": "AWS::Region" }, ":", { "Ref": "AWS::AccountId" }, ":", { "Ref": "AppPipeline" } ] ] ...
  2. を使用するAWS::Events::Rule AWS CloudFormation追加するリソース CloudWatch イベントルール。このイベントパターンは、Amazon S3 ソースバケットでの CopyObjectPutObject、および CompleteMultipartUpload をモニタリングするイベントを作成します。さらに、パイプラインのターゲットも含めます。CopyObjectPutObject、または CompleteMultipartUpload が発生すると、このルールは、ターゲットパイプラインで StartPipelineExecution を呼び出します。

    この変更を行う理由 AWS::Events::Rule リソースを追加すると、AWS CloudFormation でイベントを作成できるようになります。このリソースは AWS CloudFormation スタックに追加されます。

    YAML
    AmazonCloudWatchEventRule: Type: AWS::Events::Rule Properties: EventPattern: source: - aws.s3 detail-type: - 'AWS API Call via CloudTrail' detail: eventSource: - s3.amazonaws.com eventName: - CopyObject - PutObject - CompleteMultipartUpload requestParameters: bucketName: - !Ref SourceBucket key: - !Ref SourceObjectKey Targets: - Arn: !Join [ '', [ 'arn:aws:codepipeline:', !Ref 'AWS::Region', ':', !Ref 'AWS::AccountId', ':', !Ref AppPipeline ] ] RoleArn: !GetAtt AmazonCloudWatchEventRole.Arn Id: codepipeline-AppPipeline ...
    JSON
    "AmazonCloudWatchEventRule": { "Type": "AWS::Events::Rule", "Properties": { "EventPattern": { "source": [ "aws.s3" ], "detail-type": [ "AWS API Call via CloudTrail" ], "detail": { "eventSource": [ "s3.amazonaws.com" ], "eventName": [ "CopyObject", "PutObject", "CompleteMultipartUpload" ], "requestParameters": { "bucketName": [ { "Ref": "SourceBucket" } ], "key": [ { "Ref": "SourceObjectKey" } ] } } }, "Targets": [ { "Arn": { "Fn::Join": [ "", [ "arn:aws:codepipeline:", { "Ref": "AWS::Region" }, ":", { "Ref": "AWS::AccountId" }, ":", { "Ref": "AppPipeline" } ] ] }, "RoleArn": { "Fn::GetAtt": [ "AmazonCloudWatchEventRole", "Arn" ] }, "Id": "codepipeline-AppPipeline" } ] } } }, ...
  3. このスニペットを最初のテンプレートに追加して、クロススタック機能を有効にします。

    YAML
    Outputs: SourceBucketARN: Description: "S3 bucket ARN that Cloudtrail will use" Value: !GetAtt SourceBucket.Arn Export: Name: SourceBucketARN
    JSON
    "Outputs" : { "SourceBucketARN" : { "Description" : "S3 bucket ARN that Cloudtrail will use", "Value" : { "Fn::GetAtt": ["SourceBucket", "Arn"] }, "Export" : { "Name" : "SourceBucketARN" } } ...
  4. 更新したテンプレートをローカルコンピュータに保存し、AWS CloudFormation コンソールを開きます。

  5. スタックを選択し、[既存スタックの変更セットの作成] を選択します。

  6. 更新されたテンプレートをアップロードし、AWS CloudFormation に示された変更を表示します。これらがスタックに加えられる変更です。新しいリソースがリストに表示されています。

  7. [Execute] (実行) を選択します。

パイプラインの PollForSourceChanges パラメータを編集するには

重要

このメソッドを使用してパイプラインを作成すると、PollForSourceChanges パラメータはデフォルトで true になります (ただし、明示的に false に設定した場合は除きます)。イベントベースの変更検出を追加する場合は、このパラメータを出力に追加する必要があります。ポーリングを無効にするには、このパラメータを false に設定します。そうしないと、1 つのソース変更に対してパイプラインが 2 回起動されます。詳細については、「PollForSourceChanges パラメータのデフォルト設定」を参照してください

  • テンプレートで、PollForSourceChangesfalse に変更します。パイプライン定義に PollForSourceChanges が含まれていなかった場合は、追加して false に設定します。

    この変更を行う理由 PollForSourceChanges パラメータを false に変更すると、定期的チェックがオフになるため、イベントベースの変更検出のみ使用することができます。

    YAML
    Name: Source Actions: - Name: SourceAction ActionTypeId: Category: Source Owner: AWS Version: 1 Provider: S3 OutputArtifacts: - Name: SourceOutput Configuration: S3Bucket: !Ref SourceBucket S3ObjectKey: !Ref SourceObjectKey PollForSourceChanges: false RunOrder: 1
    JSON
    { "Name": "SourceAction", "ActionTypeId": { "Category": "Source", "Owner": "AWS", "Version": 1, "Provider": "S3" }, "OutputArtifacts": [ { "Name": "SourceOutput" } ], "Configuration": { "S3Bucket": { "Ref": "SourceBucket" }, "S3ObjectKey": { "Ref": "SourceObjectKey" }, "PollForSourceChanges": false }, "RunOrder": 1 }

Amazon S3 パイプライン用に 2 番目のテンプレートを作成するには CloudTrail リソース

  • 個別のテンプレートの Resources で、AWS CloudFormation リソース AWS::S3::BucketAWS::S3::BucketPolicyAWS::CloudTrail::Trail を使用して、CloudTrail のシンプルなバケット定義と証跡を指定します。

    この変更を行う理由 アカウントあたり 5 証跡を現在の制限として、 CloudTrail 証跡は別々に作成および管理する必要があります。(「」を参照での制限AWS CloudTrail。) ただし、1 つの証跡に複数の Amazon S3 バケットを含めることができるため、いったん証跡を作成してから、必要に応じて他のパイプライン用に Amazon S3 バケットを追加できます。2 番目のサンプルテンプレートファイルに以下のコードを貼り付けます。

    YAML
    ################################################################################### # Prerequisites: # - S3 SourceBucket and SourceObjectKey must exist ################################################################################### Parameters: SourceObjectKey: Description: 'S3 source artifact' Type: String Default: SampleApp_Linux.zip Resources: AWSCloudTrailBucketPolicy: Type: AWS::S3::BucketPolicy Properties: Bucket: !Ref AWSCloudTrailBucket PolicyDocument: Version: 2012-10-17 Statement: - Sid: AWSCloudTrailAclCheck Effect: Allow Principal: Service: - cloudtrail.amazonaws.com Action: s3:GetBucketAcl Resource: !GetAtt AWSCloudTrailBucket.Arn - Sid: AWSCloudTrailWrite Effect: Allow Principal: Service: - cloudtrail.amazonaws.com Action: s3:PutObject Resource: !Join [ '', [ !GetAtt AWSCloudTrailBucket.Arn, '/AWSLogs/', !Ref 'AWS::AccountId', '/*' ] ] Condition: StringEquals: s3:x-amz-acl: bucket-owner-full-control AWSCloudTrailBucket: Type: AWS::S3::Bucket DeletionPolicy: Retain AwsCloudTrail: DependsOn: - AWSCloudTrailBucketPolicy Type: AWS::CloudTrail::Trail Properties: S3BucketName: !Ref AWSCloudTrailBucket EventSelectors: - DataResources: - Type: AWS::S3::Object Values: - !Join [ '', [ !ImportValue SourceBucketARN, '/', !Ref SourceObjectKey ] ] ReadWriteType: WriteOnly IncludeManagementEvents: false IncludeGlobalServiceEvents: true IsLogging: true IsMultiRegionTrail: true ...
    JSON
    { "Parameters": { "SourceObjectKey": { "Description": "S3 source artifact", "Type": "String", "Default": "SampleApp_Linux.zip" } }, "Resources": { "AWSCloudTrailBucket": { "Type": "AWS::S3::Bucket", "DeletionPolicy": "Retain" }, "AWSCloudTrailBucketPolicy": { "Type": "AWS::S3::BucketPolicy", "Properties": { "Bucket": { "Ref": "AWSCloudTrailBucket" }, "PolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Sid": "AWSCloudTrailAclCheck", "Effect": "Allow", "Principal": { "Service": [ "cloudtrail.amazonaws.com" ] }, "Action": "s3:GetBucketAcl", "Resource": { "Fn::GetAtt": [ "AWSCloudTrailBucket", "Arn" ] } }, { "Sid": "AWSCloudTrailWrite", "Effect": "Allow", "Principal": { "Service": [ "cloudtrail.amazonaws.com" ] }, "Action": "s3:PutObject", "Resource": { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "AWSCloudTrailBucket", "Arn" ] }, "/AWSLogs/", { "Ref": "AWS::AccountId" }, "/*" ] ] }, "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control" } } } ] } } }, "AwsCloudTrail": { "DependsOn": [ "AWSCloudTrailBucketPolicy" ], "Type": "AWS::CloudTrail::Trail", "Properties": { "S3BucketName": { "Ref": "AWSCloudTrailBucket" }, "EventSelectors": [ { "DataResources": [ { "Type": "AWS::S3::Object", "Values": [ { "Fn::Join": [ "", [ { "Fn::ImportValue": "SourceBucketARN" }, "/", { "Ref": "SourceObjectKey" } ] ] } ] } ], "ReadWriteType": "WriteOnly", "IncludeManagementEvents": false } ], "IncludeGlobalServiceEvents": true, "IsLogging": true, "IsMultiRegionTrail": true } } } } ...

AWS CloudFormation でこれらのリソースを作成すると、パイプラインは、リポジトリのファイルの作成時または更新時にトリガーされます。

注記

ここで手順は終わりではありません。パイプラインは作成されますが、Amazon S3 パイプライン用に 2 番目の AWS CloudFormation テンプレートを作成する必要があります。2 番目のテンプレートを作成しない場合、パイプラインに変更検出機能はありません。

YAML
Resources: SourceBucket: Type: AWS::S3::Bucket Properties: VersioningConfiguration: Status: Enabled CodePipelineArtifactStoreBucket: Type: AWS::S3::Bucket CodePipelineArtifactStoreBucketPolicy: Type: AWS::S3::BucketPolicy Properties: Bucket: !Ref CodePipelineArtifactStoreBucket PolicyDocument: Version: 2012-10-17 Statement: - Sid: DenyUnEncryptedObjectUploads Effect: Deny Principal: '*' Action: s3:PutObject Resource: !Join [ '', [ !GetAtt CodePipelineArtifactStoreBucket.Arn, '/*' ] ] Condition: StringNotEquals: s3:x-amz-server-side-encryption: aws:kms - Sid: DenyInsecureConnections Effect: Deny Principal: '*' Action: s3:* Resource: !Join [ '', [ !GetAtt CodePipelineArtifactStoreBucket.Arn, '/*' ] ] Condition: Bool: aws:SecureTransport: false CodePipelineServiceRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Principal: Service: - codepipeline.amazonaws.com Action: sts:AssumeRole Path: / Policies: - PolicyName: AWS-CodePipeline-Service-3 PolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Action: - codecommit:CancelUploadArchive - codecommit:GetBranch - codecommit:GetCommit - codecommit:GetUploadArchiveStatus - codecommit:UploadArchive Resource: 'resource_ARN' - Effect: Allow Action: - codedeploy:CreateDeployment - codedeploy:GetApplicationRevision - codedeploy:GetDeployment - codedeploy:GetDeploymentConfig - codedeploy:RegisterApplicationRevision Resource: 'resource_ARN' - Effect: Allow Action: - codebuild:BatchGetBuilds - codebuild:StartBuild Resource: 'resource_ARN' - Effect: Allow Action: - devicefarm:ListProjects - devicefarm:ListDevicePools - devicefarm:GetRun - devicefarm:GetUpload - devicefarm:CreateUpload - devicefarm:ScheduleRun Resource: 'resource_ARN' - Effect: Allow Action: - lambda:InvokeFunction - lambda:ListFunctions Resource: 'resource_ARN' - Effect: Allow Action: - iam:PassRole Resource: 'resource_ARN' - Effect: Allow Action: - elasticbeanstalk:* - ec2:* - elasticloadbalancing:* - autoscaling:* - cloudwatch:* - s3:* - sns:* - cloudformation:* - rds:* - sqs:* - ecs:* Resource: 'resource_ARN' AppPipeline: Type: AWS::CodePipeline::Pipeline Properties: Name: s3-events-pipeline RoleArn: !GetAtt CodePipelineServiceRole.Arn Stages: - Name: Source Actions: - Name: SourceAction ActionTypeId: Category: Source Owner: AWS Version: 1 Provider: S3 OutputArtifacts: - Name: SourceOutput Configuration: S3Bucket: !Ref SourceBucket S3ObjectKey: !Ref SourceObjectKey PollForSourceChanges: false RunOrder: 1 - Name: Beta Actions: - Name: BetaAction InputArtifacts: - Name: SourceOutput ActionTypeId: Category: Deploy Owner: AWS Version: 1 Provider: CodeDeploy Configuration: ApplicationName: !Ref ApplicationName DeploymentGroupName: !Ref BetaFleet RunOrder: 1 ArtifactStore: Type: S3 Location: !Ref CodePipelineArtifactStoreBucket AmazonCloudWatchEventRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Principal: Service: - events.amazonaws.com Action: sts:AssumeRole Path: / Policies: - PolicyName: cwe-pipeline-execution PolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Action: codepipeline:StartPipelineExecution Resource: !Join [ '', [ 'arn:aws:codepipeline:', !Ref 'AWS::Region', ':', !Ref 'AWS::AccountId', ':', !Ref AppPipeline ] ] AmazonCloudWatchEventRule: Type: AWS::Events::Rule Properties: EventPattern: source: - aws.s3 detail-type: - 'AWS API Call via CloudTrail' detail: eventSource: - s3.amazonaws.com eventName: - PutObject - CompleteMultipartUpload resources: ARN: - !Join [ '', [ !GetAtt SourceBucket.Arn, '/', !Ref SourceObjectKey ] ] Targets: - Arn: !Join [ '', [ 'arn:aws:codepipeline:', !Ref 'AWS::Region', ':', !Ref 'AWS::AccountId', ':', !Ref AppPipeline ] ] RoleArn: !GetAtt AmazonCloudWatchEventRole.Arn Id: codepipeline-AppPipeline Outputs: SourceBucketARN: Description: "S3 bucket ARN that Cloudtrail will use" Value: !GetAtt SourceBucket.Arn Export: Name: SourceBucketARN
JSON
"Resources": { "SourceBucket": { "Type": "AWS::S3::Bucket", "Properties": { "VersioningConfiguration": { "Status": "Enabled" } } }, "CodePipelineArtifactStoreBucket": { "Type": "AWS::S3::Bucket" }, "CodePipelineArtifactStoreBucketPolicy": { "Type": "AWS::S3::BucketPolicy", "Properties": { "Bucket": { "Ref": "CodePipelineArtifactStoreBucket" }, "PolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Sid": "DenyUnEncryptedObjectUploads", "Effect": "Deny", "Principal": "*", "Action": "s3:PutObject", "Resource": { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "CodePipelineArtifactStoreBucket", "Arn" ] }, "/*" ] ] }, "Condition": { "StringNotEquals": { "s3:x-amz-server-side-encryption": "aws:kms" } } }, { "Sid": "DenyInsecureConnections", "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "CodePipelineArtifactStoreBucket", "Arn" ] }, "/*" ] ] }, "Condition": { "Bool": { "aws:SecureTransport": false } } } ] } } }, "CodePipelineServiceRole": { "Type": "AWS::IAM::Role", "Properties": { "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "codepipeline.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }, "Path": "/", "Policies": [ { "PolicyName": "AWS-CodePipeline-Service-3", "PolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codecommit:CancelUploadArchive", "codecommit:GetBranch", "codecommit:GetCommit", "codecommit:GetUploadArchiveStatus", "codecommit:UploadArchive" ], "Resource": "resource_ARN" }, { "Effect": "Allow", "Action": [ "codedeploy:CreateDeployment", "codedeploy:GetApplicationRevision", "codedeploy:GetDeployment", "codedeploy:GetDeploymentConfig", "codedeploy:RegisterApplicationRevision" ], "Resource": "resource_ARN" }, { "Effect": "Allow", "Action": [ "codebuild:BatchGetBuilds", "codebuild:StartBuild" ], "Resource": "resource_ARN" }, { "Effect": "Allow", "Action": [ "devicefarm:ListProjects", "devicefarm:ListDevicePools", "devicefarm:GetRun", "devicefarm:GetUpload", "devicefarm:CreateUpload", "devicefarm:ScheduleRun" ], "Resource": "resource_ARN" }, { "Effect": "Allow", "Action": [ "lambda:InvokeFunction", "lambda:ListFunctions" ], "Resource": "resource_ARN" }, { "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": "resource_ARN" }, { "Effect": "Allow", "Action": [ "elasticbeanstalk:*", "ec2:*", "elasticloadbalancing:*", "autoscaling:*", "cloudwatch:*", "s3:*", "sns:*", "cloudformation:*", "rds:*", "sqs:*", "ecs:*" ], "Resource": "resource_ARN" } ] } } ] } }, "AppPipeline": { "Type": "AWS::CodePipeline::Pipeline", "Properties": { "Name": "s3-events-pipeline", "RoleArn": { "Fn::GetAtt": [ "CodePipelineServiceRole", "Arn" ] }, "Stages": [ { "Name": "Source", "Actions": [ { "Name": "SourceAction", "ActionTypeId": { "Category": "Source", "Owner": "AWS", "Version": 1, "Provider": "S3" }, "OutputArtifacts": [ { "Name": "SourceOutput" } ], "Configuration": { "S3Bucket": { "Ref": "SourceBucket" }, "S3ObjectKey": { "Ref": "SourceObjectKey" }, "PollForSourceChanges": false }, "RunOrder": 1 } ] }, { "Name": "Beta", "Actions": [ { "Name": "BetaAction", "InputArtifacts": [ { "Name": "SourceOutput" } ], "ActionTypeId": { "Category": "Deploy", "Owner": "AWS", "Version": 1, "Provider": "CodeDeploy" }, "Configuration": { "ApplicationName": { "Ref": "ApplicationName" }, "DeploymentGroupName": { "Ref": "BetaFleet" } }, "RunOrder": 1 } ] } ], "ArtifactStore": { "Type": "S3", "Location": { "Ref": "CodePipelineArtifactStoreBucket" } } } }, "AmazonCloudWatchEventRole": { "Type": "AWS::IAM::Role", "Properties": { "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "events.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }, "Path": "/", "Policies": [ { "PolicyName": "cwe-pipeline-execution", "PolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "codepipeline:StartPipelineExecution", "Resource": { "Fn::Join": [ "", [ "arn:aws:codepipeline:", { "Ref": "AWS::Region" }, ":", { "Ref": "AWS::AccountId" }, ":", { "Ref": "AppPipeline" } ] ] } } ] } } ] } }, "AmazonCloudWatchEventRule": { "Type": "AWS::Events::Rule", "Properties": { "EventPattern": { "source": [ "aws.s3" ], "detail-type": [ "AWS API Call via CloudTrail" ], "detail": { "eventSource": [ "s3.amazonaws.com" ], "eventName": [ "PutObject", "CompleteMultipartUpload" ], "resources": { "ARN": [ { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "SourceBucket", "Arn" ] }, "/", { "Ref": "SourceObjectKey" } ] ] } ] } } }, "Targets": [ { "Arn": { "Fn::Join": [ "", [ "arn:aws:codepipeline:", { "Ref": "AWS::Region" }, ":", { "Ref": "AWS::AccountId" }, ":", { "Ref": "AppPipeline" } ] ] }, "RoleArn": { "Fn::GetAtt": [ "AmazonCloudWatchEventRole", "Arn" ] }, "Id": "codepipeline-AppPipeline" } ] } } }, "Outputs" : { "SourceBucketARN" : { "Description" : "S3 bucket ARN that Cloudtrail will use", "Value" : { "Fn::GetAtt": ["SourceBucket", "Arn"] }, "Export" : { "Name" : "SourceBucketARN" } } } } ...