技術(tech)

【ALBのログをDatadogへ送信】API Keyを正しく設定しているのに「The API key is not valid」になってしまう

AWSのALBのログをDatadogに送信するために、Terraformで「Datadog Forwarder Lambda function」を設定していました。途中、思わぬ箇所で詰まって時間を溶かしてしまったので、ハマったポイントを紹介します。

背景

ALBのログをDatadogに送信するために、Datadogの公式ドキュメントを見ながら、Terraformの設定をしていました。

以下の手順に沿って進めていました。

To start collecting logs from your AWS services:

  1. Set up the Datadog Forwarder Lambda function in your AWS account.
  2. Enable logging for your AWS service (most AWS services can log to a S3 bucket or CloudWatch Log Group).
  3. 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を使っている人は要注意かもしれないです。

以上です。