View a markdown version of this page

Terraform を使用した AWS DevOps エージェントの開始方法 - AWS DevOps エージェント

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Terraform を使用した AWS DevOps エージェントの開始方法

概要

このガイドでは、Terraform を使用して AWS DevOps エージェントリソースを作成およびデプロイする方法を示します。Terraform 設定は、エージェントスペース、IAM ロール、オペレーターアプリ、および AWS アカウントの関連付けの作成を自動化します。

Terraform アプローチは、必要なすべてのリソースをコードとしてのインフラストラクチャとして定義することで、 CLI オンボーディングガイドで説明されている手動ステップを自動化します。

AWS DevOps エージェントは、米国東部 (バージニア北部)、米国西部 (オレゴン)、アジアパシフィック (シドニー)、アジアパシフィック (東京)、欧州 (フランクフルト)、欧州 (アイルランド) の 6 つの AWS リージョンで利用できます。サポートされているリージョンの詳細については、「」を参照してくださいサポートされるリージョン

前提条件

作業を開始する前に、次の項目があることを確認します。

  • Terraform >= 1.0 がインストールされている

  • AWS CLI がインストールされ、適切な認証情報で設定されている

  • モニタリング (プライマリ) AWS アカウントの 1 つのアカウント

  • (オプション) クロス AWS アカウントモニタリングを設定する場合の 2 番目のアカウント

このガイドの内容

このガイドは 3 つのパートに分かれています。

  • パート 1 — オペレーターアプリと AWS 関連付けを使用してエージェントスペースをモニタリングアカウントにデプロイします。このパートを完了すると、エージェントはそのアカウントの問題をモニタリングできます。

  • パート 2 (オプション) — サービスアカウントのソース AWS 関連付けを追加し、クロスアカウント IAM ロールとエコー Lambda をそのアカウントにデプロイします。これにより、エージェントスペースはアカウント全体のリソースをモニタリングできます。

  • パート 3 (オプション) — サードパーティーサービス (Dynatrace、ServiceNow、Splunk、New Relic、GitLab、PagerDuty) を登録し、エージェントスペースに関連付けます。

作成されるリソース

パート 1: アカウントのモニタリング

  • IAM ロール (DevOpsAgentRole-AgentSpace-*) — アカウントをモニタリングするために DevOps エージェントサービスによって引き受けられます。Resource Explorer サービスにリンクされたロールの作成を許可する AIDevOpsAgentAccessPolicy管理ポリシーとインラインポリシーが含まれます。existing_agentspace_role_arn が設定されていない場合にのみ作成されます。

  • IAM ロール (DevOpsAgentRole-WebappAdmin-*) — エージェントオペレーションの AIDevOpsOperatorAppAccessPolicyマネージドポリシーを持つオペレーターアプリケーションロール。existing_operator_role_arn が設定されていない場合にのみ作成されます。

  • エージェントスペース (設定可能な名前) — awscc_devopsagent_agent_spaceリソースを使用して作成された中央エージェントスペース。オペレーターアプリ設定が含まれます。

  • 関連付け (AWS モニター) — awscc_devopsagent_associationリソースを使用して、モニタリングアカウントをエージェントスペースにリンクします。

  • 関連付け (AWS ソース) — (オプション) サービスアカウントをエージェントスペースにリンクして、クロスアカウントモニタリングを行います。

パート 2: サービスアカウント (オプション)

  • IAM ロール (DevOpsAgentRole-SecondaryAccount-TF) — 固定名を持つクロスアカウントロール。モニタリングアカウントのエージェントスペースによって信頼されます。Resource Explorer サービスにリンクされたロールの作成を許可する AIDevOpsAgentAccessPolicy管理ポリシーとインラインポリシーが含まれます。

  • Lambda 関数 (echo-service-tf) — 入力イベントをエコーバックするシンプルなサービス例。

セットアップ

ステップ 1: サンプルリポジトリのクローンを作成する

git clone https://github.com/aws-samples/sample-aws-devops-agent-terraform.git cd sample-aws-devops-agent-terraform

ステップ 2: 変数を設定する

サンプル変数ファイルをコピーし、環境に合わせてカスタマイズします。

cp terraform.tfvars.example terraform.tfvars

エージェントスペースの名前と説明terraform.tfvarsを使用して を編集します。

