

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

# Terraform を使用して AWS Organizations でのソフトウェアパッケージの配布を一元化する
<a name="centralize-software-package-distribution-in-aws-organizations-by-using-terraform"></a>

*Amazon Web Services、Pradip kumar Pandey、Chintamani Aphale、T.V.R.L.Phani Kumar Dadi、Pratap Kumar Nanda、Aarti Rajput、Mayuri Shinde*

## 概要
<a name="centralize-software-package-distribution-in-aws-organizations-by-using-terraform-summary"></a>

多くの場合、ワークロード間に強力な分離障壁を構築 AWS リージョン するために、企業は複数の にまた AWS アカウント がる複数の を維持します。管理チームはセキュリティとコンプライアンスを維持するために、セキュリティスキャン用には [CrowdStrike](https://www.crowdstrike.com/falcon-platform/)、[SentinelOne](https://www.sentinelone.com/platform/)、[TrendMicro](https://www.trendmicro.com/en_sg/business.html) ツールなどのエージェントベースのツール、モニタリング用には [Amazon CloudWatch エージェント](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Install-CloudWatch-Agent.html)、[Datadog エージェント](https://www.datadoghq.com/)、または [AppDynamics エージェント](https://www.appdynamics.com/product/how-it-works/agents-and-controller)をインストールします。こうした大規模な環境全体で、ソフトウェアパッケージの管理と配布を一元的に自動化しようとする場合、管理チームはしばしば課題に直面します。

[AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/what-is-systems-manager.html) の一機能である [Distributor](https://docs.aws.amazon.com/systems-manager/latest/userguide/distributor.html) は、単一の簡素化されたインターフェイスを通じて、クラウドおよびオンプレミスサーバー全体のマネージド Microsoft Windows および Linux インスタンスに対し、ソフトウェアをパッケージ化して公開するプロセスを自動化します。このパターンは、Terraform を使用してソフトウェアのインストールの管理プロセスをさらに簡素化し、最小限の労力 AWS Organizations で 内の多数のインスタンスとメンバーアカウントでスクリプトを実行する方法を示しています。

このソリューションは、Systems Manager によって管理される Amazon、Linux、および Windows インスタンスで機能します。

## 前提条件と制限事項
<a name="centralize-software-package-distribution-in-aws-organizations-by-using-terraform-prereqs"></a>
+ インストール対象のソフトウェアを含む [Distributor パッケージ](https://docs.aws.amazon.com/systems-manager/latest/userguide/distributor-working-with-packages-create.html)
+ [Terraform](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli) バージョン 0.15.0 以降
+ [Systems Manager によって管理](https://docs.aws.amazon.com/systems-manager/latest/userguide/managed_instances.html)され、ターゲットアカウントの [Amazon Simple Storage Service (Amazon S3) にアクセスするための基本的なアクセス許可](https://repost.aws/knowledge-center/ec2-instance-access-s3-bucket)を持つ Amazon Elastic Compute Cloud (Amazon EC2) インスタンス
+ [AWS Control Tower](https://docs.aws.amazon.com/controltower/latest/userguide/what-is-control-tower.html) を使用して設定する組織のランディングゾーン
+ (オプション) [Account Factory for Terraform (AFT)](https://catalog.workshops.aws/control-tower/en-US/customization/aft)

## アーキテクチャ
<a name="centralize-software-package-distribution-in-aws-organizations-by-using-terraform-architecture"></a>

**リソースの詳細**

このパターンでは[、Account Factory for Terraform (AFT) ](https://catalog.workshops.aws/control-tower/en-US/customization/aft)を使用してすべての必要な AWS リソースを作成し、コードパイプラインを使用してデプロイアカウントにリソースをデプロイします。コードパイプラインは、次の 2 つのリポジトリで実行されます。
+ **グローバルカスタマイズ**は、AFT に登録されているすべてのアカウントで実行される Terraform コードを対象とします。
+ **アカウントのカスタマイズ**には、デプロイアカウントで実行される Terraform コードが含まれます。

アカウントカスタマイズフォルダで [Terraform](https://developer.hashicorp.com/terraform/intro) コマンドを実行することで、AFT を使用せずにこのソリューションをデプロイすることもできます。

Terraform コードにより、次のリソースがデプロイされます。
+ AWS Identity and Access Management (IAM) ロールとポリシー
  + [SystemsManager-AutomationExecutionRole](https://docs.aws.amazon.com/systems-manager/latest/userguide/running-automations-multiple-accounts-regions.html) は、ターゲットアカウントで自動化を実行するためのアクセス許可をユーザーに付与します。
  + [SystemsManager-AutomationAdministrationRole](https://docs.aws.amazon.com/systems-manager/latest/userguide/running-automations-multiple-accounts-regions.html) は、複数のアカウントと組織単位 (OU) で自動化を実行するためのアクセス許可をユーザーに付与します。
+ パッケージの圧縮ファイルと manifest.json
  + Systems Manager では、1 つの[パッケージ](https://docs.aws.amazon.com/systems-manager/latest/userguide/distributor-working-with-packages-create.html)に、ソフトウェアまたはインストール可能なアセットの .zip ファイルが 1 つ以上含まれます。
  + JSON マニフェストには、パッケージコードファイルへのポインタが含まれます。
+ S3 バケット
  + 組織全体で共有されている分散パッケージは、Amazon S3 バケットに安全に保存されます。
+ AWS Systems Manager ドキュメント (SSM ドキュメント)
  + `DistributeSoftwarePackage` には、メンバーアカウントのすべてのターゲットインスタンスにソフトウェアパッケージを配布するためのロジックが含まれています。
  + `AddSoftwarePackageToDistributor` には、インストール可能なソフトウェアアセットをパッケージ化し、その機能である Automation に追加するロジックが含まれています AWS Systems Manager。
+ Systems Manager の関連付け
  + Systems Manager の関連付けは、ソリューションのデプロイに使用されます。

**アーキテクチャとワークフロー**

![\[AWS Organizations でソフトウェアパッケージの配布を一元化するためのアーキテクチャ図\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/da584449-e12b-4878-a61d-00d8cea3d3d7/images/2718f2c4-f816-4e34-89b8-8182c128e6db.png)


この図は、以下のステップを示しています。

1. 一元化されたアカウントからソリューションを実行するために、デプロイステップに従って、パッケージまたはソフトウェアを S3 バケットにアップロードします。

1. カスタマイズされたパッケージは、Systems Manager コンソールの **[自分が所有]** タブの[[ドキュメント]](https://ap-southeast-2.console.aws.amazon.com/systems-manager/documents?region=ap-southeast-2) セクションから利用可能になります。

1. Systems Manager の一機能であるステートマネージャーは、組織全体でパッケージの関連付けを作成、スケジュール、実行します。関連付けを行うことで、ソフトウェアパッケージをマネージドノードにインストールして実行してからでないと、このパッケージをターゲットノードにインストールできなくなります。

1. 関連付けにより、Systems Manager はターゲットノードにパッケージをインストールするように指示されます。

1. これ以降にインストールまたは変更を行う場合、ユーザーは同じ関連付けを 1 つの場所から定期的に、または手動で実行することで、アカウント間でデプロイを実行できます。

1. メンバーアカウントでは、Automation がデプロイコマンドを Distributor に送信します。

1. Distributor は、インスタンス間にソフトウェアパッケージを配布します。

このソリューションでは、 内の管理アカウントを使用しますが AWS Organizations、組織に代わってこれを管理するためのアカウント (委任管理者) を指定することもできます。

## ツール
<a name="centralize-software-package-distribution-in-aws-organizations-by-using-terraform-tools"></a>

**AWS サービス**
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) は、量にかかわらず、データを保存、保護、取得するのに役立つクラウドベースのオブジェクトストレージサービスです。このパターンでは、Amazon S3 を使用して分散パッケージを一元化し、安全に保存します。
+ [AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/what-is-systems-manager.html) は、 AWS クラウドで実行されるアプリケーションとインフラストラクチャの管理に役立ちます。これにより、アプリケーションとリソースの管理が簡素化され、運用上の問題を検出して解決する時間を短縮し、 AWS リソースを大規模に安全に管理できます。このパターンでは、次の Systems Manager 機能を使用します。
  + [Distributor](https://docs.aws.amazon.com/systems-manager/latest/userguide/distributor.html) は、ソフトウェアをパッケージ化して、Systems Manager のマネージドインスタンスに公開するのに役立ちます。
  + [自動化](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-automation.html)により、多くの AWS サービスの一般的なメンテナンス、デプロイ、修復タスクが簡素化されます。
  + [Documents](https://docs.aws.amazon.com/systems-manager/latest/userguide/documents.html) は、組織とアカウント全体で、Systems Manager のマネージドインスタンスに対するアクションを実行します。
+ [AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html) は、作成して一元管理する組織に複数の AWS アカウントを統合するのに役立つアカウント管理サービスです。

**その他のツール**
+ [Terraform](https://www.terraform.io/) は HashiCorp の infrastructure as code (IaC) ツールで、クラウドとオンプレミスのリソースの作成と管理を支援します。

**コードリポジトリ**

このパターンの手順とコードは、GitHub [Centralized Package Distribution](https://github.com/aws-samples/aws-organization-centralised-package-distribution) リポジトリで入手できます。

## ベストプラクティス
<a name="centralize-software-package-distribution-in-aws-organizations-by-using-terraform-best-practices"></a>
+ 関連付けにタグを割り当てるには、[AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) または [AWS Tools for PowerShell](https://docs.aws.amazon.com/powershell/latest/userguide/pstools-welcome.html) を使用します。Systems Manager コンソールを使用して関連付けにタグを追加することはできません。詳細については、Systems Manager ドキュメントの「[Tagging Systems Manager resources](https://docs.aws.amazon.com/systems-manager/latest/userguide/tagging-resources.html)」を参照してください。
+ 別のアカウントから共有されたドキュメントの新しいバージョンを使用して関連付けを実行する場合は、ドキュメントバージョンを `default` に設定する必要があります。
+ ターゲットノードにのみタグを付けるには、1 つのタグキーを使用します。複数のタグキーを使用してノードをターゲットにするには、リソースグループオプションを使用します。

## エピック
<a name="centralize-software-package-distribution-in-aws-organizations-by-using-terraform-epics"></a>

### ソースファイルとアカウントを設定する
<a name="configure-source-files-and-accounts"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| リポジトリのクローンを作成 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/centralize-software-package-distribution-in-aws-organizations-by-using-terraform.html) | DevOps エンジニア | 
| グローバル変数を更新 | `global-customization/variables.tf` ファイルで、以下の入力パラメータを更新します。これらの変数は、AFT によって作成および管理されるすべてのアカウントに適用されます。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/centralize-software-package-distribution-in-aws-organizations-by-using-terraform.html) | DevOps エンジニア | 
| アカウント変数を更新 | `account-customization/variables.tf` ファイルで、以下の入力パラメータを更新します。これらの変数は、AFT によって作成および管理される特定のアカウントにのみ適用されます。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/centralize-software-package-distribution-in-aws-organizations-by-using-terraform.html) | DevOps エンジニア | 

### パラメータとデプロイファイルのカスタマイズ
<a name="customize-parameters-and-deployment-files"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| ステートマネージャーの関連付けの入力パラメータを更新 | `account-customization/association.tf` ファイル内の次の入力パラメータを更新して、インスタンスで維持する状態を定義します。ユースケースに対応している場合は、デフォルトのパラメータ値をそのまま使用できます。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/centralize-software-package-distribution-in-aws-organizations-by-using-terraform.html) | DevOps エンジニア | 
| 圧縮ファイルと `manifest.json` ファイルをパッケージ用に準備する | このパターンでは、PowerShell のインストール可能ファイル (Windows の場合は .msi、Linux の場合は .rpm) のサンプルと、インストールおよびアンインストールスクリプトが `account-customization/package` フォルダに提供されています。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/centralize-software-package-distribution-in-aws-organizations-by-using-terraform.html) | DevOps エンジニア | 

### Terraform コマンドを実行してリソースをプロビジョニングする
<a name="run-terraform-commands-to-provision-resources"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| Terraform の設定を初期化する | AFT を使用してソリューションを自動的にデプロイするには、コードを AWS CodeCommitにプッシュします。<pre>$ git add *<br />$ git commit -m "message"<br />$ git push</pre>`account-customization` フォルダから Terraform コマンドを実行して、AFT を使用せずにこのソリューションをデプロイすることもできます。Terraform ファイルを含む作業ディレクトリを初期化するには、以下を実行します。<pre>$ terraform init</pre> | DevOps エンジニア | 
| 変更のプレビュー | Terraform がインフラストラクチャに加える変更をプレビューするには、次のコマンドを実行します。<pre>$ terraform plan</pre>このコマンドは、Terraform 設定を評価して、宣言されたリソースの望ましい状態を決定します。また、ワークスペース内でプロビジョニングする実際のインフラストラクチャを、その望ましい状態と比較します。 | DevOps エンジニア | 
| 変更を適用 | 次のコマンドを実行して、`variables.tf` ファイルに加えた変更を実装します。<pre>$ terraform apply</pre> | DevOps エンジニア | 

### リソースを検証する
<a name="validate-resources"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| SSM ドキュメントの作成を検証する | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/centralize-software-package-distribution-in-aws-organizations-by-using-terraform.html)`DistributeSoftwarePackage` および `AddSoftwarePackageToDistributor` パッケージが表示されます。 | DevOps エンジニア | 
| オートメーションのデプロイが成功したことを検証する | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/centralize-software-package-distribution-in-aws-organizations-by-using-terraform.html) | DevOps エンジニア | 
| パッケージがターゲットのメンバーアカウントインスタンスにデプロイされたことを確認する | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/centralize-software-package-distribution-in-aws-organizations-by-using-terraform.html) | DevOps エンジニア | 

## トラブルシューティング
<a name="centralize-software-package-distribution-in-aws-organizations-by-using-terraform-troubleshooting"></a>


| 問題 | ソリューション | 
| --- | --- | 
| ステートマネージャーの関連付けが失敗しているか、保留中のステータスのままになっています。 |  AWS ナレッジセンターの[トラブルシューティング情報](https://repost.aws/knowledge-center/ssm-state-manager-association-fail)を参照してください。 | 
| スケジュールされた関連付けの実行に失敗しました。 | スケジュール仕様が無効である可能性があります。現在、ステートマネージャーでは、関連付けの cron 式での月の指定はサポートされていません。[cron 式または rate 式](https://docs.aws.amazon.com/systems-manager/latest/userguide/reference-cron-and-rate-expressions.html)を使用してスケジュールを確認してください。 | 

## 関連リソース
<a name="centralize-software-package-distribution-in-aws-organizations-by-using-terraform-resources"></a>
+ [Centralized package distribution](https://github.com/aws-samples/aws-organization-centralised-package-distribution) (GitHub リポジトリ)
+ [Account Factory for Terraform (AFT)](https://catalog.workshops.aws/control-tower/en-US/customization/aft)
+ [ユースケースとベストプラクティス](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-best-practices.html) (AWS Systems Manager ドキュメント)