ちょっと話題の記事

【開発者必見】Codeシリーズに最適化された通知サービスNotificationsがリリースされました!

Codeシリーズに特化した通知サービスとして新しくNotificationsサービスがリリースされました!
2019.11.11

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

DevOpsやCI/CDに必須なサービスとしてすっかりおなじみになったCodeシリーズですが、今般、そのCodeシリーズに特化した通知サービスがリリースされました。

Codeシリーズはアプリケーション開発〜運用のライフサイクル全般に関わるものが多く、それらを使っている中でリポジトリに対するプルリクエストの連絡、ビルド結果やパイプラインの実行結果、デプロイ結果などを通知するシチュエーションは非常に多くあります。従来、通知にはCloudWatch Eventsの利用が必須でしたが、今回Notificationsサービスとしてリリースされることで、Codeシリーズの中だけでの設定が可能となっています。

この記事では、Notificationsサービスの機能紹介とともに、従来のCloudWatch Eventsの運用との違いも合わせて記載しているので、Codeシリーズ好きなかたやAWSでアプリケーション開発をしているかたは是非ご覧いただくことをオススメします。

Codeシリーズにええ感じ通知サービスきたか…!!

  ( ゚д゚) ガタッ
  /   ヾ
__L| / ̄ ̄ ̄/_
  \/   /

新Notifications(通知ルール)の概要

AWSのいわゆるCodeシリーズに特化した通知ルールサービスで、AWS CodeCommit、AWS CodeBuild、AWS CodeDeploy、AWS CodePipelineなどのSNSやAWS Chatbotなどへの通知を一括管理できます。

この通知ルール自体は無料で利用でき、この通知ルールから呼び出されるAmazon SNSAWS Chatbotに対してのみ課金されるとのこと。

従来のCloudWatch Eventsを使った方法との違いは、記事の後半で説明します。

新Notifications(通知ルール)の概要

今回リリースされたNotificationsは、Developer Tools配下にあるサービスということで、いわゆるひとつの開発系ツールである以下のCodeシリーズに特化した通知サービスです。

  • AWS CodeBuild
  • AWS CodeCommit
  • AWS CodeDeploy
  • AWS CodePipeline
  • AWS CodeStar

開発者は、ソースコードリポジトリやビルドプロジェクトやデプロイツールやCI/CDパイプラインの様々な通知を簡単に設定することができ、承認のための通知やエラーメッセージを統一的に管理できます。

ドキュメント一式が新規公開

今回のリリースに伴い、新たに以下のドキュメントカテゴリーが新規追加されています。

What Is the Developer Tools Console? - Developer Tools Console

「あれ、こんなドキュメントもともとあったっけ?」と思ったんですが、Document History - Developer Tools Consoleを参照すると、2019年11月5日にリリースと記載があり、今回の通知サービスのリリースと同時に公開されたものとわかります。

この中のWhat Are Notifications? - Developer Tools Consoleから、今回リリースされたNotificationsについての詳細が記載されています。

Webコンソールだと、Codeシリーズを選択したときに表示されるこの「開発者用ツール」が対応しているようです。

CodeCommitからの通知を設定してみる

実際の設定方法はどうなるか、試しにCodeCommitからの通知を設定してみます。

SNSトピックの作成

最初に今回設定する通知サービスで使うSNSトピックを追加します。今回は新規でDeveloperNotificationsTopicという名前でトピックを作っておきます。

一点、トピックのアクセスポリシーについて、デフォルトだとトピックの所有者のみがトピックへの発行が可能となっていますが、ここは「全員」を選択し、Notificationsサービスからトピック発行ができるようにしておきましょう。

トピックに設定するポリシーには具体的には、Serviceにcodestar-notifications.amazonaws.comの追加が必要です。CodeStar系のサービスなんですね。ポリシーの詳細な設定方法は、Configure Amazon SNS Topics for Notificationsを参考にしてみてください。

既存のSNSトピックを使うときの注意点

Notificationsのターゲットには既存のSNSトピックも使えますが、既存のものはCodeCommitの通知には使えないなど制限があるようなので、新規でSNSトピックを作成することをオススメします。