agent_space_name = "MyCompanyAgentSpace" agent_space_description = "DevOps Agent Space for monitoring production workloads"

パート 1: エージェントスペースをデプロイする

このセクションでは、モニタリングアカウントにエージェントスペース、IAM ロール、オペレーターアプリ、および AWS 関連付けを作成します。

提供されているデプロイスクリプトを使用して、セットアップを合理化します。

./deploy.sh

このスクリプトは自動的に次のようになります。

  • 前提条件を確認する (Terraform、 AWS CLI、認証情報)

  • 必要に応じて例terraform.tfvarsから を作成します。

  • Terraform の初期化、検証、計画、適用

または、手動制御を希望する場合:

terraform init terraform plan terraform apply

デプロイを確認するプロンプトが表示されyesたら、 と入力します。

ステップ 2: 出力を記録する

デプロイが完了すると、Terraform は出力を出力します。後で使用するために、これらの値を記録します。

Outputs: agent_space_id = "abc123" agent_space_arn = "arn:aws:aidevops:<REGION>:<MONITORING_ACCOUNT_ID>:agentspace/abc123" agent_space_name = "MyCompanyAgentSpace" devops_agentspace_role_arn = "arn:aws:iam::<MONITORING_ACCOUNT_ID>:role/DevOpsAgentRole-AgentSpace-a1b2c3d4" devops_operator_role_arn = "arn:aws:iam::<MONITORING_ACCOUNT_ID>:role/DevOpsAgentRole-WebappAdmin-a1b2c3d4" primary_account_id = "<MONITORING_ACCOUNT_ID>" primary_account_association_id = "assoc-xyz"

パート 2 を完了する予定がある場合は、agent_space_arn値を保存します。サービスアカウントリソースを設定するには、これが必要です。

ステップ 3: デプロイを検証する

デプロイ後の検証スクリプトを実行します。

./post-deploy.sh

または、CLI AWS を使用して、エージェントスペースが正常に作成されたことを確認します。

aws devops-agent get-agent-space \ --agent-space-id <AGENT_SPACE_ID> \ --region <REGION>

この時点で、エージェントスペースはオペレーターアプリが有効で、モニタリングアカウントが関連付けられている状態でデプロイされます。エージェントはこのアカウントの問題をモニタリングできます。

パート 2 (オプション): クロスアカウントモニタリングを追加する

このセクションでは、エージェントスペースが 2 番目の AWS アカウント (サービスアカウント) のリソースをモニタリングできるようにセットアップを拡張します。これには、次の 2 つのアクションが含まれます。

  1. サービスアカウントを指すソース AWS の関連付けを追加します。

  2. クロスアカウント IAM ロールとエコー Lambda 関数をサービスアカウントにデプロイします。

重要

続行する前にパート 1 を完了する必要があります。サービスアカウントリソースには、パート 1 デプロイ出力agent_space_arnの が必要です。

ステップ 1: サービスアカウント ID を設定する

terraform.tfvars、サービスアカウント ID を設定します。

service_account_id = "<YOUR_SERVICE_ACCOUNT_ID>"

ステップ 2: エージェントスペース ARN を設定する

パート 1 出力 (ステップ 2) からagent_space_arn値をコピーし、 で設定しますterraform.tfvars

agent_space_arn = "arn:aws:aidevops:<REGION>:<MONITORING_ACCOUNT_ID>:agentspace/<SPACE_ID>"

サービスアカウントリソースは、この値を使用してセカンダリアカウントロールの信頼ポリシーの範囲を設定します。これらのリソースは、この値が設定されている場合にのみ作成されます。

ステップ 3: 「aws.service」プロバイダーを設定する

main.tf、サービスアカウントの認証情報を使用してaws.serviceプロバイダーエイリアスを設定します。名前付きプロファイルまたは継承ロールを使用できます。

プロファイルの使用:

provider "aws" { alias = "service" region = var.aws_region profile = "your-service-account-profile" }

または、継承ロールを使用します。

provider "aws" { alias = "service" region = var.aws_region assume_role { role_arn = "arn:aws:iam::<SERVICE_ACCOUNT_ID>:role/OrganizationAccountAccessRole" } }

ステップ 4: デプロイする

更新された設定を適用します。

terraform apply

