こんにちは
今日は、EC2 インスタンスの起動に失敗したらメールが届くようにすることができないか試してみたいと思います。
例えば、インスタンスの起動を aws cli から実行します。存在しないインスタンスIDなどを指定すると簡単に起動に失敗したエラーを出すことができると思います。
aws ec2 start-instances --instance-ids i-000000232a600000
(インスタンスIDは適当です)
こんな感じで実行するとCloudTrailのログに以下のように表示されます。
さらに詳細を表示すると、こんな感じに表示されています。今回の場合は、デタラメのインスタンスIDを指定したため、「Client.InvalidInstanceID.Malformed」と表示されています。これでテストしようと思います。
このようにCloudWatchに表示されるエラーをメールなどで通知できるといいのですが、CloudTrailではそれができないようです。ログなどをチェックしてある条件にマッチしたら、メールをするというようなことを実現するためには、CloudWatchという機能を使用しないといけないようです。
CloudTrailの証跡の作成
証跡の作成
CloudTrailコンソールから、「証跡」を選択して、「証跡の作成」ボタンをクリックします。この「証跡の作成」をしておかないと、特定のイベントが発生した時にメールを送るというような動作を行うことができないようですので注意してください。ちなみに設定はできてしまって、メールが来ないという感じになります。。。ややこしい。
「証跡の作成」をクリックすると、証跡の設定画面が表示されます。証跡名に任意の名前を指定します。保存先はS3です。保存先のS3バケットを新規に作成したいため「新しいS3バケットを作成します」を選択して、フォルダ名称はデフォルトのままにしました。「ログファイルのSSE-KMS暗号化」のチェックは外しました。最初は、「Auditなんだから当然暗号化するでしょ!」とか思って暗号化したのですが、有償だったのでやめました。。。
SNSの設定
S3バケットにファイルを書き込んだ時にメッセージを送信する設定をします。この設定するとS3バケットに保存したというような通知がきます。今回の手順では、ここで作成したSNSの設定をS3への保存時だけではなく、後ほど説明する、EventBridgeのイベント発生時のメッセージの送信先としても使います。
「SNSによる通知の配信」のチェックをして、「新しいSNSトピックの作成」から「新規」を選択します。SNSトピックはデフォルトのままにしました。※ここでは、SNSのトピックしか作りませんので、SNSトピックにE-MAILで通知するように設定する必要があります。後ほど説明します。
CloudWatch Logsの設定
確認と作成
設定が終わるとこのような表示になります。設定する項目がものすごく多いですよね。。。しかもまだ途中。。。。
SNSのサブスクリプションの設定
EventBridgeの設定
まだまだ続きます。先程までの設定で、やっとCloudWatchへLogの保存ができるようになりましたが、S3へ書きましたよというイベントは来ますが、EC2起動失敗というようなイベントの通知は来ません。めんどくさ。
こちらの手順では、先程CloudTrailの証跡を設定した時に作成したSNSの設定を使用しますが、別のものを利用したい方は、SNSコンソールから作成しておいてください。
{"source":["aws.ec2"],"detail-type":["AWS API Call via CloudTrail"],"detail":{"eventSource":["ec2.amazonaws.com"],"eventName":["StartInstances"],"errorCode":["Client.InvalidInstanceID.Malformed"]}}
aws % aws ec2 start-instances --instance-ids i-000000232a6000000
実行すると、SNSでサブスクリプションに指定したメールアドレスに以下のようなメールがとd来ます。イベントをそのまま送信してくる感じです。よーくよく見ると、指定されたエラーコードが含まれているのがわかると思います。
メールが届くことは届きましたが、とてもわかりにくいですね。そのうちもうちょっとわかりやすく表示できるように頑張って見たいと思います。
0 件のコメント:
コメントを投稿