目的
CloudWatch Eventのついての自分向け備忘録
用語・概念の整理
- イベント
- AWS環境の状態変化
- AWSリソースは状態が変化した際にイベントを生成する
- リソースの変更だけでなく、Cronのように特定の時刻などを指定してイベントをトリガーすることもできる
- ルール
- イベント振り分けるためのルール
- 発生したイベントがルールに合致した場合はルールにしたがい、イベントをターゲットに振り分ける
- ターゲット
- ターゲットは振り分けられたイベントを処理する。
イベントパターン
イベントパターンがいわゆるルールの実態。
下図のようなイベントパターンの場合を考えてみます。
このようなイベントパターンの場合、
イベントパターンのプレビューに書いてあるように、
- イベントの発生元が
CodeBuild
- イベントの種類が
CodeBuildのステート変更
- ステートとしては変更後の状態が成功または失敗
の場合にのみ、ターゲットに対するイベントの振り分けを行います。
配列で記述されている場合は原則としてORで扱われます(そりゃそうだ)。
サンプルイベントは、イベントが通知される場合のメッセージの例です。
Lambdaをターゲットとして用いる場合はこのメッセージがそのままevent
に入ってきます。
def lambda_handler(event, context): # 個々のeventに上図の内容がdist形式で含まれる。
処理内容
どうやらサンプルイベントに含まれる属性はイベントパターンとして指定できる内容の模様です。
たとえば、イベントパターンとしてCodeBuildのhogeプロジェクトのみを指定したい場合は、以下のようにカスタムイベントパターンを指定します。
{
"source": [
"aws.codebuild"
],
"detail-type": [
"CodeBuild Build State Change"
],
"detail": {
"build-status": [
"SUCCEEDED",
"FAILED"
],
"project-name": [
"hoge"
]
}
}
detail
の下にproject-name
キーをおいては配列の中で、対象となるCodeBuildのプロジェクトとなるhogeプロジェクトを指定しています。
イベントのソースとして使用できるAWSサービス
サポートされている各サービスからの CloudWatch イベント イベントの例
ルールのターケットとして使用できるAWSサービス
ほとんどの場合はLambdaやSNS、SQSになりそうですが…
2019年8月末時点では以下のようなものがターゲットとして利用できるようです。
最新のリストは、Amazon CloudWatch Events とはにあるようです。
- Amazon EC2 インスタンス
- AWS Lambda 関数
- Amazon Kinesis Data Streams のストリーム
- Amazon Kinesis Data Firehose の配信ストリーム
- Amazon CloudWatch Logs のロググループ
- Amazon ECS タスク
- Systems Manager Run Command
- Systems Manager オートメーション
- AWS Batch ジョブ
- Step Functions ステートマシン
- CodePipeline のパイプライン
- CodeBuild プロジェクト
- Amazon Inspector の評価テンプレート
- Amazon SNS のトピック
- Amazon SQS キュー
- 組み込みターゲット: EC2 CreateSnapshot API callEC2 RebootInstances API call、EC2 StopInstances API call、および EC2 TerminateInstances API call。
- 別の AWS アカウントのデフォルトのイベントバス
まとめ
このように、CloudWatch Eventを活用することでさまざまなイベントを利用して後続処理へのつなぎとできます。