これにより、サービスアカウントに次のリソースが作成されます。

  • モニタリングアカウントのエージェントスペースを信頼する IAM ロール (DevOpsAgentRole-SecondaryAccount-TF)

  • サンプルサービスとしてのエコー Lambda 関数 (echo-service-tf)

また、サービスアカウントをリンクするソース AWS 関連付けをモニタリングアカウントに作成します。

ステップ 5: デプロイを検証する

エコーサービスをテストして、Lambda 関数が正常にデプロイされたことを確認します。

aws lambda invoke \ --function-name echo-service-tf \ --payload '{"test": "hello world"}' \ --profile <your-service-account-profile> \ --region <REGION> \ response.json cat response.json

パート 3 (オプション): サードパーティー統合を登録する

このセクションでは、外部サービス (Dynatrace、ServiceNow、Splunk、New Relic、GitLab、PagerDuty) をエージェントスペースに登録します。これらの統合により、 AWS DevOps Agent は調査中にテレメトリ、インシデントデータ、ソースコントロール情報にアクセスできます。

別の IntegrationsStack フェーズとエージェントスペース ID の手動ワイヤリングを必要とする AWS CDK サンプルとは異なり、これらのリソースはエージェントスペースを直接参照し、パート 1 terraform applyと同じ にデプロイできます。

サポートされている統合

サービス サービスタイプ 認証
Dynatrace dynatrace OAuth クライアントの認証情報
ServiceNow servicenow OAuth クライアントの認証情報
Splunk mcpserversplunk ベアラートークン
New Relic mcpservernewrelic API キー
GitLab gitlab アクセストークン
PagerDuty pagerduty OAuth クライアントの認証情報
注記

Datadog は Terraform 設定に含まれていません。Datadog を接続するには、「」で説明されているようにDataDog の接続、インタラクティブなユーザー OAuth 認可 (ブラウザのログインと同意) が必要です。Terraform はこれを自動化できません。コンソールの Capability Providers ページから Datadog を手動で登録します。

ステップ 1: 統合認証情報を設定する

integrations ブロックを に追加しterraform.tfvars、必要なサービスのみを入力します。次の例は、Dynatrace 統合を示しています。

integrations = { dynatrace = { account_urn = "<DYNATRACE_ACCOUNT_URN>" client_id = "<DYNATRACE_CLIENT_ID>" client_name = "<DYNATRACE_CLIENT_NAME>" client_secret = "<DYNATRACE_CLIENT_SECRET>" env_id = "<DYNATRACE_ENVIRONMENT_ID>" resources = ["<DYNATRACE_RESOURCE_1>"] } }

各統合の完全な形状については、サンプルリポジトリterraform.tfvars.exampleの「」を参照してください。

ServiceNow 要件: 常に短いインスタンス名にinstance_id明示的に設定します (例: "ven04972" 完全な ではなくinstance_url)。instance_id を省略すると、関連付けは にフォールバックされinstance_url、DevOps エージェント API は で拒否します400 GeneralServiceException: instanceId '<url>' does not match the registered ServiceNow instance

セキュリティ: integrations変数は とマークされるためsensitive、その値は計画から編集され、出力が適用されます。実際の認証情報を にコミットしないでくださいterraform.tfvars。本番稼働用の場合、プレーンテキストではなく AWS Secrets Manager または AWS Systems Manager パラメータストアからのソースシークレット (dataソースの使用など)。

ステップ 2: デプロイする

以下のとおり設定を適用します。

terraform apply

これにより、有効な統合ごとにサービス登録と関連付けが作成されます。

ステップ 3: 出力を確認する

デプロイが完了すると、統合出力は有効な各サービスをその登録済み IDs。

integration_service_ids = { "dynatrace" = "service-abc123" } integration_association_ids = { "dynatrace" = "assoc-xyz789" }

各サービスの認証情報の設定の詳細については、以下を参照してください。

既存の IAM ロールの使用 (オプション)

デフォルトでは、Terraform 設定はエージェントスペースとオペレーターアプリの新しい IAM ロールを作成します。必要なポリシーを持つ IAM ロールがすでにある場合は、ロールの作成をスキップし、代わりに既存のロール ARNs を指定できます。

要件

既存のロールは、次の要件を満たしている必要があります。

