

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

# Terraform を使用した AWS DevOps エージェントの開始方法
<a name="getting-started-with-aws-devops-agent-getting-started-with-aws-devops-agent-using-terraform"></a>

## 概要:
<a name="overview"></a>

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

Terraform アプローチは、必要なすべてのリソースをコードとしてのインフラストラクチャとして定義することで、 [CLI オンボーディングガイド](https://docs.aws.amazon.com/devopsagent/latest/userguide/getting-started-with-aws-devops-agent-cli-onboarding-guide.html)で説明されている手動ステップを自動化します。

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

## 前提条件
<a name="prerequisites"></a>

作業を開始する前に、次の項目があることを確認します。
+ Terraform >= 1.0 がインストールされている
+ AWS CLI がインストールされ、適切な認証情報で設定されている
+ モニタリング (プライマリ) AWS アカウントの 1 つのアカウント
+ (オプション) クロス AWS アカウントモニタリングを設定する場合の 2 番目のアカウント

## このガイドで取り上げる内容
<a name="what-this-guide-covers"></a>

このガイドは 2 つのパートに分かれています。
+ **パート 1** — オペレーターアプリと AWS 関連付けを使用してエージェントスペースをモニタリングアカウントにデプロイします。このパートを完了すると、エージェントはそのアカウントの問題をモニタリングできます。
+ **パート 2 (オプション)** — サービスアカウントのソース AWS 関連付けを追加し、クロスアカウント IAM ロールとエコー Lambda をそのアカウントにデプロイします。これにより、エージェントスペースはアカウント全体のリソースをモニタリングできます。

## 作成されるリソース
<a name="resources-created"></a>

### パート 1: アカウントのモニタリング
<a name="part-1-monitoring-account"></a>
+ **IAM ロール** (`DevOpsAgentRole-AgentSpace-*`) — アカウントをモニタリングするために DevOps エージェントサービスによって引き受けられます。Resource Explorer サービスにリンクされたロールの作成を許可する `AIDevOpsAgentAccessPolicy`管理ポリシーとインラインポリシーが含まれます。
+ **IAM ロール** (`DevOpsAgentRole-WebappAdmin-*`) — エージェントオペレーション用の `AIDevOpsOperatorAppAccessPolicy`管理ポリシーを持つオペレーターアプリケーションロール。
+ **エージェントスペース** (設定可能な名前) — `awscc_devopsagent_agent_space`リソースを使用して作成された中央エージェントスペース。オペレーターアプリの設定が含まれます。
+ **関連付け** (AWS モニター) — `awscc_devopsagent_association`リソースを使用して、モニタリングアカウントをエージェントスペースにリンクします。
+ **関連付け** (AWS ソース) — (オプション) サービスアカウントをエージェントスペースにリンクして、クロスアカウントモニタリングを行います。

### パート 2: サービスアカウント (オプション)
<a name="part-2-service-account-optional"></a>
+ **IAM ロール** (`DevOpsAgentRole-SecondaryAccount-TF`) — 固定名を持つクロスアカウントロール。モニタリングアカウントのエージェントスペースによって信頼されます。Resource Explorer サービスにリンクされたロールの作成を許可する `AIDevOpsAgentAccessPolicy`管理ポリシーとインラインポリシーが含まれます。
+ **Lambda 関数** (`echo-service-tf`) — 入力イベントをエコーバックするシンプルなサービス例。

## セットアップ
<a name="setup"></a>

### ステップ 1: サンプルリポジトリのクローンを作成する
<a name="step-1-clone-the-sample-repository"></a>

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

### ステップ 2: 変数を設定する
<a name="step-2-configure-variables"></a>

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

```
cp terraform.tfvars.example terraform.tfvars
```

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

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

## パート 1: エージェントスペースをデプロイする
<a name="part-1-deploy-the-agent-space"></a>

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

### ステップ 1: 自動化を使用してデプロイする (推奨)
<a name="step-1-deploy-with-automation-recommended"></a>

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

```
./deploy.sh
```

このスクリプトは自動的に次のようになります。
+ 前提条件を確認する (Terraform、 AWS CLI、認証情報)
+ 必要に応じて例`terraform.tfvars`から を作成します。
+ Terraform の初期化、検証、計画、適用

または、手動制御が必要な場合は、次の操作を行います。

```
terraform init
terraform plan
terraform apply
```

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

### ステップ 2: 出力を記録する
<a name="step-2-record-the-outputs"></a>

デプロイが完了すると、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: デプロイを検証する
<a name="step-3-verify-the-deployment"></a>

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

```
./post-deploy.sh
```

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

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

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

## パート 2 (オプション): クロスアカウントモニタリングを追加する
<a name="part-2-optional-add-cross-account-monitoring"></a>

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

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

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

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

### ステップ 1: サービスアカウント ID を設定する
<a name="step-1-configure-the-service-account-id"></a>

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

```
service_account_id = "<YOUR_SERVICE_ACCOUNT_ID>"
```

### ステップ 2: エージェントスペース ARN を設定する
<a name="step-2-set-the-agent-space-arn"></a>

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

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

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

### ステップ 3: 「aws.service」プロバイダーを設定する
<a name="step-3-configure-the-awsservice-provider"></a>

で`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: デプロイする
<a name="step-4-deploy"></a>

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

```
terraform apply
```

これにより、サービスアカウントに次のリソースが作成されます。
+ モニタリングアカウントのエージェントスペースを信頼する IAM ロール (`DevOpsAgentRole-SecondaryAccount-TF`)
+ サンプルサービスとしてのエコー Lambda 関数 (`echo-service-tf`)

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

### ステップ 5: デプロイを検証する
<a name="step-5-verify-the-deployment"></a>

エコーサービスをテストして、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
```

## トラブルシューティング
<a name="troubleshooting"></a>

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

**アクセス許可エラー**
+  AWS 認証情報にロールとポリシーを作成するために必要な IAM アクセス許可があることを確認します。
+ 信頼ポリシーの条件がアカウント ID と一致していることを確認します。

**クロスアカウントデプロイが失敗する**
+ `aws.service` プロバイダーは、サービスアカウントの認証情報で設定する必要があります。名前付きプロファイルまたは継承ロールブロックを使用します。
+ `agent_space_arn` 値がパート 1 出力の ARN と一致することを確認します。

**Terraform リソースタイプが見つかりません**
+ `awscc` プロバイダーのバージョンが `~> 1.0`以降であることを確認します。`awscc_devopsagent_agent_space` および `awscc_devopsagent_association`リソースには AWS Cloud Control プロバイダーが必要です。

## クリーンアップ
<a name="cleanup"></a>

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

```
./cleanup.sh
```

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

```
terraform destroy
```

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

## セキュリティに関する考慮事項
<a name="security-considerations"></a>
+ Terraform 設定は、`aidevops.amazonaws.com`サービスプリンシパルのみがロールを引き受けることを許可する信頼ポリシーを持つ IAM ロールを作成します。
+ 信頼ポリシーには、特定の AWS アカウントとエージェントスペースの ARN へのアクセスを制限する条件が含まれます。
+ すべてのポリシーは最小特権の原則に従います。組織のセキュリティ要件に基づいて IAM ポリシーを確認してカスタマイズします。
+ クロスアカウントロール (`DevOpsAgentRole-SecondaryAccount-TF`) は固定名を使用し、特定のエージェントスペース ARN に限定されます。

## 次の手順
<a name="next-steps"></a>

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

1. DevOps エージェント機能の全範囲については、「DevOps [AWS DevOps エージェントユーザーガイド](https://docs.aws.amazon.com/devopsagent/latest/userguide/)」を参照してください。

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

## その他のリソース
<a name="additional-resources"></a>
+ [AWS DevOps エージェントユーザーガイド](https://docs.aws.amazon.com/devopsagent/latest/userguide/)
+ [サンプル Terraform リポジトリ](https://github.com/aws-samples/sample-aws-devops-agent-terraform)
+ [CLI オンボーディングガイド](https://docs.aws.amazon.com/devopsagent/latest/userguide/getting-started-with-aws-devops-agent-cli-onboarding-guide.html)