Upgrade to Pro — share decks privately, control downloads, hide ads and more …

CDKを使ったPagerDuty連携インフラのテンプレート化

shogo
February 26, 2025

 CDKを使ったPagerDuty連携インフラのテンプレート化

AWS CDKの勉強会の登壇資料です。
CloudFormationのテンプレート + クイック作成リンクにより手作業を削減して効率化した話を紹介しています。

イベント名 クラスメソッドのAWS CDK事情大公開スペシャル#3
日時 2025年2月21日(金) 19:00~
現地開催場所 クラスメソッド 日比谷オフィス

shogo

February 26, 2025
Tweet

Other Decks in Programming

Transcript

  1. 背景 - PagerDuty とは アラートの原因の例 → PagerDuty に通知されてインシデント作成される DB に不整合がある

    二重にある 依存している外部サービスで障害が発生 エラーレスポンスが返ってくる 8
  2. PagerDuty の導入 既存のアラート構成にPagerDuty 通知用のLambda を追加する Lambda からPagerDuty API を呼び出してアラートを連携 AWS

    ログ メトリクス フィルター SNS トピック SNS トピック PagerDuty API サーバーサイド CloudWatch Logs CloudWatch Alarm Amazon SNS AWS Lambda (PagerDuty 通知用) AWS Chatbot PagerDuty Slack サーバーサイドでエラーが発生 → CW Logs にエラーログを吐く → メトリクスフィルターに引っかかる → CW Alarms によりAmazon SNS が発火 → Lambda 関数が起動して、PagerDuty のAPI を呼び出す → PagerDuty でインシデント作成 12
  3. PagerDuty の導入 Lambda 追加作業 → 各プロジェクトごとに手動でCDK のソースコードを編集 ソースコードを見るためgithub の権限がいる 既存のコードを読む

    保守するプロジェクトが増えるたびに、手動での追加作業が発生 同じ内容のコードの追加作業を繰り返して飽きてくる PagerDuty API AWS Lambda (PagerDuty 通知用) PagerDuty 14
  4. 解決策 - クイック作成リンクとは クイック作成リンクとは、 CloudFormation のスタック作成ページに飛ぶことができるリンク 予めS3 に配置したCFN テンプレートを元にスタック作成ができる 1

    https://eu-central-1.console.aws.amazon.com/cloudformation/home? 2 region=[ リージョン]#/stacks/create/review 3 ?templateURL=[CFN テンプレートのS3 のオブジェクトURL] 4 &stackName=[ スタック名] 5 &param_[ パラメータ名]=[ パラメータ値] 18
  5. 実装 1. Lambda を追加するためのCDK プロジェクトを作成 CDK プロジェクトを新規に作成 コードの内容 Lambda 作成

    Lambda にCloudWatch からログ取得する権限を追加 SNS トピックにサブスクリプションを追加してLambda を呼び出す CFN テンプレートのパラメータを作成 Lambda のスクリプト 21
  6. 実装 いつもと違った点 今回は、既存のアラート構成がある環境にLambda を追加する 既存のリソースを参照する場合は、ARN を使って参照 → CFN テンプレートのパラメータとしてARN を受け取る

    // CFN テンプレートのパラメータを定義 const errorTopicArn = new cdk.CfnParameter(...); // ARN から既存のSNS トピックを参照 const errorTopic = cdk.aws_sns.Topic.fromTopicArn(...); // 既存のSNS トピックからLambda が起動するように errorTopic.addSubscription(...); 22
  7. 27