Datadog AWSインテグレーションを Terraform import する手順
このドキュメントでは、既存の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 を把握している必要があります。
手順
-
Terraform 設定ファイル (
.tf
) の準備:Terraform import を実行する前に、Terraform 設定ファイル (
.tf
) にdatadog_integration_aws
リソースブロックを 空で定義 しておきます。resource "datadog_integration_aws" "aws_integration" { # このリソースブロックは空で開始します (設定は import 後に記述します)。 }
-
datadog_integration_aws
: リソースタイプ -
aws_integration
: リソース名 (任意。terraform import
コマンドで指定するアドレスと一致させる)
-
-
環境変数の設定:
ターミナル (または 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_KEY
とYOUR_DATADOG_APP_KEY
は、実際のDatadog APIキーとアプリケーションキーに置き換えてください。
-
-
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 に置き換えてください。
-
-
terraform plan
の実行と設定の確認:terraform import
コマンドが成功したら、terraform plan
コマンドを実行し、インポートされた設定内容を確認します。terraform plan
terraform plan
の出力で、datadog_integration_aws.aws_integration
リソースが Terraform state ファイルに追加されたことが示されます。 -
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 }
-
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)。
- Terraform 設定ファイル (
-
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の設定変更を安全かつ効率的に行うことが可能になります。
Discussion