AWS

【小ネタ】AWS CodePipeline通知をインプットトランスフォーマーを使用しカスタマイズしてみた

概要

こんにちは、ディーネットの牛山です。

CodePipelineから通知は、標準の状態であると、見づらいのでEventBridgeのインプットトランスフォーマーを使用し、見やすい状態に変換してお知らせしたので小ネタとして記録します。

本記事では、EventBridge設定周辺を解説しますのでご了承下さい。

前置き

本題に入る前に、AWS構成図を準備しましたのでご覧ください。

EventBridgeルール作成

CodePipeline状態変更にはいくつかありますが、今回は、[CodePipeline パイプライン実行の状態変更]を検知して、インプットトランスフォーマーで変換する設定をします。

※参考:CodePipeline イベントのモニタリング

ステップ1 ルールの詳細を定義

ステップ2 イベントパターンを構築

作成のメソッドセクションは、[カスタムパターン (JSON エディタ)]を選択し、イベントパターンセクションに以下内容で設定します。

CodePipeline実行の状態変更で、[codepipeline_test_20230108]のPipelineかつ開始または失敗イベントを検知する内容となります。

{
    "source": [
        "aws.codepipeline"
    ],
    "detail-type": [
        "CodePipeline Pipeline Execution State Change"
    ],
    "detail": {
        "state": [
            "STARTED",
            "FAILED"
        ],
        "pipeline": [
            "codepipeline_test_20230108"
        ]
    }
}

ステップ3 ターゲットを選択

ターゲットタイプを[SNSトピック]を選択し、通知させたいSNSトピックを選択します。

[追加設定]セクションより、ターゲット入力を設定項目で[入力トランスフォーマー]を選択し、[入力トランスフォーマーを設定]をクリックします。

[入力トランスフォーマーを設定]タイアログ画面でそれぞれ下記の通り設定し、[確認]をクリックします。

サンプルイベント - オプション

サンプルイベント:[CodePipeline Pipeline Execution State Change]

ターゲット入力トランスフォーマー

  • 入力パス
{
    "pipeline": "$.detail.pipeline",
    "state": "$.detail.state",
    "execution-id": "$.detail.execution-id",
    "region": "$.region"
}
  • テンプレート
"CodePipeline(<pipeline>) は <state> しました。"
"CodePipelineの詳細な実行結果につきましては、下記リンク先からご確認ください。"
"https://<region>.console.aws.amazon.com/codesuite/codepipeline/pipelines/<pipeline>/executions/<execution-id>/timeline?region=<region>"

ステップ4 オプション

タグ設定が必要であれば適宜いれます、必要でなければ[次へ]をクリックします。

ステップ5 レビューと作成

設定した内容に問題ないことを確認し、[ルールの作成]をクリックします。

動作テスト

CodePipelineを実行し、Amazon SNSから以下内容のメールが届けば問題ありません。

"CodePipeline(codepipeline_test_20230108) は FAILED しました。"
"CodePipelineの詳細な実行結果につきましては、下記リンク先からご確認ください。"
"https://ap-northeast-1.console.aws.amazon.com/codesuite/codepipeline/pipelines/codepipeline_test_20230108/executions/be04d33d-f868-45f3-b6a8-0e372f7c43cd/timeline?region=ap-northeast-1"

--
If you wish to stop receiving notifications from this topic, please click or visit the link below to unsubscribe:
https://sns.ap-northeast-1.amazonaws.com/unsubscribe.html?SubscriptionArn=arn:aws:sns:ap-northeast-1:{AWSアカウントID}:codepipeline_test_sns_20230108:8ef0717b-b68b-48a1-979f-c0685f305869&Endpoint={メールアドレス}

Please do not reply directly to this email. If you have any questions or comments regarding this email, please contact us at https://aws.amazon.com/support

トラブルシューティング

Amazon SNSからメールが届かない事象が発生した場合、EventBridgeのモニタリングセクションを確認します。

「Invocations」および「FailedInvocations」に記録がある場合、EventBridgeルール通知はターゲットを呼び出そうとしましたが、呼び出しに失敗している可能性があります。

※参考:Amazon SNSトピックがEventBridge通知を受信しないのはなぜですか?
※参考:Amazon SNS 暗号化の有効化の注意点
※参考:キーの管理

Amazon SNS対象トピック、[暗号化]タブで暗号化が設定済かつAWS マネージド型キー aws/sns を使用している場合、カスタマーマネージドの AWS KMS キーを使用する必要があります。

以下内容で、Key Management Service (KMS)からカスタマー管理型のキーで作成します。

その後、対象のAmazon SNSトピックを編集し、作成した、カスタマー管理型のキーを使用するように変更します。

{AWSアカウントID} は意図的にマスクしていますので各自読み替えて下さい。

{
    "Id": "key-consolepolicy-3",
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Enable IAM User Permissions",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::{AWSアカウントID}:root"
            },
            "Action": "kms:*",
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "events.amazonaws.com"
            },
            "Action": [
                "kms:GenerateDataKey*",
                "kms:Decrypt"
            ],
            "Resource": "*"
        }
    ]
}

まとめ

いかがでしたでしょうか、標準の通知は見づらいですが、インプットトランスフォーマーを使用することで見やすく分かりやすい通知内容になったことがわかるかと思います。

次回、AWS CodeDeployのデプロイ通知内容をカスタマイズする内容の記事を投稿します。

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA