0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Datadog AWSインテグレーションを Terraform import する手順

Posted at

このドキュメントでは、既存のDatadog AWSインテグレーション設定をTerraformで管理するために、terraform import コマンドを使用する手順を詳細に解説します。

背景
Terraform importは、既にDatadog上で手動またはCloudFormationなどで設定済みのAWSインテグレーションを、Terraformの管理下に取り込む際に使用します。これにより、インフラ構成をコードとして管理し、変更履歴の追跡や自動化が可能になります。

前提条件

  • Terraform CLI のインストール: Terraform CLI がインストールされている必要があります。
  • Datadog Terraform Provider の設定: Terraform設定ファイル (.tf) に Datadog Provider の設定 (provider "datadog") が記述済みであること。APIキーとアプリケーションキーが環境変数または変数で設定されていること。
  • Datadog APIキーとアプリケーションキー: Datadog API にアクセスするための APIキーとアプリケーションキーが必要です。Organization Settings > API Keys / Application Keys で確認または生成してください。
  • AWSアカウントID: Terraform import 対象の AWS アカウントID を把握している必要があります。
  • Datadog インテグレーション IAMロール名: Datadog AWSインテグレーションで作成した IAMロールの名前 (DatadogIntegrationRole など) を把握している必要があります。
  • Datadog インテグレーション External ID: CloudFormation スタックの出力などから、Datadog AWSインテグレーションの External ID を把握している必要があります。

