タダです.
業務で不定期ではあるけれど定型作業の依頼が非エンジニアから飛んでくる時があり,最初はすぐに済ませるため手作業で行っていたタスクを仕組み化しようと思い,AWS Chatbot を入れているので Chatbot と Lambda を使って作業を省力化したのでこの記事にまとめます.
作業の省力化のモチベーション
この取り組みのモチベーションとしては大きく2点あります.1つ目は定型作業が仕組み化できてないことです.もう1つは非エンジニアから依頼があったときにエンジニアに依頼するより非エンジニア側の作業で完結できるようにした方が効率的と考えたことです.
仕組みの検討
仕組みをどのようにしようかと考えたときにSlack でコミュニケーションをとっているため Slack で完結するようなものにしたいと思って Chatbot を使っていこうと考えました.Chatbot から Lambda を呼び出すことができるのでこの仕組みをつかっていきます.
Chatbot から Lambda を呼び出すための設定
Chatbot から Lambda を呼び出すための設定として①Chatbot の IAM ロール設定②Lambda のコードを準備します.
①Chatbot の IAM ロール設定
Chatbot の IAM ロールで Lambda を呼び出すための権限を足します.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "lambda:invokeAsync", "lambda:invokeFunction" ], "Resource": [ "*" ] } ] }
②Lambda のコード
Lambda は CloudFront のキャッシュを無効化する処理をさせるための関数です.Slack から CloudFront の DistributionId
が渡ってくるので event
のパラメーターとしてとってます.
import json import boto3 import logging import time logger = logging.getLogger() logger.setLevel(logging.INFO) def lambda_handler(event, context): cf = boto3.client('cloudfront') distribution_id = event['distribution_id'] logger.info('Creating invalidation') res = cf.create_invalidation( DistributionId=distribution_id, InvalidationBatch={ 'Paths': { 'Quantity': 1, 'Items': ['/*'], }, 'CallerReference': str(time.time()) } ) invalidation_id = res['Invalidation']['Id'] logger.info('InvalidationId is %s', invalidation_id) logger.info('Execution complete') return "Complete."
以上で準備が完了です.
Slack から Lambda を発火させる
aws
のボットを対象のチャンネルに招待して@aws invoke Lambda名 --payload {“distribution_id”: “DistributionId”}
を実行します.すると,Would you like me to do so?
とでるのでYes
を押せば Lambda が発火します.StatusCode
もPayload
の部分も処理が完了していることを確認できました.CloudFront の画面でもログに出ている InvalidationId
でキャッシュ無効化処理が完了していることも確認できたので完了です.
Slack の実行画面
Lambda の実行ログ
START RequestId: aef1bac9-a44b-4a8c-b07c-14554732243a Version: $LATEST [INFO] 2021-06-14T03:23:52.584Z aef1bac9-a44b-4a8c-b07c-14554732243a Found credentials in environment variables. [INFO] 2021-06-14T03:23:53.323Z aef1bac9-a44b-4a8c-b07c-14554732243a Creating invalidation [INFO] 2021-06-14T03:23:54.304Z aef1bac9-a44b-4a8c-b07c-14554732243a InvalidationId is I1CA2NN7EAW1TR(CloudFront の InvalidationId) [INFO] 2021-06-14T03:23:54.322Z aef1bac9-a44b-4a8c-b07c-14554732243a Function complete END RequestId: aef1bac9-a44b-4a8c-b07c-14554732243a
CloudFront の Invalidations 画面
まとめ
Chatbot から Lambda を呼び出す処理を実装するためにやったことを整理しました.Slack でコミュニケーションをしている場合にオペレーション省力化の1つとしてこう言った手法が取れることをしれてよかったです.同じような課題を持っている方の参考になれば嬉しいです!