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 番目のアカウント

  • (パート 4 の場合) awsccプロバイダーバージョン 1.98.0 以降。awscc_devopsagent_asset および awscc_devopsagent_triggerリソースがそのバージョンに追加されました。設定のバージョンを確認するには、 を実行しますterraform providers。

このガイドの内容

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

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

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

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

  • パート 4 (オプション) — スキル、カスタムエージェント、およびスケジュールされたトリガーをエージェントスペースに追加すると、エージェントはカスタムナレッジを持ち、スケジュールされたトリガーはそのカスタムエージェントを自動的に実行します。

作成されるリソース

パート 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) — 入力イベントをエコーバックするシンプルなサービス例。

パート 4: アセットとトリガー (オプション)

この設定では、次のリソースが作成されます。

  • スキル (rds-performance-investigation) — エージェントが必要に応じてロードするスキル。 asset_typeの で awscc_devopsagent_assetリソースを使用して作成されますskill。

  • カスタムエージェント (rds-firefighter) — awscc_devopsagent_assetasset_typeの リソースを使用して作成されたスキルがアタッチされた特定のワークフローにエージェントをスコープしますcustom_agent。

  • トリガー (TIME_BASED) — awscc_devopsagent_triggerリソースを使用して作成されたスケジュールでカスタムエージェントを実行します。

セットアップ

ステップ 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" }

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

パート 4 (オプション): スキル、カスタムエージェント、スケジュールされたトリガーを追加する

このセクションでは、パート 1 で作成したエージェントスペースに 3 つのリソースを追加します。必要に応じてエージェントがロードするスキルと、エージェントを特定のワークフローにスコープするカスタムエージェントを追加します。また、カスタムエージェントを自動的に実行するスケジュールされたトリガーを追加します。これらのリソースは、 awscc_devopsagent_assetおよび awscc_devopsagent_triggerリソースを使用します。

これらのリソースでは、 AWS アカウントに追加料金が発生する場合があります。完了したら、このガイドの最後にある「クリーンアップ」セクションに従ってください。

この例では、 skillおよび custom_agentアセットタイプを使用します。同じawscc_devopsagent_assetリソースは、memory_store、、 などのすべてのアセットタイプを作成しますagents_mdattachment。別のタイプを使用するには、 asset_type引数を変更し、タイプに必要なメタデータを指定します。アセットタイプの詳細なリスト、必要なメタデータ、プロパティリファレンスについては、「」を参照してくださいアセットの管理。

重要

続行する前にパート 1 を完了する必要があります。これらのリソースには、パート 1 デプロイのエージェントスペース ID が必要です。

ステップ 1: 設定を追加する

次の内容で、assets.tf という名前のファイルを作成します。時間ベースのトリガーのアクションは、カスタムエージェントをアセット ID で 形式で参照しますcustom:<assetId>。設定では、カスタムエージェントの asset_id 属性から自動的に接続されます。カスタムエージェントskillsのリストは名前ではなくアセット IDs も取得するため、スキルの asset_id 属性を参照します。これにより、Terraform に暗黙的な依存関係が与えられるため、スキルはアタッチするエージェントの前に作成されます。

引数metadataと action引数は文字列として渡される JSON ドキュメントであるため、この例では を使用しますjsonencode。

variable "agent_space_id" { type = string description = "The agent space ID from the Part 1 output" } # A skill the agent loads when relevant resource "awscc_devopsagent_asset" "example_skill" { agent_space_id = var.agent_space_id asset_type = "skill" metadata = jsonencode({ name = "rds-performance-investigation" description = "Investigation procedures for RDS performance issues." agent_types = ["GENERIC"] }) files = [{ path = "SKILL.md" content_text = <<-EOT # RDS Performance Investigation Use this skill when investigating database latency, connection errors, or query timeouts. EOT }] } # A custom agent with attached skills that a trigger can invoke resource "awscc_devopsagent_asset" "example_custom_agent" { agent_space_id = var.agent_space_id asset_type = "custom_agent" metadata = jsonencode({ name = "rds-firefighter" skills = [awscc_devopsagent_asset.example_skill.asset_id] }) files = [{ path = "AGENT.md" content_text = <<-EOT # RDS Firefighter Custom agent for RDS incidents. EOT }] } # A time-based trigger that runs the custom agent on a schedule resource "awscc_devopsagent_trigger" "daily" { agent_space_id = var.agent_space_id type = "TIME_BASED" condition = { schedule = { expression = "rate(1 day)" } } action = jsonencode({ actionType = "create:task" task = { agent = "custom:${awscc_devopsagent_asset.example_custom_agent.asset_id}" } }) status = "Active" } output "skill_asset_id" { description = "The skill asset ID" value = awscc_devopsagent_asset.example_skill.asset_id } output "custom_agent_asset_id" { description = "The custom agent asset ID" value = awscc_devopsagent_asset.example_custom_agent.asset_id } output "trigger_id" { description = "The trigger ID" value = awscc_devopsagent_trigger.daily.trigger_id }

これをサンプルリポジトリに追加する場合は、 agent_space_id変数を宣言する代わりに、エージェントスペースリソースを直接参照できます。

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

パート 1 出力agent_space_idの値を使用してterraform.tfvars、 でエージェントスペース ID を設定します。

agent_space_id = "<AGENT_SPACE_ID>"

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

terraform apply

アセットの agent_space_idおよび 引asset_type数は、トリガーの agent_space_id、type、condition、 action引数と同様に、作成専用です。いずれかを変更すると、リソースが置き換えられます。トリガーの status (Active または Inactive) を所定の位置に更新できます。 に設定するとInactive、トリガーを削除せずに一時停止できます。

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

アセットとトリガーが作成されたことを確認するには、次の AWS CLI コマンドを実行します。

aws devops-agent list-assets \ --agent-space-id <AGENT_SPACE_ID> \ --region <REGION> aws devops-agent list-triggers \ --agent-space-id <AGENT_SPACE_ID> \ --region <REGION>

既存の 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 プロバイダーが必要です。

  • パート 4 で使用する awscc_devopsagent_assetおよび awscc_devopsagent_triggerリソースには、awsccプロバイダーバージョン 1.98.0 以降が必要です。terraform providers を実行してバージョンを確認し、バージョン制約を引き上げたterraform init -upgrade後に を実行します。

クリーンアップ

パート 4 を完了したら、まずスキル、カスタムエージェント、トリガーを削除します。これらのリソースを別のスタックに配置する AWS CDK ガイドとは異なり、 assets.tfは同じ Terraform 設定の一部であるため、プレーンはエージェントスペースをそれらと一緒にterraform destroy削除します。変更を削除assets.tfして適用し、パート 4 リソースのみを削除します。

rm assets.tf terraform apply

ファイルを保持するには、代わりに 3 つのリソースをターゲットにします。

terraform destroy \ -target=awscc_devopsagent_trigger.daily \ -target=awscc_devopsagent_asset.example_custom_agent \ -target=awscc_devopsagent_asset.example_skill

これらのリソースのみを削除すると、エージェントスペースはそのまま残ります。他のユーザーと共有しているエージェントスペース、またはパート 1 で作成していないエージェントスペースにパート 4 を適用した場合は、これを行います。

次に、パート 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 パイプラインに統合することを検討してください。

その他のリソース