It has not been used for sending notifications for CodeCommit before November 5, 2019.
引用:Configure Amazon SNS Topics for Notifications - Developer Tools Console

CodeCommitからの通知設定

手順は、Create a Notification Rule for a Repositoryに記載されています。

CodeCommitで、作成済みの適当なリポジトリを選択します。リポジトリにファイルが有れば、上部に「通知」に関するドロップダウンが表示されています。

また、左側メニューに並んでいる「設定」クリックからの、「通知」タブからも通知作成画面に遷移できます。

設定自体は特に難しいものはなく、通知名、通知に含める内容、トリガーイベント、ターゲットになるSNSトピックを選択して設定します。ターゲットは複数設定可能。

通知一覧に、先程作成した通知が表示されていればOKです。

実際に通知を確認

通知のテストをします。とりあえずWebコンソールでfeature-notification-testブランチを作成してみたところ、以下のJSONが通知されてきました。

{
	"account": "629895769338",
	"detailType": "CodeCommit Repository State Change",
	"region": "ap-northeast-1",
	"source": "aws.codecommit",
	"time": "2019-11-10T07:58:13Z",
	"notificationRuleArn": "arn:aws:codestar-notifications:ap-northeast-1:629895769338:notificationrule/1633bc86-5911-42b5-a919-f51792511d35",
	"detail": {
		"referenceFullName": "refs/heads/feature-notification-test",
		"repositoryId": "efcc56f3-e072-4366-bcfb-01909e030545",
		"referenceType": "branch",
		"commitId": "d1dc42514fe14a069db6557426a339f433ae3915",
		"callerUserArn": "arn:aws:sts::629895769338:assumed-role/cm-hamada.koji/1573371954495722000",
		"event": "referenceUpdated",
		"repositoryName": "proxy",
		"oldCommitId": "147c11b41dd3021fc27b74d927daa49c95517106",
		"referenceName": "feature-notification-test"
	},
	"resources": [
		"arn:aws:codecommit:ap-northeast-1:629895769338:proxy"
	],
	"additionalAttributes": {}
}

また、プルリクエストを作成したときの通知も参考までにはっておきます。こちらでは、プルリクエストのタイトルと共に、マージ元、マージ先のブランチ名、マージの有無などの詳細情報を知ることができます。

{
	"account": "629895769338",
	"detailType": "CodeCommit Pull Request State Change",
	"region": "ap-northeast-1",
	"source": "aws.codecommit",
	"time": "2019-11-10T08:03:17Z",
	"notificationRuleArn": "arn:aws:codestar-notifications:ap-northeast-1:629895769338:notificationrule/1633bc86-5911-42b5-a919-f51792511d35",
	"detail": {
		"sourceReference": "refs/heads/feature-notification-test",
		"lastModifiedDate": "Sun Nov 10 08:03:05 UTC 2019",
		"author": "AROAJBAZUR7WF5N7MZUAS:cm-hamada.koji",
		"isMerged": "False",
		"pullRequestStatus": "Open",
		"notificationBody": "A pull request event occurred in the following AWS CodeCommit repository: proxy. arn:aws:sts::629895769338:assumed-role/cm-hamada.koji/cm-hamada.koji made the following PullRequest 2. The pull request was created with the following information: Pull Request ID as 2 and title as さらに修正した分です。. For more information, go to the AWS CodeCommit console https://ap-northeast-1.console.aws.amazon.com/codesuite/codecommit/repositories/proxy/pull-requests/2?region=ap-northeast-1",
		"destinationReference": "refs/heads/master",
		"callerUserArn": "arn:aws:sts::629895769338:assumed-role/cm-hamada.koji/cm-hamada.koji",
		"creationDate": "Sun Nov 10 08:03:05 UTC 2019",
		"pullRequestId": "2",
		"title": "さらに修正した分です。",
		"revisionId": "53878bb564848da194cd6466578ebd3bf15ab74eaa1f666a5d6d5c9293473c62",
		"repositoryNames": [
			"proxy"
		],
		"destinationCommit": "147c11b41dd3021fc27b74d927daa49c95517106",
		"event": "pullRequestCreated",
		"sourceCommit": "d1dc42514fe14a069db6557426a339f433ae3915"
	},
	"resources": [
		"arn:aws:codecommit:ap-northeast-1:629895769338:proxy"
	],
	"additionalAttributes": {}
}

