

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

# 複数の で共有 Amazon マシンイメージの使用をモニタリングする AWS アカウント
<a name="monitor-use-of-a-shared-amazon-machine-image-across-multiple-aws-accounts"></a>

*Amazon Web Services、Naveen Suthar、Sandeep Gawande*

## 概要
<a name="monitor-use-of-a-shared-amazon-machine-image-across-multiple-aws-accounts-summary"></a>

[Amazon マシンイメージ (AMI)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AMIs.html) は、Amazon Web Services (AWS) 環境で Amazon Elastic Compute Cloud (Amazon EC2) インスタンスを作成するために使用されます。AMI は、一つの集中管理された AWS アカウントで作成できます。このパターンでは、これを*作成者アカウント*と呼びます。その後、同じ にある複数の 間で AMI を共有できます AWS アカウント 。これは AWS リージョン、このパターンでは*コンシューマーアカウント*と呼ばれます。1 つのアカウントから AMI を管理することでスケーラビリティが向上し、ガバナンスを簡単に行うことができます。コンシューマーアカウントでは、Amazon EC2 Auto Scaling「[起動テンプレート](https://docs.aws.amazon.com/autoscaling/ec2/userguide/create-asg-launch-template.html)」と Amazon Elastic Kubernetes Service (Amazon EKS)「[ノードグループ](https://docs.aws.amazon.com/eks/latest/userguide/managed-node-groups.html)」の共有 AMI を参照できます。

共有 AMI が「[非推奨](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-deprecate.html)」、「[登録解除](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/deregister-ami.html)」または「[共有解除](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/sharingamis-explicit.html)」になると、コンシューマーアカウントでその AMI を参照する AWS のサービス はこの AMI を使用して新しいインスタンスを起動できなくなります。自動スケーリングイベントまたは同じインスタンスの再起動は失敗します。これにより、アプリケーションのダウンタイムやパフォーマンスの低下など、本番環境で問題が生じる可能性があります。AMI 共有イベントと使用状況イベントが複数の で発生する場合 AWS アカウント、このアクティビティをモニタリングするのは難しい場合があります。

このパターンは、同じリージョンのアカウント間での共有 AMI の使用状況とステータスをモニタリングするのに役立ちます。Amazon EventBridge AWS のサービス、Amazon DynamoDB、Amazon Simple Email Service ( AWS Lambda Amazon SES) などのサーバーレスを使用します。HashiCorp Terraform を使用して、Infrastructure as Code (IaC) としてプロビジョニングします。このソリューションは、コンシューマーアカウントのサービスが登録解除または共有されていない AMI を参照したときにアラートを発行します。

## 前提条件と制限
<a name="monitor-use-of-a-shared-amazon-machine-image-across-multiple-aws-accounts-prereqs"></a>

**前提条件**
+ 2 つ以上のアクティブ AWS アカウント: 1 つの作成者アカウントと 1 つ以上のコンシューマーアカウント
+ クリエーターアカウントからコンシューマーアカウントに共有される 1 つ以上の AMI
+ 「[インストール済み](https://developer.hashicorp.com/terraform/cli)」Terraform CLI(Terraform のドキュメント)
+ Terraform AWS Provider、[設定](https://hashicorp.github.io/terraform-provider-aws/)済み (Terraform ドキュメント)
+ (オプションであるが、推奨)「[設定済み](https://developer.hashicorp.com/terraform/language/backend)」Terraform バックエンド(Terraform のドキュメント)
+ 「[インストール済み](https://github.com/git-guides/install-git)」Git

**制限事項**
+ このパターンは、アカウント ID を使用して特定のアカウントと共有されている AMI をモニタリングします。このパターンでは、組織 ID を使用して組織と共有されている AMI はモニタリングされません。
+ AMI は、同じ AWS リージョン内のアカウントにのみ共有できます。このパターンは、単一のターゲットリージョン内の AMI をモニタリングします。複数のリージョンでの AMI の使用状況をモニタリングするには、このソリューションを各リージョンにデプロイします。
+ このパターンでは、このソリューションがデプロイされる前に共有されていた AMI はモニタリングされません。以前に共有していた AMI をモニタリングしたい場合は、AMI 共有を解除してからコンシューマーアカウントと再共有できます。

**製品バージョン**
+ Terraform バージョン 1.2.0 以降
+ Terraform AWS プロバイダーバージョン 4.20 以降

## アーキテクチャ
<a name="monitor-use-of-a-shared-amazon-machine-image-across-multiple-aws-accounts-architecture"></a>

**ターゲットテクノロジースタック**

以下のリソースは Terraform を通じて IaC としてプロビジョニングされます。
+ Amazon DynamoDB テーブル
+ Amazon EventBridge ルール
+ AWS Identity and Access Management (IAM) ロール
+ AWS Lambda 関数
+ Amazon SES

**ターゲットアーキテクチャ**

![共有 AMI の使用状況をモニタリングし、AMI が共有解除または登録解除された場合にユーザーに警告するアーキテクチャ](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/2d709249-0c68-47d7-be5d-46e8a73071ed/images/8c48c4dd-d681-4c32-9ba8-8f5ad2d66f64.png)


この図表は、次のワークフローを示しています:

1. クリエーターアカウントのすべての AMI は、同じ AWS リージョンのコンシューマーアカウントと共有されます。

1. AMI が共有されると、作成者アカウントの EventBridge ルールが `ModifyImageAttribute` イベントをキャプチャし、作成者アカウントで Lambda 関数を開始します。

1. Lambda 関数は、作成者アカウントの DynamoDB テーブルに AMI に関連するデータを格納します。

1. コンシューマーアカウントの AWS のサービス が共有 AMI を使用して Amazon EC2 インスタンスを起動する場合、または共有 AMI が起動テンプレートに関連付けられている場合、コンシューマーアカウントの EventBridge ルールは共有 AMI の使用をキャプチャします。

1. EventBridge ルールは、コンシューマーアカウントで Lambda 関数を起動します。Lambda 関数は以下を実行します。

   1. Lambda 関数は、作成者アカウントの DynamoDB テーブルに AMI 関連データを格納します。

   1. Lambda 関数は作成者アカウントの IAM ロールを引き受け、作成者アカウントの Lambda テーブルを更新します。`Mapping` テーブルでは、インスタンス ID または起動テンプレート ID をそれぞれの AMI ID にマッピングする項目を作成します。

1. 作成者アカウントで一元管理されている AMI は非推奨、登録解除または共有解除されました。

1. 作成者アカウントのEventBridge ルールは、`remove` アクションを含む `ModifyImageAttribute` または `DeregisterImage` イベントをキャプチャし、Lambda関数を起動します。

1. Lambda 関数は DynamoDB テーブルをチェックして、AMI がいずれかのコンシューマーアカウントで使用されているかを判断します。AMI に関連付けられているインスタンス ID または起動テンプレート ID が `Mapping` テーブルにない場合は、プロセスは完了です。

1. インスタンス ID または起動テンプレート ID が `Mapping` テーブル内の AMI に関連付けられている場合、Lambda 関数は Amazon SES を使用して、設定したサブスクライバーにメール通知を送信します。

## ツール
<a name="monitor-use-of-a-shared-amazon-machine-image-across-multiple-aws-accounts-tools"></a>

**AWS のサービス**
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) は、フルマネージド NoSQL データベースサービスです。高速かつ予測可能でスケーラブルなパフォーマンスを提供します。
+ 「[Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html)」 は、アプリケーションをさまざまなソースのデータに接続するために支援するサーバーレスイベントバスサービスです。例えば、 AWS Lambda 関数、API 送信先を使用する HTTP 呼び出しエンドポイント、その他のイベントバスなどです AWS アカウント。
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) は、AWS リソースの使用を認証および認可されたユーザーを制御することで、AWS リソースへのアクセスを安全に管理するのに役立ちます。
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) は、サーバーのプロビジョニングや管理を行うことなくコードを実行できるコンピューティングサービスです。必要に応じてコードを実行し、自動的にスケーリングするため、課金は実際に使用したコンピューティング時間に対してのみ発生します。
+ 「[Amazon Simple Email Service (Amazon SES)](https://docs.aws.amazon.com/ses/latest/dg/Welcome.html)」はユーザー自身のメールアドレスとドメインを使用してメールを送受信する上で役立ちます。

**その他のツール**
+ [HashiCorp Terraform](https://www.terraform.io/docs) は、コードを使用してクラウドインフラストラクチャとリソースをプロビジョニングして管理するのを支援する Infrastructure as Code (IaC) ツールです。
+ 「[Python](https://www.python.org/)」は汎用のコンピュータプログラミング言語です。

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

このパターンのコードは、GitHub 内の「[cross-account-ami-monitoring-terraform-samples](https://github.com/aws-samples/cross-account-ami-monitoring-terraform-samples)」リポジトリで利用できます。

## ベストプラクティス
<a name="monitor-use-of-a-shared-amazon-machine-image-across-multiple-aws-accounts-best-practices"></a>
+ [AWS Lambda 関数を使用する際のベストプラクティス](https://docs.aws.amazon.com/lambda/latest/dg/best-practices.html)に従ってください。
+ 「[AMI 構築のベストプラクティス](https://docs.aws.amazon.com/marketplace/latest/userguide/best-practices-for-building-your-amis.html)」に従ってください。
+ IAM ロールを作成するときは、最小特権の原則に従い、タスクの実行に必要最小限の権限を付与します。詳細については、IAM ドキュメントの「[最小特権の付与](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv)」と「[セキュリティのベストプラクティス](https://docs.aws.amazon.com/IAM/latest/UserGuide/IAMBestPracticesAndUseCases.html)」を参照してください。
+  AWS Lambda 関数のモニタリングとアラートを設定します。詳細については、「[Lambda 関数をモニタリングおよびトラブルシューティングする](https://docs.aws.amazon.com/lambda/latest/dg/lambda-monitoring.html)」を参照してください。

## エピック
<a name="monitor-use-of-a-shared-amazon-machine-image-across-multiple-aws-accounts-epics"></a>

### Terraform 設定ファイルをカスタマイズします。
<a name="customize-the-terraform-configuration-files"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
|  AWS CLI 名前付きプロファイルを作成します。 | 作成者アカウントと各コンシューマーアカウントで、 AWS Command Line Interface (AWS CLI) という名前のプロファイルを作成します。手順については、 AWS 「 入門リソースセンター」の[「 のセットアップ AWS CLI](https://aws.amazon.com/getting-started/guides/setup-environment/module-three/)」を参照してください。 | DevOps エンジニア | 
| リポジトリのクローン作成 | 次のコマンドを入力します。これにより、SSH を使用して GitHub から「[ cross-account-ami-monitoring-terraform-samples ](https://github.com/aws-samples/cross-account-ami-monitoring-terraform-samples)」リポジトリのクローンが作成されます。<pre>git clone git@github.com:aws-samples/cross-account-ami-monitoring-terraform-samples.git</pre> | DevOps エンジニア | 
| プロバイダーの.tf ファイルを更新します。 | [See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/monitor-use-of-a-shared-amazon-machine-image-across-multiple-aws-accounts.html)プロバイダーの構成について、詳細は、Terraform ドキュメントの「[複数のプロバイダー設定](https://developer.hashicorp.com/terraform/language/providers/configuration#alias-multiple-provider-configurations)」を参照してください。 | DevOps エンジニア | 
| テラフォーム.tfvars ファイルを更新します。 | [See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/monitor-use-of-a-shared-amazon-machine-image-across-multiple-aws-accounts.html) | DevOps エンジニア | 
| メイン.tf ファイルを更新します。 | この手順は、このソリューションを複数のコンシューマーアカウントにデプロイする場合にのみ実行します。このソリューションを 1 つのコンシューマーアカウントにのみデプロイする場合、このファイルを変更する必要はありません。[See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/monitor-use-of-a-shared-amazon-machine-image-across-multiple-aws-accounts.html) | DevOps エンジニア | 

### Terraform を使用してソリューションをデプロイ
<a name="deploy-the-solution-by-using-terraform"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| ソリューションのデプロイ | Terraform CLI で、次のコマンドを入力して、作成者アカウントとコンシューマーアカウントに AWS リソースをデプロイします。[See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/monitor-use-of-a-shared-amazon-machine-image-across-multiple-aws-accounts.html) | DevOps エンジニア | 
| メールアドレス ID を検証します。 | Terraform プランをデプロイすると、Terraform は Amazon SES のコンシューマーアカウントごとにメールアドレス ID を作成しました。該当メールアドレスに通知を送信する前に、メールアドレスを検証する必要があります。手順については、「Amazon SES ドキュメント」の「[メールアドレスアイデンティの検証](https://docs.aws.amazon.com/ses/latest/dg/creating-identities.html#just-verify-email-proc)」を参照してください。 | AWS 全般 | 

### リソースデプロイを検証
<a name="validate-resource-deployment"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| クリエイターアカウントによるデプロイを検証します。 | [See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/monitor-use-of-a-shared-amazon-machine-image-across-multiple-aws-accounts.html) | DevOps エンジニア | 
| コンシューマアカウントによるデプロイを検証します。 | [See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/monitor-use-of-a-shared-amazon-machine-image-across-multiple-aws-accounts.html) | DevOps エンジニア | 

### モニタリング検証
<a name="validate-monitoring"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| クリエイターアカウントで AMI を作成します。 | [See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/monitor-use-of-a-shared-amazon-machine-image-across-multiple-aws-accounts.html) | DevOps エンジニア | 
| コンシューマーアカウントで AMI を使用します。 | コンシューマーアカウントで、共有 AMI を使用して Amazon EC2 インスタンスを作成するか、テンプレートを起動します。手順については、[「カスタム AMI から Amazon EC2 インスタンスを起動する方法](https://repost.aws/knowledge-center/launch-instance-custom-ami)」 (AWS re:Post Knowledge Center) または[Auto Scaling グループの起動テンプレートを作成する](https://docs.aws.amazon.com/autoscaling/ec2/userguide/create-launch-template.html)」 (Amazon EC2 Auto Scaling ドキュメント) を参照してください。 | DevOps エンジニア | 
| モニタリングとアラートを検証します。 | [See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/monitor-use-of-a-shared-amazon-machine-image-across-multiple-aws-accounts.html) | DevOps エンジニア | 

### (オプション) 共有 AMI のモニタリングを停止
<a name="optional-stop-monitoring-shared-amis"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| リソースを削除します。 | [See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/monitor-use-of-a-shared-amazon-machine-image-across-multiple-aws-accounts.html) | DevOps エンジニア | 

## トラブルシューティング
<a name="monitor-use-of-a-shared-amazon-machine-image-across-multiple-aws-accounts-troubleshooting"></a>


| 問題 | ソリューション | 
| --- | --- | 
| メールアラートを受信していません。 | Amazon SES の電子メールが送信されなかった理由は複数考えられます。以下をチェックしてください:[See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/monitor-use-of-a-shared-amazon-machine-image-across-multiple-aws-accounts.html) | 

## 関連リソース
<a name="monitor-use-of-a-shared-amazon-machine-image-across-multiple-aws-accounts-resources"></a>

**AWS ドキュメント**
+ 「[Python による Lambda 関数の構築](https://docs.aws.amazon.com/lambda/latest/dg/lambda-python.html)」(Lambda のドキュメント)
+ 「[AMI を作成する](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/create-ami.html)」(Amazon EC2 のドキュメント)
+ 「[特定の AWS アカウントとの AMI の共有](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/sharingamis-explicit.html)」(Amazon EC2 ドキュメント)
+ 「[AMI の登録の解除](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/deregister-ami.html)」(Amazon EC2 のドキュメント)

Terraformのドキュメント
+ 「[Terraform のインストール](https://learn.hashicorp.com/tutorials/terraform/install-cli)」
+ 「[Terraform バックエンド設定](https://www.terraform.io/language/settings/backends/configuration)」
+ 「[Terraform AWS Provider](https://registry.terraform.io/providers/hashicorp/aws/latest/docs)」
+ 「[Terraform バイナリのダウンロード](https://developer.hashicorp.com/terraform/install)」