手順

  1. Terraform 設定ファイル (.tf) の準備:

    Terraform import を実行する前に、Terraform 設定ファイル (.tf) に datadog_integration_aws リソースブロックを 空で定義 しておきます。

    resource "datadog_integration_aws" "aws_integration" {
      # このリソースブロックは空で開始します (設定は import 後に記述します)。
    }
    
    • datadog_integration_aws: リソースタイプ
    • aws_integration: リソース名 (任意。terraform import コマンドで指定するアドレスと一致させる)
  2. 環境変数の設定:

    ターミナル (または PowerShell) で、Datadog APIキーとアプリケーションキーを環境変数として設定します。

    Linux/macOS の場合:

    export DATADOG_API_KEY="YOUR_DATADOG_API_KEY"  # ← 実際のAPIキーに置き換え
    export DATADOG_APP_KEY="YOUR_DATADOG_APP_KEY"  # ← 実際のアプリケーションキーに置き換え
    

    PowerShell の場合:

    $env:DATADOG_API_KEY = "YOUR_DATADOG_API_KEY" # ← 実際のAPIキーに置き換え
    $env:DATADOG_APP_KEY = "YOUR_DATADOG_APP_KEY" # ← 実際のアプリケーションキーに置き換え
    
    • YOUR_DATADOG_API_KEYYOUR_DATADOG_APP_KEY は、実際のDatadog APIキーとアプリケーションキーに置き換えてください。
  3. terraform import コマンドの実行:

    環境変数を設定したターミナル (または PowerShell) で、以下の terraform import コマンドを実行します。

    terraform import datadog_integration_aws.aws_integration <AWSアカウントID>:<IAMロール名>
    
    • datadog_integration_aws.aws_integration: Terraform設定ファイルで定義したリソースアドレス
    • <AWSアカウントID>: Terraform import 対象の AWS アカウントID に置き換えてください (例: 545009854777)
    • <IAMロール名>: Datadog インテグレーション IAMロール名 (DatadogIntegrationRole など) に置き換えてください。

    例:

    terraform import datadog_integration_aws.aws_integration 545009854777:DatadogIntegrationRole
    

    または、EXTERNAL_ID 環境変数を使用する方法 (Datadog公式ドキュメント推奨):

    export EXTERNAL_ID="YOUR_EXTERNAL_ID" # ← 実際の External ID に置き換え
    terraform import datadog_integration_aws.aws_integration <AWSアカウントID>:<IAMロール名>
    
    • YOUR_EXTERNAL_ID は、実際の External ID に置き換えてください。
  4. terraform plan の実行と設定の確認:

    terraform import コマンドが成功したら、terraform plan コマンドを実行し、インポートされた設定内容を確認します。

    terraform plan
    

    terraform plan の出力で、datadog_integration_aws.aws_integration リソースが Terraform state ファイルに追加されたことが示されます。

  5. Terraform コードに設定を記述:

    terraform plan の出力や、Datadog Web UI (Integrations > AWS > [対象アカウント] > Metric Collection など) の設定を確認し、integration.tf ファイルの datadog_integration_aws.aws_integration リソースブロックに、必要な属性 (account_id, role_name, metrics_collection_enabled, account_specific_namespace_rules など) を記述します。

    Datadog Terraform Provider のドキュメント ( https://registry.terraform.io/providers/DataDog/datadog/latest/docs/resources/integration_aws ) を参照し、適切な属性と値を設定してください。

    例:

    resource "datadog_integration_aws" "aws_integration" {
      account_id = "YOUR_AWS_ACCOUNT_ID" # 実際の AWS アカウントID に置き換え
      role_name  = "DatadogIntegrationRole" # 実際の IAMロール名 に置き換え
    
      metrics_collection_enabled = true
      excluded_regions         = ["ap-southeast-2", "ca-central-1"]
    
      account_specific_namespace_rules = {
        "AWS/ApiGateway" = true
        "AWS/EC2"        = true
        # ... 他のサービス ...
      }
    
      resource_collection_enabled = false
      cspm_resource_collection_enabled = false
    }
    
  6. terraform apply の実行:

    Terraform コードに設定を記述したら、再度 terraform plan を実行して変更内容を確認し、問題なければ terraform apply コマンドを実行して設定を適用します。

    terraform apply
    

トラブルシューティング

  • Error: resource address "datadog_integration_aws.aws_integration" does not exist in the configuration. エラー:
    • Terraform 設定ファイル (.tf) に datadog_integration_aws リソースブロックが定義されているか確認してください (手順 1)。
  • Error: error importing aws integration resource. Resource with id \...` does not exist` エラー:
    • terraform import コマンドで指定した AWSアカウントID または IAMロール名 が正しいか、Datadog Web UI と照らし合わせて確認してください。
    • Datadog APIキーとアプリケーションキーが正しいか、有効期限切れになっていないか確認してください。
    • Datadog API へのネットワーク接続に問題がないか確認してください (ファイアウォール、プロキシなど)。
  • Error: error updating AWS integration from /api/v1/integration/aws: 400 Bad Request: {"errors":["Additional properties are not allowed ... "]} エラー:
    • account_specific_namespace_rules で指定しているサービス名が、Datadog API が認識する正しい名前空間と一致しているか確認してください。
    • Datadog API の利用可能な名前空間リスト (https://api.datadoghq.com/api/v2/integration/aws/available_namespaces) を取得し、Terraform コードのサービス名と突き合わせて、スペルミスや大文字小文字の違いがないか確認してください。

注意事項

  • APIキーとアプリケーションキーの保護: APIキーとアプリケーションキーは機密情報です。Terraform Cloud の変数機能や、HashiCorp Vault などのシークレット管理ツールを使用して安全に管理することを推奨します。
  • Terraform State ファイルの管理: Terraform State ファイルはインフラの状態を記録する重要なファイルです。リモートのストレージ (S3など) で適切にバックアップ・管理し、ロック機構を導入することを推奨します。
  • external_id の手動設定: datadog_integration_aws リソースの external_id は、Terraform で自動生成されません。CloudFormation スタックの出力などから取得した値を、Terraform コードに手動で設定する必要があります。
  • import ブロックは Terraform v1.5 以降: import ブロックを使用する場合は、Terraform v1.5 以降が必要です。古いバージョンの Terraform を使用している場合は、terraform import コマンドを使用してください。

まとめ

この手順に従うことで、既存のDatadog AWSインテグレーション設定をTerraformに取り込み、コードとして管理を開始できます。Terraform を活用することで、Datadogの設定変更を安全かつ効率的に行うことが可能になります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?