🐶

AWS RDS の Enhanced Monitoring の値を Datadog に送る

2022/07/20に公開

同種の記事は別途存在しているのですが、
https://dev.classmethod.jp/articles/datadog-enhanced-rds-integration/

こちらは5年ほど前の記事で、同種の解説記事の日本語版が存在せず迷子になりがちなのでメモ的に記事を書きます。

以下を前提として、記事については書いていきます。

  • AWS RDS の拡張モニタリングの設定が有効になっている。
    • CloudWatch Logs に拡張モニタリングのログが書き込まれている
  • Datadog を使用している

準備する内容

  • KMS の用意
  • Lambda Script の用意
    • Serverless Application Repository から function を追加
    • IAM Role の設定 (KMS を使えるように)
    • 環境変数の設定
    • トリガーの設定

手順については、Datadog の公式サイトや、Lambda Script の README にも記載されているのですが、補う内容を AWS Console の Screen Shot として貼っていきます。
https://docs.datadoghq.com/ja/integrations/amazon_rds/?tab=enhanced
https://github.com/DataDog/datadog-serverless-functions/tree/master/aws/rds_enhanced_monitoring

KMS の用意

Lambda Script にわたす環境変数を暗号化するために KMS を使用します。

KMS の使用ユーザーは、後述の Lambda Script に割り当てられる IAM Role だけを指定すれば Lambda は動作します。管理上必要なユーザーについては別途設定画面から設定を行います。

Lambda Script の用意

Serverless Application Repository から function を追加

以前は datadog-process-rds-metrics という名前で Blueprint が提供されていたようですが、こちらは deprecated 扱いになっているようです。 GitHub のリポジトリも read only になっています。

https://github.com/amazon-archives/serverless-app-examples/tree/master/python/datadog-process-rds-metrics

代わりに、 Datadog-RDS-Enhanced という名前のテンプレートを使用して、 Lambda Script を作成します。

作成時に、 KMSKeyId という値が求められるので、上記で作成済みの KMS の ARN をもとに値を入力します。
The id (final part of the key's ARN) of a KMS key used to encrypt and decrypt your Datadog API and App keys. と書いてあるように、ARN の最後のパートの文字列だけを入力する必要があります。

e.g.  arn:aws:kms:ap-northeast-1:1234567890:key/hogehogehoge... 
      -> hogehogehoge の部分だけを入力。

これが若干罠で、私は初手では間違えて ARN をまるごと入力してエラーになってしまいました。

IAM Role の設定

Lambda 関数が作成されると、自動的に Lambad Function に割り当てられる IAM Role も生成されます。
こちらの IAM Role を、KMS のキーユーザーに追加をし、Lambda から KMS が使用できるようにします。

環境変数の設定

環境変数に、 Datadog の API Key を設定します。
こちらはプレーンテキストで設定をすることもできるのですが推奨されてないので、KMS で暗号化した値を設定します。

ここでは DD_KMS_API_KEY というキーを設定します。
値のところに Datadog API Key を入力して「暗号化」ボタンをクリックすると、使用する KMS の Key を指定する画面になるため、そちらで上記で作成した KMS Key を指定します。そうすると Console 上で自動的に値が暗号化されて、保存されます。便利。

DD_KMS_API_KEY (KMS) を使う方法以外にも、Datadog API Key の渡し方は他にも何種類か存在しているようで、README などに詳しく記載がされています。

https://github.com/DataDog/datadog-serverless-functions/tree/master/aws/rds_enhanced_monitoring

a. Recommended: AWS KMS
Refer to the AWS KMS Creating Keys documentation for step by step instructions on creating a key.
Encrypt your API key using the AWS CLI. aws kms encrypt --key-id alias/<KMS key name> --plaintext '<dd_api_key>'
Store the CiphertextBlob as the DD_KMS_API_KEY environment variable in the next section.

b. AWS Secrets Manager
Create a plaintext secret in AWS Secrets Manager using your API key as the value
Store the ARN of the secret as the DD_API_KEY_SECRET_ARN environment variable

c. AWS SSM
Create a parameter in AWS SSM using your API key as the value
Store the Name of the parameter as the DD_API_KEY_SSM_NAME environment variable

d. Not Recommended: Plaintext
Set your API key in plaintext as the DD_API_KEY environment variable.
This flow is insecure and not recommended for production use cases.

トリガーの設定

Lambda の設定が終わったら、拡張モニタリングの値が保存されている CloudWatch Logs のグループと、上記で追加した Lambda Script をトリガー設定をして連携します。

CloudWatch Logs にはデフォルトでは RDSOsMetrics というグループで保存されていると思うのでそちらを指定し、トリガーを追加すれば、Datadog に RDS 拡張モニタリングの値が送信されるようになると思います。

Discussion