エージェントスペースロール

  • 信頼ポリシーによりaidevops.amazonaws.com、 は でロールを引き受けることができます。 sts:AssumeRole

  • AIDevOpsAgentAccessPolicy 管理ポリシーがアタッチされている

  • (オプション) Resource Explorer サービスにリンクされたロールの作成を許可するインラインポリシーがあります

オペレーターアプリロール

  • 信頼ポリシーによりaidevops.amazonaws.com、 は sts:AssumeRoleおよび を使用してロールを引き受けることができます。 sts:TagSession

  • AIDevOpsOperatorAppAccessPolicy 管理ポリシーがアタッチされている

設定

terraform.tfvars、1 つまたは両方のロール ARNs を設定します。

existing_agentspace_role_arn = "arn:aws:iam::ACCOUNT_ID:role/YourAgentSpaceRole" existing_operator_role_arn = "arn:aws:iam::ACCOUNT_ID:role/YourOperatorRole"

これらの値を設定すると、 の対応するロールリソースiam.tfはスキップされます。このアプローチは完全に下位互換性があります。空の値 (デフォルト) を持つ既存の設定は、現在のロール作成動作を保持します。

トラブルシューティング

IAM 伝達の遅延

  • 設定には、IAM ロールの作成からエージェントスペースの作成time_sleepまでの 30 秒が含まれます。DevOps エージェントサービスは、エージェントスペースの作成中にオペレーターロールの信頼ポリシーを検証します。IAM が完全に伝播されていない場合、これは失敗する可能性があります。それでも信頼ポリシーエラーが表示される場合は、1 分待ってterraform applyからもう一度実行してください。IAM ロールはすでに存在し、適用は中断した場所を選択します。

ServiceNow instanceId does not match エラー

  • service_now 統合ブロックで、完全な ではなく、短いインスタンス名 (例: "ven04972") をinstance_id明示的に設定しますinstance_url。上記のパート 3 の注意事項を参照してください。

Dynatrace の関連付け status: invalid

  • terraform apply成功しても、結果の関連付けレポート status = "invalid" ( aws devops-agent get-associationまたは コンソールを使用して表示) が表示された場合は、Dynatrace が OAuth クライアント認証情報を拒否したことを示します。Terraform client_id設定の問題ではなく、Dynatrace アカウントaccount_urnに対して client_secret、、および を再確認します。

アクセス許可エラー

  • AWS 認証情報にロールとポリシーを作成するために必要な IAM アクセス許可があることを確認します。

  • 信頼ポリシーの条件がアカウント ID と一致していることを確認します。

クロスアカウントデプロイが失敗する

  • aws.service プロバイダーは、サービスアカウントの認証情報で設定する必要があります。名前付きプロファイルまたは継承ロールブロックを使用します。

  • agent_space_arn 値がパート 1 出力の ARN と一致することを確認します。

Terraform リソースタイプが見つかりません

  • awscc プロバイダーのバージョンが ~> 1.0以降であることを確認します。awscc_devopsagent_agent_space および awscc_devopsagent_associationリソースには AWS Cloud Control プロバイダーが必要です。

クリーンアップ

すべてのリソースを削除するには、パート 2 をデプロイした場合は逆の順序で破棄します。

./cleanup.sh

または、手動で以下を実行します。

terraform destroy

警告: これにより、エージェントスペースと関連するすべてのデータが完全に削除されます。続行する前に、重要な情報をバックアップしていることを確認してください。

セキュリティに関する考慮事項

  • Terraform 設定は、aidevops.amazonaws.comサービスプリンシパルのみがロールを引き受けることを許可する信頼ポリシーを持つ IAM ロールを作成します。

  • 信頼ポリシーには、特定の AWS アカウントとエージェントスペース ARN へのアクセスを制限する条件が含まれます。

  • すべてのポリシーは最小特権の原則に従います。組織のセキュリティ要件に基づいて IAM ポリシーを確認してカスタマイズします。

  • クロスアカウントロール (DevOpsAgentRole-SecondaryAccount-TF) は固定名を使用し、特定のエージェントスペース ARN に限定されます。

次の手順

Terraform を使用して AWS DevOps エージェントをデプロイした後:

  1. DevOps エージェント機能の全範囲については、「DevOps AWS DevOps エージェントユーザーガイド」を参照してください。

  2. 自動インフラストラクチャ管理のために、Terraform デプロイを CI/CD パイプラインに統合することを検討してください。

その他のリソース