このドキュメントでは、既存の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 planterraform 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の設定変更を安全かつ効率的に行うことが可能になります。





コメント