はじめに
こんにちは、クラウド事業部の清水です。
プロダクト開発の中でCloudTrailのイベントをSlackに通知する仕組みを作りました。
今回はイベントは「AWSアカウント作成通知」受け取り先は「Slack」をベースにしてますが
トリガーを置き換えることで、汎用的に使えると思ったので記事に残させていただきます
目次
どんなひとに読んで欲しい
- CloudTrailイベント通知を受け取りたい人
- Webhooksの設定に困っている人
関連記事
※プロダクト紹介記事
techblog.ap-com.co.jp
※EventBrdigeの設定
techblog.ap-com.co.jp
※プロダクト構築手順の1例
techblog.ap-com.co.jp
AWSアカウント作成通知ツール: 環境構築手順
前提条件
以下の前提を満たす必要があります。
- AWSアカウントを所有している
- AWS Organizationを作成している
- Slackを利用している
環境構成図
環境構築手順
0. 環境構築準備
- AWSマネジメントコンソールにログインしてください。
- 画面左下の
CloudShell
を選択し、AWS Cloud Shellを起動してください。 - AWS Cloud Shell画面右上の
Actions
を選択し、Upload files
を選択してください。 - slack-account-notification-create.zip を選択し、ファイルをアップロードしてください。
- アップロード完了後、以下のコマンドを実行し、Zipファイルを解凍してください。
$ unzip slack-account-notification-create.zip
1. Slackの設定
Basic Information
画面が表示されたら、画面左メニューIncoming Webhooks
を選択してください。
Activate Incoming Webhooks
画面が表示されたら、off
をクリックしてください。
off
がon
に切り替わり下に表示が追加されます。Add New Webhook to Workspace
をクリックしてください。
権限リクエスト
画面が表示されたら、通知先のチャンネルを選択し、許可する
をクリックしてください。
Activate Incoming Webhooks
画面が表示されたら、最下部にWebhook URL
にあるCopy
をクリックしてURLをメモしておいてください。
2. Lambda関数の作成
AWS Cloud Shell環境にアクセスし、以下のコマンドを実行してください。
- 手順に記載している各種テンプレートやソースは以下アンケートにお答え頂けるとダウンロードできる仕様となります。
よろしかったらお試しください。
# 作業ディレクトリに移動 $ cd <解凍したフォルダ名> # lambdaの編集(項番1でコピーしたURLを入力してください) $ WEB_HOOK="コピーしたURL" # 入力したURLが表示されることを確認してください $ echo $WEB_HOOK # 取得したURLに置換します $ sed -ie "s#Edit_Web_Hook_Url#$WEB_HOOK#" source/slack-account-notification-create-excute-handler.py # 置換されていることを確認します $ grep $WEB_HOOK source/slack-account-notification-create-excute-handler.py url = "<置換したURL>" $ # 一時的に使用するAmazon S3バケットを作成します $ BUCKET_NAME_1=`date "+%Y%m%d-%H%M%S"` $ aws s3api create-bucket --region us-east-1 --bucket ${BUCKET_NAME_1} # 1つ目のLambda関数を作成します $ STACK_NAME_1=account-notification-create-request-lambda-01 $ aws cloudformation package --region us-east-1 --s3-bucket ${BUCKET_NAME_1} \ --template-file template/slack-account-notification-create-excute-handler.yaml \ --output-template-file template/slack-account-notification-create-excute-handler-packaged.yaml $ aws cloudformation deploy --region us-east-1 --stack-name ${STACK_NAME_1} \ --template-file template/slack-account-notification-create-excute-handler-packaged.yaml \ --capabilities CAPABILITY_IAM # 次の工程で利用するため、以下のコマンドを実行し、Lambda関数のARNをシェル変数に設定してください。 $ Lambda_ARN=$(aws lambda get-function --region us-east-1\ --function-name slack-account-notification-create-excute-handler \ --query "Configuration.FunctionArn" \ --output text) $ echo $Lambda_ARN
3. EventBrigeルールの作成
# EventBrigeルールを作成します。出力されるARNをコピーしてください $ aws events put-rule --region us-east-1 --name "slack-notification-account-create-event" --state ENABLED --event-pattern file://slack-notification-account-create-event.json # EventBrigeルールとSNSトピックを関連付けます。 $ aws events put-targets --region us-east-1 --rule "slack-notification-account-create-event" --targets '[{"Id":"1","Arn":"'"$Lambda_ARN"'"}]' # Lambda側からもターゲット登録します。 $ aws lambda add-permission --region us-east-1 --function-name $Lambda_ARN --statement-id event-enable --action 'lambda:InvokeFunction' --principal events.amazonaws.com --source-arn <EventBrigeルールのARNを入力してください>
5. 動作確認
- slackのチャンネルに作成が完了したアカウントの情報が通知される事を確認してください。
おわりに
Webhooksアイデア次第では色々できそうですね!
今後も通知の手段として考えてみようと思いました!
お知らせ
APCはAWS Advanced Tier Services(アドバンストティアサービスパートナー)認定を受けております。
その中で私達クラウド事業部はAWSなどのクラウド技術を活用したSI/SESのご支援をしております。
www.ap-com.co.jp
https://www.ap-com.co.jp/service/utilize-aws/
また、一緒に働いていただける仲間も募集中です!
今年もまだまだ組織規模拡大中なので、ご興味持っていただけましたらぜひお声がけください。