こんにちは、ちゃりおです。
LambdaのBlueprintの「cloudwatch-alarm-to-slack-python」をCDKでデプロイします。

このBlueprintは、SlackのチャンネルごとにLambdaを作成する必要があります。
毎回手動でLambdaを作るのも面倒だし、フィルターをコード化して管理したいためCDKで作成します。
Contents
完成形
以下を書き換えたあとに、cdkでデプロイします。
- SlackCahnnelID
- SlackWebhook
- Cloudwatchロググループ名
- フィルターパターン
$ cdk deploy
コードについての解説
今回使用したコードについて解説します。
Lamabdaの変更したところ
シンプルにしたかったため、KMSを使わずWebhookURLは平文のまま環境変数に設定しました。
# HOOK_URL = "https://" + boto3.client('kms').decrypt(
# CiphertextBlob=b64decode(ENCRYPTED_HOOK_URL),
# EncryptionContext={'LambdaFunctionName': os.environ['AWS_LAMBDA_FUNCTION_NAME']}
# )['Plaintext'].decode('utf-8')
# 今回はKMSを使用しない
HOOK_URL = os.environ['slackHookUrl']
他は、Blueprintの内容をコピペです。
CDK
CDKについてです。
lib/cdk-cwlogs-to-slack-stack.ts
const fn = new lambda.Function(this, "lambda-function", {
runtime: lambda.Runtime.PYTHON_3_8,
code: lambda.Code.fromAsset('lambda'),
handler: 'index.lambda_handler',
environment: {
"slackHookUrl": slackHookUrl,
"slackChannel": slackChannel
}
})
Lambdaの関数を作成しています。
コードは、lambdaフォルダ配下にあるためfromAssetで指定して取得しています。
ローカルから上げる際は、zip圧縮したりする必要があります。
CDKではファイルをおいておくだけで、よしなにやってくて楽です。
new logs.SubscriptionFilter(this, "subscription", {
logGroup: logGroup,
destination: new logsDestinations.LambdaDestination(fn),
filterPattern: filterPattern
})
最後にサブスクリプションフィルターの設定です。
こちらの設定は、CloudwatchLogs側に行う設定です。
こちらのフィルターを通って、Lambdaにログが送られます。
まとめ
CDKでコード化したため、複数作るときに楽そうです。
記事中では使っていませんが、Lambda Layerを使うと複数関数で同じコードを書かなくてよいので良さそうです。
Blueprintの内容をDocker化して、runするときに環境変数渡すのもいいかもしれません。

AWSの勉強を始めるならSAAを取得してみるのがおすすめな理由こんにちは、ちゃりおです。
「AWS使えるようになりたけど、何から始めればよいかわからない」
という方向けの記事です。
AWSソリュ...

CloudWatch Logs Insights でApacheのアクセスログを使ってアクセス数の集計をするこんにちは、ちゃりおです。
Cloudwatch Logs Insights便利ですね。
Apacheのアクセスログを見て、アクセス数...

CDKの始め方 ワークショップではまらないためにこんにちは、ちゃりおです。
先日、社内向けに「CDKの始め方」をテーマに勉強会を行いました。
本記事では、内容をブログ向けにまとめまし...