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