SNSからの通知が届かない場合の対処方法

以下を参考にしてみてください。だいたいポリシー周辺の設定が原因だと思います。

取得できるイベントの一覧

今回の新通知システムで利用できるCodeシリーズのイベント一覧です。

CodeCommit

Events for Notification Rules on Repositories

Category Events Event IDs
Comments On commits
On pull requests
codecommit-repository-comments-on-commits
codecommit-repository-comments-on-pull-requests
Pull request Created
Source updated
Status changed
Merged
codecommit-repository-pull-request-created
codecommit-repository-pull-request-source-updated
codecommit-repository-pull-request-status-changed
codecommit-repository-pull-request-merged
Branches and tags Created
Deleted
Updated
codecommit-repository-branches-and-tags-created
codecommit-repository-branches-and-tags-deleted
codecommit-repository-branches-and-tags-updated

CodeBuild

Events for Notification Rules on Build Projects

Category Events Event IDs
Build state Failed
Succeeded
In-progress
Stopped
codebuild-project-build-state-failed
codebuild-project-build-state-succeeded
codebuild-project-build-state-in-progress
codebuild-project-build-state-stopped
Build phase Failure
Success
codebuild-project-build-phase-failure
codebuild-project-build-phase-success

CodeDeploy

Events for Notification Rules on Deployment Applications

Category Events Event IDs
Deployment Failed
Succeeded
Started
codedeploy-application-deployment-failed
codedeploy-application-deployment-succeeded
codedeploy-application-deployment-started

CodePipeline

Events for Notification Rules on Pipelines

Category Events Event IDs
Action execution Succeeded
Failed
Canceled
Started
codepipeline-pipeline-action-execution-succeeded
codepipeline-pipeline-action-execution-failed
codepipeline-pipeline-action-execution-canceled
codepipeline-pipeline-action-execution-started
Stage execution Started
Succeeded
Resumed
Canceled
Failed
codepipeline-pipeline-stage-execution-started
codepipeline-pipeline-stage-execution-succeeded
codepipeline-pipeline-stage-execution-resumed
codepipeline-pipeline-stage-execution-canceled
codepipeline-pipeline-stage-execution-failed
Pipeline execution Failed
Canceled
Started
Resumed
Succeeded
Superseded
codepipeline-pipeline-pipeline-execution-failed
codepipeline-pipeline-pipeline-execution-canceled
codepipeline-pipeline-pipeline-execution-started
codepipeline-pipeline-pipeline-execution-resumed
codepipeline-pipeline-pipeline-execution-succeeded
codepipeline-pipeline-pipeline-execution-superseded
Manual approval Failed
Needed
Succeeded
codepipeline-pipeline-manual-approval-failed
codepipeline-pipeline-manual-approval-needed
codepipeline-pipeline-manual-approval-succeeded

新機能のNotificationsがCloudWatch Eventsと違う点

このアップデートを見たときに最初に自分も考えました。

ここまでブログ書いて新機能のNotifications一通り動かしてみて、感じた点まとめてみます。

AWS Chatbotと連携可能

一番大きく違う点が、NotiricationsはAWS Chatbotと連携できます。AWS Chatbotは2019年11月6日現在、まだベータ版ですが利用できます。

AWS Chatbotを利用すると、簡単にAmazon ChimeもしくはSlackにNotificationsの内容を連携できます。従来はSlackに通知内容などを連携する場合、SNSからLambdaを呼び出してそこからSlackに通知することが必須でしたが、そのあたりが全部不要になります。

すでにドキュメントも提供されているので、試してみたい方は是非どうぞ。一般提供が待ち遠しい。

