AWSのALBのログをDatadogに送信するために、Terraformで「Datadog Forwarder Lambda function」を設定していました。途中、思わぬ箇所で詰まって時間を溶かしてしまったので、ハマったポイントを紹介します。
背景
ALBのログをDatadogに送信するために、Datadogの公式ドキュメントを見ながら、Terraformの設定をしていました。
以下の手順に沿って進めていました。
To start collecting logs from your AWS services:
- Set up the Datadog Forwarder Lambda function in your AWS account.
- Enable logging for your AWS service (most AWS services can log to a S3 bucket or CloudWatch Log Group).
- Set up the triggers that cause the Forwarder Lambda to execute when there are new logs to be forwarded. There are two ways to configure the triggers.
参考:https://docs.datadoghq.com/ja/logs/guide/send-aws-services-logs-with-the-datadog-lambda-function
手順1の「Datadog Forwarder Lambda function」の設定が上手くいかず、詰まって時間を溶かしてしまったので、ハマったポイントを紹介します。
同じような困り事を抱えた人の助けになれば幸いです。
事象
以下のドキュメント参考に、Datadog Forwarder Lambda functionをTerraformで構築していたところ、Datadog API Keyを設定しているのにも関わらず、Lambdaが「The API key is not valid.」のエラーを吐いて、失敗してしまいました。
参考:https://docs.datadoghq.com/ja/serverless/forwarder/#terraform
イメージ図は以下の通り。
Lambdaのエラー
[ERROR] Exception: The API key is not valid.
Traceback (most recent call last):
File "/var/lang/lib/python3.8/imp.py", line 234, in load_module
return load_source(name, filename, file)
File "/var/lang/lib/python3.8/imp.py", line 171, in load_source
module = _load(spec)
File "<frozen importlib._bootstrap>", line 702, in _load
File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 843, in exec_module
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "/opt/python/lambda_function.py", line 67, in <module>
raise Exception("The API key is not valid.")
ドキュメント通りに以下のように、ForwarderのLambdaを構築していました。
resource "aws_cloudformation_stack" "datadog_forwarder" {
name = "datadog-forwarder"
capabilities = ["CAPABILITY_IAM", "CAPABILITY_NAMED_IAM", "CAPABILITY_AUTO_EXPAND"]
parameters = {
DdApiKey = "this_value_is_not_used"
DdApiKeySecretArn = "REPLACE ME WITH THE SECRETS ARN"
FunctionName = "datadog-forwarder"
}
template_url = "https://datadog-cloudformation-template.s3.amazonaws.com/aws/forwarder/latest.yaml"
}
原因
DatadogのAPI Keyを発行しているリージョンと、メトリクスとログが送信されるDatadogサイトが異なることが原因でした。
デフォルト値ではなく、「DdSite」でリージョンを指定すると、「The API key is not valid.」のエラーは解消しました。
コードは以下の通り。
resource "aws_cloudformation_stack" "datadog_forwarder" {
name = "datadog-forwarder"
capabilities = ["CAPABILITY_IAM", "CAPABILITY_NAMED_IAM", "CAPABILITY_AUTO_EXPAND"]
parameters = {
DdApiKey = "this_value_is_not_used"
DdApiKeySecretArn = "REPLACE ME WITH THE SECRETS ARN"
FunctionName = "datadog-forwarder"
DdSite = "us5.datadoghq.com"
}
template_url = "https://datadog-cloudformation-template.s3.amazonaws.com/aws/forwarder/latest.yaml"
}
API Keyが正しく設定されていないのだろうと思い、色々調査をしてしまい、時間がかかってしまいました。
同じような事象で困っている人は、今一度「DdSite」の設定をご確認ください。
トライアルでDatadogを使っている人は要注意かもしれないです。
以上です。