NotificationsとAWS Chatbotとの連携方法はこちら。

CloudWatch Eventsよりイベントパターンが豊富

例えば、CodePipelineについて、CloudWatch Eventsで定義されているイベントタイプは以下の3種類です。

  • CodePipeline Pipeline Execution State Change
  • CodePipeline Stage Execution State Change
  • CodePipeline Action Execution State Change

対して、今回追加された新機能のNotificationsでは、CodePipelineのイベントタイプにManual approvalが追加されていて、承認周辺のイベントも取得できるようになっています。

もちろんCloudWatch EventsでもCloudTrailを取得元にすることで全API呼び出しを取得することができましたが設定が複雑で使いづらかったです。今回、Notificationsとしてまとめられたことで、通知イベントが拡充され全体的に設定が簡素化されています。

CloudWatch Eventsを作る必要がない

これは当たり前ですが、Notificationsは各Codeシリーズに通知対象とその通知先のターゲットを直接指定するため、CloudWatch Eventsの定義が不要です。

CloudWatch Eventsの料金が不要

Notifications自体は無料です。対してCloudWatch Eventsには、イベント100万件あたり1.00USDかかります。まぁCodeシリーズで使う時にこの課金が問題になることはあまり無いと思いますが、Notificationsが無料で使えるのは大きなメリットですね。

設定が簡単

CloudWatch Eventsで特定リソースの通知を設定する場合、イベントパターンのJSONの中のresourcesに、そのリソースのarnを指定する必要があります。複数リソースを対象とする場合、ここを併記したりなどそれなりに設定がめんどくさいです。

対して、Notificationsでは、最初に通知を設定する対象のリソースを選択し、そのリソースに対して必要な通知を指定するので設定が直感的です。

専用の管理コマンドが用意されている

今回、この機能のために専用のcodestar-notificationsAWS CLIコマンドが新規追加されています。

イベントタイプや通知ルールの一覧の出力や、通知ルールの一括更新、通知送信の一時停止など一通りのオプションが用意されているので、Codeシリーズの通知管理という面では、こちらが便利ですね。

文字列のカスタマイズができない

CloudWatch Eventsには、通知先のターゲットに対して文字列を編集するためのインプットトランスフォーマーという機能があります(参考:[新機能] Amazon CloudWatch EventsのInput Transformerを試してみた | Developers.IO)。

これを使えば、通知内容をJSON垂れ流しではなく、任意のメッセージに変更することが可能です。対して、Notificationsにはこの機能は今の所見当たりません。

代わりかどうかはわかりませんが、Notificationsには、通知の記載内容を2つの種類から選択できます。

  • フル
    • 「リソースまたは通知機能によって提供されるイベントに関する補足情報が含まれます。」
  • ベーシック
    • 「リソースイベントで提供される情報のみが含まれます」

通知先のセキュリティポリシーに応じて、表示内容をどちらにするかを選択する必要があります(上の実行例で示したJSONはフルのものです)。このあたりの考え方も、公式ドキュメントに記載されているので、合わせてご確認ください。

Codeシリーズに特化した通知サービスでアプリ開発〜運用をもっと便利に

もともと、CloudWatch EventsやCloudTrailでも実現できていた内容が、Codeシリーズに特化した形で新機能としてリリースされたのは正直意外でした。設定内容は非常にわかりやすく、従来のCodeシリーズに馴染んでいるので、CloudWatch Eventsの設定がめんどくさいなぁと思っていた人にも手軽に運用できると思います。

Codeシリーズは、その名の通りAWSにおけるアプリケーション開発や運用のベースとなるサービスであり、CI/CDやDevOpsの文脈でその利用状況を通知で一括管理したいというニーズは昔からありました、そこが、わかりやすいUIで提供されたのは大きな進化じゃないでしょうか。

また、AWS ChimeやAWS Chatbotが組み込まれている点も楽しみなところです。まだ、AWS Chatbotはβ版が提供されているのみですがはれて一般提供されたら、改めて動作検証してみようと思います。

それでは、今日はこのへんで。濱田(@hamako9999)でした。