

# Amazon EC2 の Amazon マシンイメージ
<a name="AMIs"></a>

Amazon マシンイメージ (AMI) は、Amazon EC2 インスタンスをセットアップして起動するために必要なソフトウェアを提供するイメージです。各 AMI にはブロックデバイスマッピングも含まれています。このマッピングで、起動するインスタンスにアタッチするブロックデバイスを指定します。インスタンスを起動するときは、AMI を指定する必要があります。この AMI には、インスタンスに選択したインスタンスタイプとの互換性が必要です。AWS が提供する AMI、パブリック AMI、他のユーザーと共有する AMI、AWS Marketplace から購入した AMI を使用できます。

AMI は、以下に基づいて指定します。
+ リージョン
+ オペレーティングシステム
+ プロセッサアーキテクチャ
+ ルートボリュームタイプ
+ 仮想化タイプ

同じ設定で複数のインスタンスが必要な場合は、1 つの AMI から複数のインスタンスを起動できます。さまざまな設定のインスタンスが必要なときは、次の図に示すように、異なる AMI を使用してインスタンスを起動できます。

![\[1 つの AMI から複数のインスタンスを起動します。\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/images/launch-from-ami.png)


Amazon EC2 インスタンスから AMI を作成し、それを使用して同じ設定でインスタンスを起動できます。AMI を別の AWS リージョンにコピーし、そのリージョンでインスタンスを起動するために使用できます。作成した AMI を他のアカウントと共有して、同じ設定でインスタンスを起動することもできます。AWS Marketplace を使用して AMI を販売できます。

**Topics**
+ [AMI の特性](ComponentsAMIs.md)
+ [AMI の検索](finding-an-ami.md)
+ [AWS Marketplace の有料 AMI](paid-amis.md)
+ [AMI ライフサイクル](ami-lifecycle.md)
+ [ブートモード](ami-boot.md)
+ [AMI 暗号化](AMIEncryption.md)
+ [共有 AMI](sharing-amis.md)
+ [AMI イベントをモニタリングする](monitor-ami-events.md)
+ [AMI の請求について](ami-billing-info.md)
+ [AMI クォータ](ami-quotas.md)

# Amazon EC2 の AMI タイプと特性
<a name="ComponentsAMIs"></a>

インスタンスを起動するときに選択する AMI には、選択したインスタンスタイプとの互換性が必要です。次の特性に基づき、使用する AMI を選択できます。
+ [リージョン](using-regions-availability-zones.md)
+ オペレーティングシステム
+ プロセッサアーキテクチャ
+ [起動許可](#launch-permissions)
+ [ルートボリュームタイプ](#storage-for-the-root-device)
+ [仮想化タイプ](#virtualization_types)

## 起動許可
<a name="launch-permissions"></a>

起動許可により、AMI を使用してインスタンスを起動できるユーザーが決定されます。起動許可は [AMI の共有](sharing-amis.md)として考えることができます。起動許可を付与すると、AMI を他のユーザーと共有します。起動許可を指定して利用可能な状態を決定できるのは、AMI の所有者のみです。起動許可は次のように分類されます。


| 起動アクセス許可 | 説明 | 
| --- | --- | 
| パブリック | 所有者はすべての AWS アカウントに起動許可を与えます。 | 
| 明示的 | 所有者は特定の AWS アカウント、組織、または組織単位 (OU) に起動許可を与えます。 | 
| 暗示的 | 所有者には AMI の暗示的起動許可があります。 | 

Amazon や Amazon EC2 コミュニティではさまざまなパブリック AMI を提供しています。詳細については、[Amazon EC2 での共有 AMI の使用方法について](sharing-amis.md) を参照してください。デベロッパーは自分の AMI に料金を請求できます。詳細については、「[Amazon EC2 インスタンスの AWS Marketplace の有料 AMI](paid-amis.md)」を参照してください。

## ルートボリュームタイプ
<a name="storage-for-the-root-device"></a>

すべての AMI が *Amazon EBS-backed* と *Amazon S3-backed* のいずれかに分類されます。
+ Amazon EBS-backed AMI – AMI から起動されるインスタンスのルートボリュームが、Amazon EBS スナップショットから作成される Amazon Elastic Block Store (Amazon EBS) ボリュームであることを意味します。Linux AMI と Windows AMI の両方でサポート。
+ Amazon S3-backed AMI - AMI から起動されるインスタンスのルートボリュームが、Amazon S3 に保存されたテンプレートから作成されるインスタンスストアボリュームであることを意味します。Linux AMI でのみサポート。Windows AMI はルートボリュームのインスタンスストアをサポートしていません。

詳細については、「[Amazon EC2 インスタンスのルートボリューム](RootDeviceStorage.md)」を参照してください。

**注記**  
Amazon S3-backed AMI はサポート終了扱いとなっており、新たに使用することは推奨されません。これらの AMI は、C1、C3、D2、I2、M1、M2、M3、R3、X1 の古いインスタンスタイプでのみサポートされています。

次の表では、2 種類の AMI を使用した場合の重要な相違点をまとめています。


| 特徴 | Amazon EBS-backed AMI | Amazon S3-backed AMI | 
| --- | --- | --- | 
| ルートボリューム | EBS ボリューム | インスタンスストアボリューム | 
| インスタンスの起動時間 | 通常 1 分以内 | 通常 5 分以内 | 
| データの永続性  |  デフォルトでは、インスタンスを終了するとルートボリュームは削除されます。\$1 EBS ボリュームにある他のデータはすべて、インスタンスの終了後もデフォルトで保持されます。  |  インスタンスストアボリューム上のデータは、インスタンスの存続中のみ使用できます。  | 
| 停止状態 |  停止状態になっている場合があります。インスタンスが停止して実行されていない場合でも、ルートボリュームは Amazon EBS に保持されます。  |  停止状態にすることはできません。インスタンスは実行中または終了しています。  | 
| 変更 |  インスタンスの停止中に、インスタンスタイプ、カーネル、RAM ディスク、およびユーザーデータが変更可能  |  インスタンスの属性は、インスタンスを削除するまで固定。  | 
| 料金 |  インスタンスの使用量、EBS ボリューム、また、EBS スナップショットとして保存した AMI に対して料金が発生します。  |  インスタンスの使用量や Amazon S3 に保存した AMI に対して料金が発生します。  | 
| AMI の作成/バンドル | 単一のコマンドまたは呼び出しを使用 | AMI ツールをインストールして使用する必要があります | 

\$1 デフォルトでは、EBS ルートボリュームには `DeleteOnTermination` フラグが `true` に設定されています。このフラグを変更し、終了後もボリュームを保持する方法については、「[Amazon EC2 インスタンスの終了後も Amazon EBS ルートボリュームを保持する](configure-root-volume-delete-on-termination.md)」を参照してください。

\$1\$1 `io2` EBS ブロックエクスプレスのみでサポートされています。詳細については、「*Amazon EBS ユーザーガイド*」の「[プロビジョンド IOPS SSD Block Express ボリューム](https://docs.aws.amazon.com/ebs/latest/userguide/provisioned-iops.html#io2-block-express)」を参照してください。

# AMI によって決まるルートボリュームタイプを識別する
<a name="display-ami-root-device-type"></a>

EC2 インスタンスの起動に使用する AMI によってルートボリュームのタイプが決まります。EC2 インスタンスのルートボリュームは、EBS ボリュームまたはインスタンスストアボリュームのどちらかです。

[Nitro ベースのインスタンス](instance-types.md#instance-hypervisor-type)は、EBS ルートボリュームのみをサポートしています。インスタンスストアのルートボリュームをサポートしているインスタンスタイプは、次の旧世代のインスタンスタイプのみです: C1、C3、D2、I2、M1、M2、M3、R3、X1。

------
#### [ Console ]

**AMI によって決まるルートボリュームタイプを識別するには**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. ナビゲーションペインで **[AMI]** をクリックした後、AMI を選択します。

1. 次のように、**[Details]** (詳細) タブで **[Root device type]** (ルートデバイスタイプ) の値を確認します。
   + `ebs` – この AMI から起動されたインスタンスは、EBS ルートボリュームを取得します。
   + `instance store` – この AMI から起動されたインスタンスは、インスタンスストアのルートボリュームを取得します。

------
#### [ AWS CLI ]

**AMI によって決まるルートボリュームタイプを識別するには**  
[describe-images](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) コマンドを使用します。

```
aws ec2 describe-images \
    --image-ids ami-0abcdef1234567890 \
    --query Images[].RootDeviceType
```

以下は出力の例です。

```
ebs
```

------
#### [ PowerShell ]

**AMI によって決まるルートボリュームタイプを識別するには**  
[Get-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Image.html) コマンドレットを使用します。

```
(Get-EC2Image `
    -ImageId ami-0abcdef1234567890).RootDeviceType.Value
```

以下は出力の例です。

```
ebs
```

------

## 仮想化タイプ
<a name="virtualization_types"></a>

Amazon マシンイメージ では、2 つの仮想化タイプ (準仮想化 (PV) およびハードウェア仮想マシン (HVM)) のどちらかを使用します。PV AMI と HVM AMI の主な違いは、起動の方法と、パフォーマンス向上のための特別なハードウェア拡張機能 (CPU、ネットワーク、ストレージ) を利用できるかどうかという点です。Windows AMI は、HVM AMI です。

以下の表では、HVM と PV AMI を比較しています。


| 特性 | HVM | PV | 
| --- | --- | --- | 
| 説明 | HVM AMI は、完全に仮想化された一連のハードウェアを備えており、イメージのルートブロックデバイスのマスターブートレコードを実行することによって起動します。この仮想化タイプでは、ベアメタルハードウェア上でオペレーティングシステムが動作するのと同様に、修正を行わなくても仮想マシン上でオペレーティングシステムを直接実行することができます。Amazon EC2 ホストシステムでは、ゲストに提供されている基盤となるハードウェアの一部またはすべてがエミュレートされます。 | PV AMI は、PV-GRUB と呼ばれる特別なブートローダーを使用して起動します。このブートローダーによって起動サイクルが開始され、イメージの menu.lst ファイルで指定されているカーネルがチェーンロードされます。準仮想化のゲストは、仮想化を明示的にサポートしていないホストハードウェアで実行できます。PV-GRUB の詳細や Amazon EC2 での使用方法については、「[ユーザー提供カーネル](https://docs.aws.amazon.com/linux/al2/ug/UserProvidedKernels.html)」を参照してください。 | 
| サポートされるインスタンスタイプ | すべての現行世代のインスタンスタイプは HVM AMI をサポートします。 | 次の旧世代のインスタンスタイプは、PV AMI をサポートします: C1、C3、M1、M3、M2、および T1。現行世代のインスタンスタイプは PV AMI をサポートしません。 | 
| ハードウェア拡張のサポート | HVM のゲストは、ホストシステム上の基盤となるハードウェアへの高速なアクセスを可能にするハードウェア拡張を利用できます。拡張ネットワークや GPU 処理を使用するために必要です。専用のネットワークや GPU デバイスに命令を伝達するには、OS がネイティブハードウェアプラットフォームにアクセスできる必要があります。HVM 仮想化ではこのアクセスが可能です。詳細については、「[Amazon EC2 インスタンスでの拡張ネットワーキング](enhanced-networking.md)」を参照してください。 | いいえ。拡張ネットワークや GPU 処理などの特別なハードウェア拡張を利用することはできません。 | 
| [検索方法](finding-an-ami.md) | コンソールまたは [describe-images](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) コマンドを使用して、AMI の仮想化タイプが hvm に設定されていることを確認します。 | コンソールまたは [describe-images](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) コマンドを使用して、AMI の仮想化タイプが paravirtual に設定されていることを確認します。 | 

**PV on HVM**  
従来、準仮想化のゲストはストレージやネットワークの操作については、HVM のゲストよりも高いパフォーマンスを実現していました。これは、準仮想化のゲストでは I/O 用の特別なドライバー (ネットワークとディスクのハードウェアをエミュレートする際のオーバーヘッドが回避されます) を活用することができたためです。これに対して、HVM のゲストでは、エミュレートされたハードウェアに対する命令を変換する必要がありました。現在では、PV ドライバーを HVM のゲストで利用できるようになりました。このため、準仮想化された環境で実行するためのができないオペレーティングシステムでも、これらのドライバーを使用することで、ストレージやネットワークの I/O でパフォーマンスの向上を確認することができます。このような PV on HVM ドライバーを使用すると、HVM のゲストで、準仮想化のゲストと同じまたはより優れたパフォーマンスを実現できます。

# EC2 インスタンスの要件を満たす AMI を検索する
<a name="finding-an-ami"></a>

AMI には、インスタンスの起動に必要な、オペレーティングシステムやルートボリュームのタイプなどのコンポーネントとアプリケーションが含まれています。インスタンスを起動するには、要件を満たす AMI を検索する必要があります。

AMI を選択する際には、起動するインスタンスについて求められる可能性のある次の要件を検討してください。
+ AMI ID としての AMI の AWS リージョンは、各リージョンに固有のものです。
+ オペレーティングシステム (Linux、Windows など)。
+ アーキテクチャ (32 ビット、64 ビット、64 ビット ARM など)。
+ ルートボリュームタイプ (Amazon EBS、インスタンスストアなど)。
+ プロバイダー (Amazonウェブサービス など)。
+ 追加のソフトウェア (SQL サーバー など)。

------
#### [ Console ]

インスタンス起動ウィザードを使用するときに AMI のリストから選択するか、[**Images**] ページを使用して使用可能なすべての AMI を検索することができます。

**インスタンス起動ウィザードを使用してクイック スタート AMI を検索するには**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. ナビゲーションバーから、インスタンスを起動するリージョンを選択してください。お客様は場所に関係なく、使用できるリージョンをどれでも選択できます。AMI ID は各 AWS リージョンで固有です。

1. コンソールダッシュボードで [**インスタンスの作成**] を選択してください。

1. **[アプリケーションと OS イメージ (Amazon マシンイメージ)]** にある **[クイックスタート]** を選択し、インスタンスのオペレーティングシステム (OS) を選択してください。次に、**[Amazon マシンイメージ (AMI)]** で、よく使用されている AMI の 1 つをリストから選択してください。必要な AMI が表示されていない場合は、**[その他の AMI を閲覧]** を選択して、AMI の全カタログを参照してください。詳細については、「[アプリケーションと OS イメージ (Amazon マシンイメージ)](ec2-instance-launch-parameters.md#liw-ami)」を参照してください。

**AMI ページを使用して AMI を検索するには**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. ナビゲーションバーから、インスタンスを起動するリージョンを選択してください。お客様は場所に関係なく、使用できるリージョンをどれでも選択できます。AMI ID は各 AWS リージョンで固有です。

1. ナビゲーションペインで **[AMI]** を選択してください。

1. (オプション) フィルターと検索オプションを使用すると、表示される AMI を限定して、条件に一致する AMI のみを表示できます。

   例えば、AWS で提供されるすべての AMI を表示するには、**[パブリックイメージ]** を選択してください。次に、検索オプションを使用して、AMI のリストに表示される範囲を指定します。**検索**バーをクリックし、メニューから **[所有者エイリアス]**、**[=]** 演算子の順に選択し、値として **[Amazon]** を選択してください。Linux や Windows など、特定のプラットフォームに対応する AMI を検索するには、**[検索]** バーを再度選択して **[プラットフォーム]** を選択し、そして **[=]** 演算子を選択して、表示されたリストからオペレーティングシステムを選択してください。

1. (オプション) **[設定]** アイコンを選択して、ルートボリュームタイプなど、表示するイメージ属性を選択してください。あるいは、一覧から AMI を選択し、**[詳細]** タブにそのプロパティを表示できます。

1. AMI を選択する前に、その AMI が インスタントストアバック と Amazon EBS-Backed のどちらであるかを確認し、その違いを認識しておくことが重要です。詳細については、「[ルートボリュームタイプ](ComponentsAMIs.md#storage-for-the-root-device)」を参照してください。

1. この AMI からインスタンスを起動するには、インスタンスを選択し、**[イメージからのインスタンスの起動]** を選択してください。コンソールを使用してインスタンスを起動する方法については、[コンソールのインスタンス起動ウィザードを使用して EC2 インスタンスを起動する](ec2-launch-instance-wizard.md) を参照してください。まだインスタンスを起動する準備ができていない場合は、後で使用するために AMI ID を記録します。

------
#### [ AWS CLI ]

[describe-images](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) コマンドを使用して、要件を満たす AMI を見つけます。デフォルトでは、このコマンドは、パブリックの AMI、ユーザーが所有している AMI、ユーザーに共有されている AMI、のすべてを返します。

**Amazon が所有する AMI を見つけるには**  
[describe-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) コマンドを `--owners` オプションで使用します。

```
aws ec2 describe-images --owners amazon
```

**Windows AMI を見つけるには**  
次のフィルターを使用すると、Windows AMI のみが表示されます。

```
--filters "Name=platform,Values=windows"
```

**EBS-backed AMI を見つけるには**  
Amazon EBS がバックアップしている AMI のみを表示するときは、次のフィルターを追加します。

```
--filters "Name=root-device-type,Values=ebs"
```

------
#### [ PowerShell ]

[Get-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Image.html) コマンドレットを使用して、要件を満たす AMI を見つけます。デフォルトでは、このコマンドレットは、パブリックの AMI、ユーザーが所有している AMI、ユーザーに共有されている AMI、のいずれかをすべて返します。

**Amazon が所有する AMI を見つけるには**  
[Get-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Image.html) コマンドを `-Owner` パラメータと共に使用します。

```
Get-EC2Image -Owner amazon
```

**Windows AMI を見つけるには**  
次のフィルターを使用すると、Windows AMI のみが表示されます。

```
-Filter @{Name="platform"; Values="windows"}
```

その他の例については、「*AWS Tools for PowerShell ユーザーガイド*」の「[Find an Amazon Machine Image Using Windows PowerShell](https://docs.aws.amazon.com/powershell/latest/userguide/pstools-ec2-get-amis.html)」を参照してください。

------

**関連リソース**

特定のオペレーティングシステムの AMI の詳細については、以下を参照してください。
+ Amazon Linux 2023 – 「*Amazon Linux 2023 ユーザーガイド*」の「[Amazon EC2 での AL2023](https://docs.aws.amazon.com/linux/al2023/ug/ec2.html)」を参照してください。
+ Ubuntu – *Canonical Ubuntu ウェブサイト*の「[Amazon EC2 AMI Locator](https://cloud-images.ubuntu.com/locator/ec2/)」を参照してください。
+ RHEL – Red Hat ウェブサイトの「[Red Hat Enterprise Linux Images (AMI) Amazon ウェブサービス (AWS) で利用可能](https://access.redhat.com/solutions/15356)」を参照してください。
+ Windows Server – [AWS Windows AMI リファレンス](https://docs.aws.amazon.com/ec2/latest/windows-ami-reference/windows-amis.html)

AWS Marketplace でサブスクライブできる AMI の詳細については、「[Amazon EC2 インスタンスの AWS Marketplace の有料 AMI](paid-amis.md)」を参照してください。

Systems Manager を使用してユーザーがインスタンスの起動時に使用する必要がある最新の AMI を見つけやすくする方法については、以下を参照してください。
+ [Systems Manager パラメータを使用して AMI を参照する](using-systems-manager-parameter-to-find-AMI.md)
+ [Systems Manager パブリックパラメータを使用して最新の AMI を参照する](finding-an-ami-parameter-store.md)

# Systems Manager パラメータを使用して AMI を参照する
<a name="using-systems-manager-parameter-to-find-AMI"></a>

Amazon EC2 コンソールで EC2 インスタンス起動ウィザードを使用してインスタンスを起動する場合は、リストから AMI を選択するか、AMI ID (このセクションで説明) を指す AWS Systems Manager パラメータを選択できます。オートメーションコードを使用してインスタンスを作成する場合は、AMI ID の代わりに Systems Manager パラメータを指定できます。

システム管理 パラメータは、システム管理 パラメータストアで作成できるユーザー定義のキーと値のペアです。パラメータストアは、アプリケーションの設定値を外部化するための一元的なストアを提供します。詳細については、*AWS Systems Manager ユーザーガイド*の「[AWS システム管理 パラメータストア](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html)」を参照してください。

AMI ID をポイントするパラメータを作成する場合は、データ型に `aws:ec2:image` を指定してください。このデータ型を指定すると、パラメータの作成時または変更時にパラメータ値が AMI ID として検証されます。詳細については、*AWS Systems Manager ユーザーガイド*の「[Amazon マシンイメージ ID のパラメータのネイティブサポート](https://docs.aws.amazon.com/systems-manager/latest/userguide/parameter-store-ec2-aliases.html)」を参照してください。

**Topics**
+ [ユースケース](#systems-manager-parameter-use-case)
+ [アクセス許可](#systems-manager-permissions)
+ [制限](#AMI-systems-manager-parameter-limitations)
+ [システム管理 パラメータを使用したインスタンスの起動](#systems-manager-parameter-launch-instance)

## ユースケース
<a name="systems-manager-parameter-use-case"></a>

システム管理 パラメータを使用して AMI ID を指すようにすると、ユーザーがインスタンスの起動時に適切な AMI を簡単に選択できるようになります。システム管理 パラメータにより、オートメーションコードのメンテナンスを簡素化することもできます。

**ユーザーの利便性の向上**

特定の AMI を使用してインスタンスを作成する必要があり、その AMI を定期的に更新する場合は、AMI を見つけるために システム管理 パラメータを選択するようにユーザーに求めることをお勧めします。ユーザーに システム管理 パラメータを選択するように求めると、インスタンスの起動に最新の AMI が使用されるようになります。

例えば、組織内で毎月最新のオペレーティングシステムとアプリケーションパッチが適用された AMI の新しいバージョンを作成するとします。また、ユーザーに最新バージョンの AMI を使用してインスタンスを作成するように求めるとします。ユーザーに最新バージョンを確実に使用させるには、適切な AMI ID をポイントする システム管理 パラメータ (例: `golden-ami` など) を作成することができます。新しいバージョンの AMI を作成するたびに、パラメータの AMI ID の値を更新して常に最新の AMI をポイントするようにします。ユーザーは毎回同じ システム管理 パラメータを選択し続けるため、AMI の定期的な更新について知る必要はありません。AMI に システム管理 パラメータを使用すると、ユーザーはインスタンスの起動に適切な AMI を簡単に選択できるようになります。

**オートメーションコードの保守の簡素化**

オートメーションコードを使用してインスタンスを作成する場合は、AMI ID の代わりに システム管理 パラメータを指定できます。新しいバージョンの AMI を作成したら、最新の AMI を指すようにパラメータの AMI ID の値を変更できます。パラメータを参照するオートメーションコードは、新しいバージョンの AMI を作成するたびに修正する必要はありません。これにより、オートメーションのメンテナンスが簡素化されるため、デプロイのコストの削減に役立ちます。

**注記**  
システム管理 パラメータが指す AMI ID を変更しても、実行中のインスタンスは影響を受けません。

## アクセス許可
<a name="systems-manager-permissions"></a>

インスタンス起動ウィザードで AMI ID をポイントする システム管理 パラメータを使用する場合は、IAM ポリシーに次のアクセス許可を追加する必要があります。
+ `ssm:DescribeParameters` – システム管理 パラメータを表示および選択するためのアクセス許可を付与します。
+ `ssm:GetParameters` – システム管理 パラメータの値を取得するためのアクセス許可を付与します。

また、特定の システム管理 パラメータへのアクセスを制限することもできます。詳細と IAM ポリシーの例については、「[例: EC2 インスタンス起動ウィザードの使用](iam-policies-ec2-console.md#ex-launch-wizard)」を参照してください。

## 制限
<a name="AMI-systems-manager-parameter-limitations"></a>

AMI と システム管理 パラメータはリージョンに固有です。リージョン間で同じ システム管理 パラメータ名を使用するには、それぞれのリージョンで同じ名前の システム管理 パラメータを作成します (例: `golden-ami` など)。それぞれのリージョンの システム管理 パラメータでそのリージョンの AMI をポイントします。

パラメータ名では大文字と小文字が区別されます。パラメータ名のバックスラッシュは、パラメータが階層の一部である場合にのみ必要です (例: `/amis/production/golden-ami`)。パラメータが階層の一部でない場合は、バックスラッシュを省略できます。

## システム管理 パラメータを使用したインスタンスの起動
<a name="systems-manager-parameter-launch-instance"></a>

インスタンスを起動するときは、AMI ID を指定する代わりに、AMI ID をポイントする Systems Manager パラメータを指定できます。

このパラメータをプログラム的に指定するには、以下の構文を使用します。この構文では、`resolve:ssm` が標準のプレフィクス、`parameter-name` が一意のパラメータ名になります。

```
resolve:ssm:parameter-name
```

システム管理 パラメータでは、バージョンがサポートされています。パラメータの各バージョンには、一意のバージョン番号が割り当てられます。パラメータのバージョンは以下のように参照できます。`version` は一意のバージョン番号です。デフォルトでは、パラメータのバージョンを指定しない場合は最新バージョンが使用されます。

```
resolve:ssm:parameter-name:version
```

AWS が提供するパブリックパラメータを使用してインスタンスを起動するには、「[Systems Manager パブリックパラメータを使用して最新の AMI を参照する](finding-an-ami-parameter-store.md)」を参照してください。

------
#### [ Console ]

**Systems Manager パラメータを使用して AMI を検索する**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. ナビゲーションバーから、インスタンスを起動するリージョンを選択してください。お客様は場所に関係なく、使用できるリージョンをどれでも選択できます。

1. コンソールダッシュボードで [**インスタンスの作成**] を選択してください。

1. **[アプリケーションおよび OS イメージ (Amazon マシンイメージ)]** で、**[その他の AMI を閲覧]** を選択してください。

1. 検索バーの右側にある矢印ボタンを選択し、**[システム管理 パラメータで検索]** を選択してください。

1. [**システム管理 パラメータ**] でパラメータを選択してください。対応する AMI ID が **[現在、以下に解決されています]** の下に表示されます。

1. [**検索**] を選択してください。AMI ID に一致する AMI がリストに表示されます。

1. リストから AMI を選択し、[**選択**] を選択してください。

インスタンス起動ウィザードを使用してインスタンスを起動する方法の詳細については、「[コンソールのインスタンス起動ウィザードを使用して EC2 インスタンスを起動する](ec2-launch-instance-wizard.md)」を参照してください。

------
#### [ AWS CLI ]

**Systems Manager パラメータを使用してインスタンスを起動する**  
`--image-id` オプションで [run-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/run-instances.html) コマンドを使用します。この例では、AMI ID を指定する **golden-ami** という名前の Systems Manager パラメータを使用します。

```
--image-id resolve:ssm:/golden-ami
```

Systems Manager パラメータにはバージョンを作成できます。次の例では、**golden-ami** パラメータのバージョン 2 を指定します。

```
--image-id resolve:ssm:/golden-ami:2
```

------
#### [ PowerShell ]

**Systems Manager パラメータを使用してインスタンスを起動する**  
`-ImageId` パラメータで [New-EC2Instance](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2Instance.html) コマンドレットを使用します。この例では、AMI ID を指定する **golden-ami** という名前の Systems Manager パラメータを使用します。

```
-ImageId "resolve:ssm:/golden-ami"
```

Systems Manager パラメータにはバージョンを作成できます。次の例では、**golden-ami** パラメータのバージョン 2 を指定します。

```
-ImageId "resolve:ssm:/golden-ami:2"
```

------

# Systems Manager パブリックパラメータを使用して最新の AMI を参照する
<a name="finding-an-ami-parameter-store"></a>

AWS Systems Manager には、AWS によって維持されるパブリック AMI 用のパブリックパラメータがあります。インスタンスの起動時にパブリックパラメータを使用することで、確実に最新の AMI を使用することができます。例えば、パブリックパラメータ `/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-default-arm64` はすべてのリージョンで使用でき、特定のリージョンの arm64 アーキテクチャ対応 Amazon Linux 2023 AMI の最新バージョンを常にポイントします。

パブリックパラメータは次のパスから使用できます。
+ **Linux** – `/aws/service/ami-amazon-linux-latest`
+ **Windows** – `/aws/service/ami-windows-latest`

詳細については、「[AWS Systems Manager ユーザーガイド](https://docs.aws.amazon.com/systems-manager/latest/userguide/parameter-store-public-parameters.html)」の「*Parameter Store でのパブリックパラメータの使用*」を参照してください。

## Amazon Linux AMI の一覧表示
<a name="list-ami-amazon-linux-latest"></a>

------
#### [ AWS CLI ]

**現在の AWS リージョンの Linux AMI を一覧表示する**  
次の [get-parameters-by-path](https://docs.aws.amazon.com/cli/latest/reference/ssm/get-parameters-by-path.html) コマンドを使用します。`--path` パラメータの値は Linux AMI に固有の値です。

```
aws ssm get-parameters-by-path \
    --path /aws/service/ami-amazon-linux-latest \
    --query "Parameters[].Name"
```

------
#### [ PowerShell ]

**現在の AWS リージョンの Linux AMI を一覧表示する**  
[Get-SSMParametersByPath](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-SSMParametersByPath.html) コマンドレットを使用します。

```
Get-SSMParametersByPath `
    -Path "/aws/service/ami-amazon-linux-latest" | `
    Sort-Object Name | Format-Table Name
```

------

## Windows AMI の一覧表示
<a name="list-ami-windows-latest"></a>

------
#### [ AWS CLI ]

**現在の AWS リージョンの Windows AMI を一覧表示する**  
次の [get-parameters-by-path](https://docs.aws.amazon.com/cli/latest/reference/ssm/get-parameters-by-path.html) コマンドを使用します。`--path` パラメータの値は Windows AMI に固有の値です。

```
aws ssm get-parameters-by-path \
    --path /aws/service/ami-windows-latest \
    --query "Parameters[].Name"
```

------
#### [ PowerShell ]

**現在の AWS リージョンの Windows AMI を一覧表示する**  
[Get-SSMParametersByPath](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-SSMParametersByPath.html) コマンドレットを使用します。

```
Get-SSMParametersByPath `
    -Path "/aws/service/ami-windows-latest" | `
    Sort-Object Name | Format-Table Name
```

------

## パブリックパラメータを使用したインスタンスの起動
<a name="launch-instance-public-parameter"></a>

インスタンスの起動時にパブリックパラメータを指定するには、`resolve:ssm:public-parameter` 構文を使用します。この構文では、`resolve:ssm` が標準のプレフィクス、`public-parameter` がパブリックパラメータのパスと名前です。

------
#### [ AWS CLI ]

**パブリックパラメータを使用してインスタンスを作成するには**  
`--image-id` オプションで [run-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/run-instances.html) コマンドを使用します。この例では、イメージ ID の Systems Manager パブリックパラメータを指定して、最新の Amazon Linux 2023 AMI でインスタンスを起動します。

```
--image-id resolve:ssm:/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-default-x86_64
```

------
#### [ PowerShell ]

**パブリックパラメータを使用してインスタンスを作成するには**  
`-ImageId` パラメータで [New-EC2Instance](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2Instance.html) コマンドレットを使用します。この例では、イメージ ID の Systems Manager パブリックパラメータを指定して、Windows Server 2022 向けの最新 AMI でインスタンスを起動します。

```
-ImageId "resolve:ssm:/aws/service/ami-windows-latest/Windows_Server-2022-English-Full-Base"
```

------

Systems Manager パラメータを使用するその他の例については、「[AWS Systems Manager Parameter Storeを使用して最新の Amazon Linux AMI ID のクエリする](https://aws.amazon.com/blogs/compute/query-for-the-latest-amazon-linux-ami-ids-using-aws-systems-manager-parameter-store/)」および「[AWS Systems Manager Parameter Storeを使用して最新の Windows AMI をクエリする](https://aws.amazon.com/blogs/mt/query-for-the-latest-windows-ami-using-systems-manager-parameter-store/)」を参照してください。

# Amazon EC2 インスタンスの AWS Marketplace の有料 AMI
<a name="paid-amis"></a>

有料 AMI は、AWS Marketplace で販売されている AMI です。**AWS Marketplace は、EC2 インスタンスの起動に使用できる AMI など、AWS で実行されるソフトウェアを購入できるオンラインストアです。AWS Marketplace AMI はデベロッパーツールなどカテゴリ別に整理されており、ユーザーは要件に適合する製品を見つけることができます。AWS Marketplace の詳細については、[AWS Marketplace](https://aws.amazon.com/marketplace) のウェブサイトを参照してください。

Red Hat のような組織のサービス契約に付属する AMI など、サードパーティーの AMI を AWS Marketplace で購入できます。また、AMI を作成し、AWS Marketplace で他の Amazon EC2 ユーザーに販売することもできます。安全で信頼性が高く、便利な AMI を作成して、一般公開する手順はきわめて単純で、いくつかのシンプルなガイドラインにしたがうだけです。共有 AMI の作成および使用方法の詳細については、[Amazon EC2 での共有 AMI の使用方法について](sharing-amis.md) を参照してください。

有料 AMI からのインスタンスの起動は、他の AMI からのインスタンスの起動と同じです。追加パラメータは必要ありません。インスタンスは、AMI の所有者が設定した料金と、Amazon EC2 で m5.small インスタンスタイプを実行する場合の 1 時間あたりの料金など、関連ウェブサービスの標準使用料に基づいて課金されます。税金が加算されることもあります。有料 AMI の所有者は、特定のインスタンスがその有料 AMI から起動されたかどうかを確認できます。

**重要**  
Amazon DevPay は新しい販売者または製品の受付を停止しました。現在は AWS Marketplace が、ソフトウェアとサービスを AWS で販売しており、唯一の統一された e コマースプラットフォームとなっています。AWS Marketplace でソフトウェアをデプロイし販売する方法については、[AWS マーケットプレイス での販売](https://aws.amazon.com/marketplace/partners/management-tour)を参照してください。AWS Marketplace は Amazon EBS-バック の AMI をサポートしています。

**Topics**
+ [AWS Marketplace で AMI を販売する](#selling-your-ami)
+ [有料 AMI の検索](using-paid-amis-finding-paid-ami.md)
+ [AWS Marketplace で有料 AMI を購入する](using-paid-amis-purchasing-paid-ami.md)
+ [インスタンスから AWS Marketplace 製品コードを取得する](get-product-code.md)
+ [サポートされている AWS Marketplace 製品の有料サポートを使用する](using-paid-amis-support.md)
+ [有料およびサポートされる AMI の請求書](#using-paid-amis-bills)
+ [AWS Marketplace サブスクリプションを管理する](marketplace-manage-subscriptions.md)

## AWS Marketplace で AMI を販売する
<a name="selling-your-ami"></a>

AWS Marketplace を使用して AMI を販売できます。AWS Marketplace では体系的に買い物をすることができます。また AWS Marketplace は、Amazon EBS-backed AMI、リザーブドインスタンス、スポットインスタンスなどの AWS 機能もサポートしています。

AWS Marketplace で AMI を販売する方法の詳細については、[AWS マーケットプレイス での販売](https://aws.amazon.com/marketplace/partners/management-tour)を参照してください。

# 有料 AMI の検索
<a name="using-paid-amis-finding-paid-ami"></a>

有料 AMI は、購入可能な Amazon マシンイメージ (AMI) です。有料 AMI には製品コードもあります。購入可能な AMI は AWS Marketplace で見つけることができます。

------
#### [ Console ]

**有料 AMI を検索するには**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. ナビゲーションペインで [**AMI**] を選択してください。

1. 最初のフィルタで、[**パブリックイメージ**] を選択してください。

1. 次のいずれかを行います。
   + 製品コードがわかっている場合は、**[製品コード]** 、**[=]** の順に選択し、製品コードを入力してください。
   + 製品コードがわからない場合は、検索バーでフィルター **Owner alias=aws-marketplace** を指定します。必要に応じて追加のフィルターを指定します。

1. AMI の ID を保存します。

------
#### [ AWS CLI ]

**有料 AMI を検索するには**  
次の [describe-images](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) コマンドを使用します。

```
aws ec2 describe-images --owners aws-marketplace
```

出力には多数のイメージが含まれます。フィルターを指定することで、必要な AMI を識別することができます。AMI を見つけたら、次のコマンドでその ID を指定して製品コードを取得します。

```
aws ec2 describe-images \
    --image-ids ami-0abcdef1234567890 \
    --query Images[*].ProductCodes[].ProductCodeId
```

以下は出力の例です。

```
[
    "cdef1234abc567def8EXAMPLE"
]
```

製品コードがわかっている場合は、結果を製品コードでフィルタリングすることができます。次の例は、指定された製品コードを持つ最新の AMI を返します。

```
aws ec2 describe-images \
    --filters "Name=product-code,Values=cdef1234abc567def8EXAMPLE" \
    --query "sort_by(Images, &CreationDate)[-1].[ImageId]"
```

------
#### [ PowerShell ]

**有料 AMI を検索するには**  
[Get-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Image.html) コマンドレットを使用します。

```
Get-EC2Image -Owner aws-marketplace
```

出力には多数のイメージが含まれます。フィルターを指定することで、必要な AMI を識別することができます。AMI を見つけたら、次のコマンドでその ID を指定して製品コードを取得します。

```
(Get-EC2Image -ImageId ami-0abcdef1234567890).ProductCodes
```

以下は出力の例です。

```
ProductCodeId             ProductCodeType
-------------             ---------------
cdef1234abc567def8EXAMPLE marketplace
```

製品コードがわかっている場合は、結果を製品コードでフィルタリングすることができます。次の例は、指定された製品コードを持つ最新の AMI を返します。

```
(Get-EC2Image -Owner aws-marketplace -Filter @{"Name"="product-code";"Value"="cdef1234abc567def8EXAMPLE"} | sort CreationDate -Descending | Select-Object -First 1).ImageId
```

------

# AWS Marketplace で有料 AMI を購入する
<a name="using-paid-amis-purchasing-paid-ami"></a>

AMI を使用して Amazon EC2 インスタンスを起動するには、有料 AMI にサインアップする (購入する) 必要があります。

通常、有料 AMI の販売者は、価格や購入サイトへのリンクなど、AMI に関する情報を提供します。リンクをクリックすると、最初に AWS へのログインが求められます。ログイン後、AMI を購入できます。

## コンソールを使用した有料 AMI の購入
<a name="purchase-paid-ami-console"></a>

Amazon EC2 Launch Wizard を使用して有料 AMI を購入できます。詳細については、[AWS Marketplace AMI から Amazon EC2 インスタンスを起動する](launch-marketplace-console.md) を参照してください。

## AWS Marketplace を使用した製品の登録
<a name="subscribe-to-paid-ami"></a>

AWS Marketplace を使用するには、AWS アカウントが必要です。AWS Marketplace 製品からインスタンスを起動するには、Amazon EC2 サービスを利用するためのサインアップと、インスタンスを起動する製品のサブスクリプションが必要です。次のいずれかの方法を使用して、AWS Marketplace で製品をサブスクライブします。
+ **AWS Marketplace ウェブサイト**: 1-Click デプロイメント機能で、事前に設定したソフトウェアをすばやく起動できます。詳細については、「[AWS MarketplaceにおけるAMIベースの製品](https://docs.aws.amazon.com/marketplace/latest/buyerguide/buyer-server-products.html)」を参照してください。
+ **Amazon EC2 Launch Wizard **: AMI を検索し、ウィザードからインスタンスを直接起動できます。詳細については、「[AWS Marketplace AMI から Amazon EC2 インスタンスを起動する](launch-marketplace-console.md)」を参照してください。

# インスタンスから AWS Marketplace 製品コードを取得する
<a name="get-product-code"></a>

インスタンスの AWS Marketplace 製品コードは、インスタンスメタデータを使用して取得できます。インスタンスに製品コードが含まれる場合、Amazon EC2 はそれを返します。メタデータの取得については、[EC2 インスタンスのインスタンスメタデータにアクセスする](instancedata-data-retrieval.md) を参照してください。

------
#### [ IMDSv2 ]

**Linux**  
次のコマンドを Linux インスタンスから実行します。

```
TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \
    && curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/product-codes
```

**Server**  
次のコマンドレットを Windows インスタンスから実行します。

```
[string]$token = Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token-ttl-seconds" = "21600"} `
    -Method PUT -Uri http://169.254.169.254/latest/api/token
```

```
Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} `
    -Method GET -Uri http://169.254.169.254/latest/meta-data/product-codes
```

------
#### [ IMDSv1 ]

**Linux**  
次のコマンドを Linux インスタンスから実行します。

```
curl http://169.254.169.254/latest/meta-data/product-codes
```

**Server**  
次のコマンドを Windows インスタンスから実行します。

```
Invoke-RestMethod -Uri http://169.254.169.254/latest/meta-data/product-codes
```

------

# サポートされている AWS Marketplace 製品の有料サポートを使用する
<a name="using-paid-amis-support"></a>

Amazon EC2 は、デベロッパーがソフトウェア (またはそれに由来する AMI) のサポートを提供できるように手配します。デベロッパーは、お客様がサインアップして使用できるサポート製品を提供することができます。サポート製品にサインアップすると、デベロッパーはお客様に製品コードを渡します。お客様はそのコードをご自分の AMI に関連付ける必要があります。これにより、デベロッパーは、ユーザーのインスタンスがサポート対象であることを確認できます。また、お客様が製品からインスタンスを実行すると、デベロッパーが定めた製品の利用規約にしたがい、お客様に課金されます。

**制限事項**
+ 製品コード属性は、一度設定すると、変更したり削除したりすることはできません。
+ リザーブドインスタンス とともにサポート製品を使用することはできません。お客様は常に、サポート製品の販売者が指定した価格を支払います。

------
#### [ AWS CLI ]

**製品コードを AMI に関連付けるには**  
[modify-image-attribute](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-image-attribute.html) コマンドを使用します。

```
aws ec2 modify-image-attribute \
    --image-id ami-0abcdef1234567890 \
    --product-codes "cdef1234abc567def8EXAMPLE"
```

------
#### [ PowerShell ]

**製品コードを AMI に関連付けるには**  
[Edit-EC2ImageAttribute](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2ImageAttribute.html) コマンドレットを使用します。

```
Edit-EC2ImageAttribute `
    -ImageId ami-0abcdef1234567890 `
    -ProductCode "cdef1234abc567def8EXAMPLE"
```

------

## 有料およびサポートされる AMI の請求書
<a name="using-paid-amis-bills"></a>

有料またはサポートされた AMI の使用料金がお客様のクレジットカードに請求され、その金額を記載した E メールが毎月末に届きます。これは通常の Amazon EC2 使用料金とは別に請求されます。詳細については、*AWS Marketplace 購入者ガイド*の「[製品の支払い](https://docs.aws.amazon.com/marketplace/latest/buyerguide/buyer-paying-for-products.html)」をご参照ください。

# AWS Marketplace サブスクリプションを管理する
<a name="marketplace-manage-subscriptions"></a>

AWS Marketplace ウェブサイトでは、サブスクリプションの詳細の確認、使用に関するベンダー指示の表示、サブスクリプションの管理などを行うことができます。

## サブスクリプションの詳細を確認する
<a name="check-sub-details"></a>

**サブスクリプションの詳細を確認するには**

1.  [AWS Marketplace](https://aws.amazon.com/marketplace) にログインします。

1. [**Your マーケットプレイス Account**] を選択してください。

1. [**Manage your software subscriptions**] を選択してください。

1. 現在のすべてのサブスクリプションが表示されます。実行中のインスタンスに接続するためのユーザー名など、製品の使用に関する特定の手順を表示するには、**[使用手順]** を選択してください。

## サブスクリプションのキャンセル
<a name="cancel-sub"></a>

**注記**  
サブスクリプションをキャンセルしても、その AMI を使用して起動したインスタンスは終了されません。実行中のインスタンスについては、終了するまで引き続き料金が請求されます。サブスクリプションに対する料金の請求を停止するには、この AMI を使用して起動したすべてのインスタンスを終了する必要があります。
受信登録をキャンセルすると、その AMI からインスタンスを起動できなくなります。その AMI を再度使用するには、AWS Marketplace ウェブサイトまたは Amazon EC2 コンソールの起動ウィザードを使用して、その AMI を再度サブスクライブする必要があります。

**AWS Marketplace のサブスクリプションをキャンセルするには**

1. サブスクリプションに対する料金の請求を停止するには、サブスクリプションによって実行されていたすべてのインスタンスが終了していることを確認してください。
**警告**  
**インスタンスの終了は恒久的で、元に戻すことはできません。**  
インスタンスを終了すると、そのインスタンスには接続できなくなり、復元することもできません。アタッチされている Amazon EBS ボリュームで、終了時に削除されるように設定されているものも、すべて恒久的に削除され、復元できません。インスタンスストアボリュームに保存されているデータは、すべて恒久的に失われます。詳細については、「[インスタンスの終了方法](how-ec2-instance-termination-works.md)」を参照してください。  
インスタンスを終了する前に、終了後も保持する必要があるすべてのデータを永続的ストレージにバックアップしたことを確認してください。

   1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

   1. ナビゲーションペインで、[**インスタンス**] を選択してください。

   1. インスタンスを選択し、**[インスタンスの状態]**、**[インスタンスの終了 (削除)]** の順に選択してください。

   1. 確認を求めるメッセージが表示されたら、**[終了 (削除)]** を選択してください。

1. [AWS Marketplace](https://aws.amazon.com/marketplace) にログインし、[**自分の マーケットプレイス アカウント**] 、[**ソフトウェアサブスクリプションの管理**] の順に選択してください。

1. [**購読の取り消し**] を選択してください。取り消しの確認を求めるプロンプトが表示されます。

# Amazon EC2 AMI ライフサイクル
<a name="ami-lifecycle"></a>

Amazon マシンイメージ (AMI) は、インスタンスのセットアップと起動に必要なソフトウェアを提供するイメージです。インスタンスを起動するときは、AMI を指定する必要があります。Amazon が提供する AMI を使用するか、独自の AMI を作成できます。AMI は、インスタンスを起動する AWS リージョン に配置する必要があります。

AMI のライフサイクルには、AMI の作成、コピー、非推奨化、無効化、削除 (登録解除) が含まれます。

**AMI を作成する** Amazon は、インスタンスの起動に使用できる AMI を提供していますが、ニーズに合わせてカスタム AMI を作成することもできます。カスタム AMI を作成するには、既存の AMI からインスタンスを起動し、インスタンスをカスタマイズし (ソフトウェアのインストールやオペレーティングシステムの設定など）、インスタンスから AMI を作成します。インスタンスのカスタマイズはすべて AMI に保存されるため、新しい AMI から起動されたインスタンスにはこれらのカスタマイズが含まれます。

**Attestable AMI** EC2 インスタンスアテステーションをサポートする AMI を作成するには、「[構成証明可能 AMI](attestable-ami.md)」を参照してください。

**AMI をコピーする** AMI を使用してインスタンスを起動できるのは、AMI が配置されている AWS リージョン 内のみです。複数のリージョンで同じ設定でインスタンスを起動する必要がある場合は、AMI を他のリージョンにコピーします。

**AMI を非推奨にする** AMI を旧版または期限切れとしてマークするには、即時または将来の非推奨日を設定できます。非推奨の AMI は AMI リストに表示されませんが、AMI ID がわかっている場合、ユーザーとサービスは非推奨の AMI を引き続き使用できます。

**AMI を無効にする** AMI の使用を一時的に使用できないようにするには、AMI を無効にします。AAMI が無効になっていると、その AMI を使用して新しいインスタンスを起動できません。ただし、AMI を再度有効にすると、インスタンスを再度起動できるようになります。なお、AMI から既に起動されている既存のインスタンスは、AMI を無効にしても影響を受けません。

**AMI の登録解除 (削除)** AMI が不要になった場合は、登録を解除して、新しいインスタンスの起動に使用できなくなります。AMI が保持ルールと一致すると、AMI はごみ箱に移動し、保持期間が終了する前に復元できます。その後、AMI は完全に削除されます。保持ルールと一致しない場合、そのルールは直ちに完全に削除されます。AMI の登録を解除しても、AMI から起動された既存のインスタンスには影響しないことに注意してください。

**AMI ライフサイクルの自動化** Amazon Data Lifecycle Manager を使用して、Amazon EBS-backed AMI とそのバッキングスナップショットの作成、保持、コピー、非推奨、登録削除を自動化できます。EC2 Image Builder を使用して、カスタマイズされた AMI の作成、管理、デプロイを自動化することもできます。詳細については、「*Amazon EBS ユーザーガイド*」および「[EC2 Image Builder ユーザーガイド](https://docs.aws.amazon.com/imagebuilder/latest/userguide/what-is-image-builder.html)」の「[Automate backups with Amazon Data Lifecycle Manager](https://docs.aws.amazon.com/ebs/latest/userguide/snapshot-lifecycle.html)」を参照してください。

**Topics**
+ [AMI を作成する](creating-an-ami-ebs.md)
+ [Amazon S3-backed AMI を作成する](creating-an-ami-instance-store.md)
+ [Windows Sysprep を使用して AMI を作成する](ami-create-win-sysprep.md)
+ [AMI のコピー](CopyingAMIs.md)
+ [AMI を保存および復元する](ami-store-restore.md)
+ [AMI 祖先](ami-ancestry.md)
+ [API の使用](ec2-ami-usage.md)
+ [AMI を非推奨にする](ami-deprecate.md)
+ [AMI の無効化](disable-an-ami.md)
+ [AMI の登録解除](deregister-ami.md)

# Amazon EBS-backed AMI を作成する
<a name="creating-an-ami-ebs"></a>

Amazon EC2 インスタンスまたは Amazon EC2 インスタンスのルートボリュームのスナップショットから、独自の Amazon EBS-backed AMI を作成できます。

インスタンスから Amazon EBS-backed AMI を作成するには、既存の Amazon EBS-backed AMI を使用してインスタンスを起動することから開始します。この AMI は、例えば、AWS Marketplace から取得した AMI、[VM Import/Export](https://docs.aws.amazon.com/vm-import/latest/userguide/what-is-vmimport.html) を使用して作成した AMI、またはユーザーがアクセス可能なその他の任意の AMI です。特定の要件を満たすようにインスタンスをカスタマイズしたら、新しい AMI を作成して登録します。その後、新しい AMI を使用して、カスタマイズした新しいインスタンスを起動できます。

**注記**  
EC2 インスタンスアテステーションをサポートする AMI を作成するには、「[構成証明可能 AMI](attestable-ami.md)」を参照してください。

以下に説明された手順は、暗号化された Amazon Elastic Block Store (Amazon EBS) ボリューム (ルートボリュームを含む) でバックアップされた Amazon EC2 インスタンスにも、暗号化されていないボリューム同様に機能します。

AMI の作成プロセスは、Amazon S3-backed AMI の場合とは異なります。詳細については、「[Amazon S3-backed AMI を作成する](creating-an-ami-instance-store.md)」を参照してください。

**Topics**
+ [インスタンスからの AMI 作成の概要](#process-creating-an-ami-ebs)
+ [インスタンスから AMI を作成する](#how-to-create-ebs-ami)
+ [スナップショットから AMI を作成する](#creating-launching-ami-from-snapshot)

## インスタンスからの AMI 作成の概要
<a name="process-creating-an-ami-ebs"></a>

次の図は、実行中の EC2 インスタンスから Amazon EBS-backed AMI を作成するプロセスをまとめたものです。既存の AMI から開始して、インスタンスを起動してカスタマイズし、そこから新しい AMI を作成し、最後に新しい AMI のインスタンスを起動します。図表内の数字は、次の説明の数値と一致します。

![\[インスタンスから AMI を作成するワークフロー\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/images/running-instance.png)


**1 — AMI \$11: 既存の AMI から始める**  
作成する AMI に似た既存の AMI を検索します。例えば、AWS Marketplace から取得した AMI、[VM Import/Export](https://docs.aws.amazon.com/vm-import/latest/userguide/what-is-vmimport.html) を使用して作成した AMI、またはユーザーがアクセス可能なその他の任意の AMI です。この AMI を必要に応じてカスタマイズします。  
図表内の **EBS ルートボリュームスナップショット \$11** は、AMI が Amazon EBS-backed AMI であり、ルートボリュームに関する情報がこのスナップショットに格納されていることを示します。

**2 — 既存の AMI からインスタンスを起動する**  
AMI を設定する方法は、新しい AMI のベースとなる AMI からインスタンスを起動し、インスタンスをカスタマイズすることです (図表内の **3**)。次に、カスタマイズを含む新しい AMI を作成します (図表内の **4**)。

**3 — EC2 インスタンス \$11: インスタンスをカスタマイズする**  
インスタンスに接続し、必要に応じてカスタマイズします。新しい AMI には、これらのカスタマイズが含まれます。  
インスタンスで次のアクションを実行して、インスタンスをカスタマイズできます。  
+ ソフトウェアやアプリケーションをインストールする
+ データをコピーする
+ 起動時間を短縮するために一時ファイルの消去、ハードディスクのデフラグ、占有領域の開放処理を行います。
+ 追加の EBS ボリュームをアタッチする

**4 – イメージを作成する**  
インスタンスから AMI を作成する際に、Amazon EC2 がインスタンスをシャットダウンしてから AMI を作成するのは、インスタンス上のすべての動作を停止し、作成プロセス中に一貫した状態が保たれるようにするためです。インスタンスが一貫した状態にあり、適切に AMI を作成できる場合、インスタンスの電源を落として再起動しないように、Amazon EC2 に指定できます。XFS などの一部のファイルシステムでは、アクティビティのフリーズおよびフリーズ解除が可能なため、インスタンスを再起動しなくてもイメージを安全に作成できます。  
AMI 作成プロセスの間、Amazon EC2 はインスタンスのルートボリュームとインスタンスにアタッチされているその他の EBS ボリュームのスナップショットを作成します。[AMI の登録を解除](deregister-ami.md)してスナップショットを削除するまで、スナップショットは課金の対象となります。インスタンスにアタッチされるいずれかのボリュームが暗号化されている場合、新しい AMI は、Amazon EBS 暗号化をサポートするインスタンスでのみ正常に起動します。  
ボリュームのサイズによっては、AMI 作成プロセスの完了に数分かかる場合があります (最長で 24 時間かかることもあります)。AMI を作成する前に、ボリュームのスナップショットを作成しておくと、効率が向上する可能性があります。この方法では、AMI を作成する際に作成する必要があるのは小さい差分スナップショットのみになるため、プロセスがよりすばやく完了します (スナップショット作成の合計時間は同じです)。

**5 — AMI \$12: 新しい AMI**  
プロセスが完了すると、新しい AMI と、インスタンスのルートボリュームから作成されたスナップショット (**スナップショット \$12**) が得られます。ルートボリュームに加えて、インスタンスストアボリュームまたは EBS ボリュームをインスタンスに追加した場合、新しい AMI のブロックデバイスマッピングにこれらのボリュームの情報が含まれます。  
Amazon EC2 では AMI は自動的に登録されます。

**6 – 新しい AMI からインスタンスを起動する**  
新しい AMI を使用してインスタンスを起動できます。

**7 — EC2 インスタンス \$12: 新しいインスタンス**  
ユーザーが新しい AMI を使用してインスタンスを起動すると、Amazon EC2 はスナップショットを使用して、そのインスタンスのルートボリュームのために新しい EBS ボリュームを作成します。インスタンスのカスタマイズ時に、インスタンスストアボリュームまたは EBS ボリュームを追加した場合、新しい AMI のブロックデバイスマッピングにこれらのボリュームの情報が含まれ、新しい AMI から起動するインスタンスのブロックデバイスマッピングに自動的にこれらのボリュームの情報が含まれます。新しいインスタンスのブロックデバイスマッピングに指定されているインスタンスストアボリュームは新しく、AMI の作成に使用したインスタンスのインスタンスストアボリュームからのデータは含まれていません。EBS ボリュームのデータは永続的です。詳細については、[Amazon EC2 インスタンスでのボリュームのブロックデバイスマッピング](block-device-mapping-concepts.md) を参照してください。  
EBS-backed AMI から新しいインスタンスを作成する場合、本稼働環境に移す前にそのルートボリュームと追加 EBS ストレージの両方を初期化する必要があります。詳細については、「Amazon EBS ユーザーガイド」の「[Amazon EBS ボリュームの初期化](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-initialize.html)」を参照してください。

## インスタンスから AMI を作成する
<a name="how-to-create-ebs-ami"></a>

既存のインスタンスがある場合は、このインスタンスから AMI を作成できます。

------
#### [ Console ]

**AMI を作成するには**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開きます。

1. ナビゲーションペインで、[**インスタンス**] を選択してください。

1. AMI を作成するインスタンスを選択し、**[アクション]** 、**[イメージとテンプレート]** の順に選択し、**[イメージの作成]** をクリックしてください。
**ヒント**  
このオプションが無効になっている場合、そのインスタンスは Amazon EBS-backed インスタンスではありません。

1. **[イメージの作成]** ページで、次の情報を指定します。

   1. **[イメージ名]** に、最大 127 文字までイメージの一意の名前を入力してください。

   1. **[イメージの説明]** に、最大 255 文字までイメージの説明を入力します (オプション)。

   1. **[インスタンスを再起動]** の場合、チェックボックスをオンのまま (デフォルト) にするか、オフにします。
      + **[インスタンスを再起動]** がオンの場合、Amazon EC2 が新しい AMI を作成するとき、データの保管時にアタッチされたボリュームのスナップショットを取得できるようにインスタンスを再起動して、一貫性のある状態を維持します。
      + **[インスタンスを再起動]** をクリアすると、Amazon EC2 が新しい AMI を作成しても、インスタンスはシャットダウンおよび再起動されません。
**警告**  
**[インスタンスを再起動]** をクリアした場合は、作成されたイメージのファイルシステムの整合性は保証されません。

   1. **[インスタンスボリューム]** - 次のとおり、ルートボリュームを変更し、Amazon EBS およびインスタンスストアボリュームを追加できます。

      1. ルートボリュームは、最初の行で定義されます。
         + ルートボリュームのサイズを変更するには、[**サイズ**] に必要な値を入力してください。
         + [**終了時に削除**] を選択した場合、この AMI から作成されたインスタンスを終了すると、EBS ボリュームが削除されます。[**終了時に削除**] をオフにした場合は、インスタンスを終了しても、EBS ボリュームは削除されません。詳細については、[インスタンスの終了時にデータを保持する](preserving-volumes-on-termination.md) を参照してください。

      1. EBS ボリュームを追加するには、[**ボリューム追加**] を選択します (これにより、新しい行が追加されます)。**[ストレージタイプ]** で **[EBS]** を選択し、行のフィールドに入力してください。作成した AMI からインスタンスを起動すると、追加したボリュームは自動的にそのインスタンスにアタッチされます。空のボリュームはフォーマットしてマウントする必要があります。スナップショットベースのボリュームはマウントする必要があります。

      1. インスタンスストアボリュームを追加するには、「[Amazon EC2 AMI にインスタンスストアボリュームを追加する](adding-instance-storage-ami.md)を参照してください。その後新しい AMI からインスタンスを起動すると、追加されたボリュームは自動的に初期化されてマウントされます。これらのボリュームには、AMI の作成に使用された実行中のインスタンスのインスタンスストアボリュームのデータは含まれません。

   1. **スナップショットの送信先** – インスタンスボリュームが EBS ローカルスナップショットをサポートしているローカルゾーンにある場合は、AMI のスナップショットを作成する場所を選択します。
      + **AWS リージョン**: ボリュームのローカルゾーンの親リージョンにスナップショットを作成します。
      + **AWS ローカルゾーン**: ボリュームと同じローカルゾーンにスナップショットを作成します。
**注記**  
このオプションは、EBS ローカルスナップショットをサポートするローカルゾーンにのみ、インスタンスがローカルゾーンで作成された場合に限って表示されます。ボリュームがリージョンにある場合、このオプションは表示されず、スナップショットはボリュームと同じリージョンに自動作成されます。詳細については、「*Amazon EBS ユーザーガイド*」の「[Local snapshots in Local Zones](https://docs.aws.amazon.com/ebs/latest/userguide/snapshots-localzones.html)」を参照してください。
**重要**  
インスタンスのボリュームのスナップショットはすべて同じ場所に存在する必要があります。既存のスナップショットの場所を確認してください。選択した送信先とは別の場所に既存のスナップショットがある場合、AMI の作成は失敗します。

   1. **タグ** - AMI とスナップショットに同じタグを付けることも、異なるタグを付けることもできます。
      + AMI とスナップショットに*同じ*タグを付けるには、[**イメージとスナップショットに一緒にタグを付ける**] を選択してください。AMI と作成されるすべてのスナップショットには、同じタグが適用されます。
      + AMI とスナップショットに*異なる*タグを付けるには、[**イメージとスナップショットに個別にタグを付ける**] を選択してください。AMI と作成されるスナップショットには、異なるタグが適用されます。ただし、すべてのスナップショットに同じタグが付けられます。各スナップショットに異なるタグを付けることはできません。

      (オプション) タグを追加するには、[**Add tag**] を選択し、そのタグのキーと値を入力してください。各タグについて、これを繰り返します。

   1. AMI を作成する準備ができたら、**[イメージの作成]** を選択してください。

1. 作成中に AMI のステータスを表示するには

   1. ナビゲーションペインで **[AMI]** を選択してください。

   1. フィルタを **[自分が所有]** に設定し、リストから AMI を探します。

      最初は、ステータスは `pending` ですが、数分後 `available` に変わります。

1. (オプション) 新しい AMI に作成されたスナップショットを表示するには:

   1. 前のステップで特定した AMI の ID をメモします。

   1. ナビゲーションペインで、[**スナップショット**] を選択してください。

   1. フィルターを **[自分が所有]** に設定し、新しい AMI ID のスナップショットを **[説明]** 列で検索します。

      ユーザーがこの AMI からインスタンスを起動すると、Amazon EC2 はこのスナップショットを使用して、インスタンスのルートボリュームを作成します。

------
#### [ AWS CLI ]

**AMI を作成するには**  
[create-image](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-image.html) コマンドを使用します。

```
aws ec2 create-image \
    --instance-id i-1234567890abcdef0 \
    --name "my-web-server" \
    --description "My web server image" \
    --no-reboot
```

------
#### [ PowerShell ]

**AMI を作成するには**  
[New-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2Image.html) コマンドレットを使用します。

```
New-EC2Image `
    -InstanceId i-1234567890abcdef0 ` 
    -Name "my-web-server" `
    -Description "My web server image" `
    -NoReboot $true
```

------

## スナップショットから AMI を作成する
<a name="creating-launching-ami-from-snapshot"></a>

インスタンスのルートボリュームのスナップショットがある場合、このスナップショットから AMI を作成できます。

**注記**  
ほとんどの場合、Windows、RedHat、SUSE、SQL Server の AMI には、正しいライセンス情報が存在する必要があります。詳細については、「[AMI の請求情報について](ami-billing-info.md)」を参照してください。スナップショットから AMI を作成する場合、`RegisterImage` オペレーションはスナップショットのメタデータから正しい請求情報を取得しますが、これには適切なメタデータが必要です。正しい請求情報が適用されたかどうかを確認するには、新しい AMI の **[プラットフォームの詳細]** フィールドを確認します。フィールドが空であるか、所定のオペレーティングシステムコード (Windows、RedHat、SUSE、SQL など) と一致しない場合、AMI の作成は失敗しているため、この AMI を破棄して「[インスタンスから AMI を作成する](#how-to-create-ebs-ami)」の手順に従う必要があります。

------
#### [ Console ]

**スナップショットから AMI を作成するには**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開きます。

1. ナビゲーションペインで、[**スナップショット**] を選択してください。

1. AMI の作成元になるスナップショットを選択してから、**[アクション]**、**[スナップショットからイメージ作成]** の順に選択してください。

1. **[スナップショットからイメージを作成]** ページで、次の情報を指定します。

   1. **[イメージ名]** に、イメージのわかりやすい名前を入力してください。

   1. **[説明]** に、イメージの簡単な説明を入力してください。

   1. **[アーキテクチャ]** で、イメージアーキテクチャを選択してください。32 ビットの場合は **[i386]**、64 ビットの場合は **[x86\$164]**、64 ビット ARM の場合は **[arm64]**、64 ビット macOS の場合は **[x86\$164]** をそれぞれ選択してください。

   1. **[ルートデバイス名]** に、ルートボリュームに使用するデバイス名を入力してください。詳細については、「[Amazon EC2 インスタンス上のボリュームのデバイス名](device_naming.md)」を参照してください。

   1. **[仮想化タイプ]** で、この AMI から起動されたインスタンスで使用する仮想化タイプを選択してください。詳細については、[仮想化タイプ](ComponentsAMIs.md#virtualization_types) を参照してください。

   1. (準仮想化の場合のみ) **[カーネル ID]** で、イメージのオペレーティングシステムのカーネルを選択してください。インスタンスのルートボリュームのスナップショットを使用している場合、元のインスタンスと同じカーネル ID を選択してください。不明な場合は、デフォルトのカーネルを使用してください。

   1. (準仮想仮想化の場合のみ) **[RAM ディスク ID]** で、イメージの RAM ディスクを選択してください。カーネルを選択した場合は、サポートするドライバーとともに特定の RAM ディスクを選択しなければならない可能性があります。

   1. **[ブートモード]** では、イメージのブートモードを選択するか **[デフォルトを使用]** を選択し、この AMI でインスタンスを起動したときにインスタンスタイプでサポートされているブートモードで起動するようにします。詳細については、「[Amazon EC2 AMI のブートモードを設定する](set-ami-boot-mode.md)」を参照してください。

   1. (オプション) **[ブロックデバイスマッピング]** で、ルートボリュームをカスタマイズし、データボリュームを追加します。

      ボリュームごとに、サイズ、タイプ、パフォーマンス特性、終了時の削除の動作、および暗号化ステータスを指定できます。ルートボリュームについては、サイズをスナップショットのサイズより小さくすることはできません。ボリュームタイプには、汎用 SSD `gp3` がデフォルトで選択されています。

   1. (オプション) **[タグ]** で、新しい AMI に 1 つ以上のタグを追加できます。(オプション) タグを追加するには、[**タグ追加**] を選択し、そのタグのキーと値を入力してください。各タグについて、これを繰り返します。

   1. AMI を作成する準備ができたら、**[イメージの作成]** を選択してください。

1. (Windows、RedHat、SUSE、SQL Server のみ) 正しい請求情報が適用されたかどうかを確認するには、新しい AMI の **[プラットフォームの詳細]** フィールドを確認します。フィールドが空であるか、所定のオペレーティングシステムコード (**Windows** や **RedHat** など) と一致しない場合、AMI の作成は失敗しているため、この AMI を破棄して「[インスタンスから AMI を作成する](#how-to-create-ebs-ami)」の手順に従う必要があります。

------
#### [ AWS CLI ]

**AWS CLI を使用してスナップショットから AMI を作成するには**  
[register-image](https://docs.aws.amazon.com/cli/latest/reference/ec2/register-image.html) コマンドを使用します。

```
aws ec2 register-image \
    --name my-image \
    --root-device-name /dev/xvda \
    --block-device-mappings DeviceName=/dev/xvda,Ebs={SnapshotId=snap-0db2cf683925d191f}
```

------
#### [ PowerShell ]

**PowerShell を使用してスナップショットから AMI を作成するには**  
[Register-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Register-EC2Image.html) コマンドレットを使用します。

```
$block = @{SnapshotId=snap-0db2cf683925d191f}
Register-EC2Image `
    -Name my-image `
    -RootDeviceName /dev/xvda `
    -BlockDeviceMapping @{DeviceName="/dev/xvda";Ebs=$block}
```

------

# Amazon S3-backed AMI を作成する
<a name="creating-an-ami-instance-store"></a>

インスタンスの起動時に指定する AMI によってルートボリュームのタイプが決まります。

Amazon S3-backed Linux AMI を作成するには、既存の Amazon S3-backed Linux AMI から起動したインスタンスから始めます。ニーズに合わせてインスタンスをカスタマイズしたら、ボリュームをバンドルし、新しい AMI を登録します。新しい AMI を使用して、カスタマイズした新しいインスタンスを起動できます。

Windows AMI はルートボリュームのインスタンスストアをサポートしていないため、Amazon S3-backed Windows AMI を作成することはできません。

**重要**  
インスタンスストアボリュームをルートボリュームとしてサポートし、Amazon S3-backed AMI を必要とするインスタンスタイプは C1、C3、D2、I2、M1、M2、M3、R3、X1 のみです。

AMI の作成プロセスは、Amazon EBS-backed AMI の場合とは異なります。詳細については、「[Amazon EBS-backed AMI を作成する](creating-an-ami-ebs.md)」を参照してください。

**Topics**
+ [AMI 作成の概要](#process-creating-an-ami-instance-store)
+ [前提条件](#bundle-ami-prerequisites)
+ [Amazon Linux インスタンスから AMI を作成する](#amazon_linux_instructions)
+ [Amazon EC2 AMI ツールのセットアップ](set-up-ami-tools.md)
+ [Amazon EC2 AMI ツールリファレンス](ami-tools-commands.md)
+ [Amazon S3-backed AMI を EBS-backed AMI に変換する](Using_ConvertingS3toEBS.md)

## AMI 作成の概要
<a name="process-creating-an-ami-instance-store"></a>

次の図は、インスタンスストアのルートボリュームを持つインスタンスから AMI を作成するプロセスをまとめたものです。

![\[Amazon S3-backed AMI の作成\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/images/ami_create_instance_store.png)


最初に、作成する AMI と同様の AMI からインスタンスを起動します。インスタンスに接続し、それをカスタマイズできます。インスタンスのカスタマイズが終わったら、それをバンドルできます。バンドルプロセスが完了するには数分間かかります。プロセスが完了すると、イメージマニフェスト (`image.manifest.xml`) とルートボリューム用のテンプレートを含むファイル (`image.part.`*xx*) で構成されるバンドルが作成されます。次に、バンドルを Amazon S3 バケットにアップロードし、AMI を登録します。

**注記**  
Amazon S3-backed Linux AMI の S3 バケットにオブジェクトをアップロードするには、バケットで ACL を有効にする必要があります。有効にしない場合、Amazon EC2 はアップロードするオブジェクトに ACL を設定できません。宛先のバケットが S3 オブジェクトの所有権のバケット所有者強制設定を使用している場合、ACL が無効になるため、この方法は使えません。詳細については、「[バケットのオブジェクト所有権のコントロールと ACL の無効化](https://docs.aws.amazon.com/AmazonS3/latest/userguide/about-object-ownership.html)」を参照してください。

お客様が新しい AMI を使用してインスタンスを起動すると、Amazon はユーザーが Amazon S3 にアップロードしたバンドルを使用してインスタンスのルートボリュームを作成します。Amazon S3 のバンドルで使用されるストレージ領域については、お客様がその領域を削除するまでアカウントに料金が発生します。詳細については、「[Amazon EC2 AMI の登録を解除する](deregister-ami.md)」を参照してください。

ルートボリュームに加えて、インスタンスストアボリュームをインスタンスに追加した場合、新しい AMI のブロックデバイスマッピングにこれらのボリュームの情報が含まれ、新しい AMI から起動するインスタンスのブロックデバイスマッピングに自動的にこれらのボリュームの情報が含まれます。詳細については、「[Amazon EC2 インスタンスでのボリュームのブロックデバイスマッピング](block-device-mapping-concepts.md)」を参照してください。

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

AMI を作成するには、最初に次のタスクを完了する必要があります。
+ AMI ツールをインストールします。詳細については、[Amazon EC2 AMI ツールのセットアップ](set-up-ami-tools.md) を参照してください。
+ AWS CLI をインストールします。詳細については、「[AWS CLIを使い始める](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html)」を参照してください。
+ バンドルに S3 バケットがあり、バケットに ACL が有効になっていることを確認します。ACL の設定の詳細については、「[ACL の設定](https://docs.aws.amazon.com/AmazonS3/latest/userguide/managing-acls.html)」を参照してください。
  + AWS マネジメントコンソール を使用して S3 バケットを作成するには、[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) で Amazon S3 コンソールを開き、**[バケツ作成]** を選択してください。
  + AWS CLI で S3 バケットを作成するには、「[mb](https://docs.aws.amazon.com/cli/latest/reference/s3/mb.html)」コマンドを使用できます。インストールしている AMI ツールのバージョンが 1.5.18 以降の場合は、`ec2-upload-bundle` コマンドを使用して S3 バケットを作成することもできます。詳細については、「[ec2-upload-bundle](ami-tools-commands.md#ami-upload-bundle)」を参照してください。
+ バンドル内のファイルが S3 バケットで暗号化されていないことを確認します。AMI に暗号化が必要な場合は、代わりに EBS-backed AMI を使用できます。詳細については、「[EBS-backed AMI での暗号化の利用](AMIEncryption.md)」を参照してください。
+ AWS アカウント ID があることを確認します。詳細については、「AWS アカウント管理リファレンスガイド」の「[AWS アカウント 識別表示](https://docs.aws.amazon.com/accounts/latest/reference/manage-acct-identifiers.html)」を参照してください。
+ AWS CLI を使用するのに必要な認証情報があることを確認します。詳細については、*AWS Command Line Interface ユーザーガイド*の「[AWS CLI に対する認証とアクセスコントロール](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-authentication.html)」を参照してください。
+ X.509 証明書および対応するプライベートキーがあることを確認します。
  + X.509 証明書を作成する必要がある場合は、「[署名証明書の管理](set-up-ami-tools.md#ami-tools-managing-certs)」を参照してください。X.509 証明書とプライベートキーは、AMI の暗号化/復号に使用されます。
  + [中国 (北京)] `$EC2_AMITOOL_HOME/etc/ec2/amitools/cert-ec2-cn-north-1.pem` 証明書を使用します。
  + [AWS GovCloud (米国 – 西部)] `$EC2_AMITOOL_HOME/etc/ec2/amitools/cert-ec2-gov.pem` 証明書を使用します。
+ インスタンスに接続し、カスタマイズします。例えば、ソフトウェアとアプリケーションをインストールしたり、データをコピーしたり、一時ファイルを削除したり、Linux 設定を変更したりできます。

## Amazon Linux インスタンスから AMI を作成する
<a name="amazon_linux_instructions"></a>

次の手順では、Amazon Linux 1 を実行するインスタンスストアのルートボリュームを持つインスタンスから AMI を作成する方法について説明します。他の Linux ディストリビューションを実行するインスタンスでは機能しない可能性があります。

**AMI ツールの使用準備を整えるには (HVM インスタンスのみ)**

1. AMI ツールでは、GRUB のレガシーが正常に起動する必要があります。次のコマンドを使用して GRUB をインストールします。

   ```
   [ec2-user ~]$ sudo yum install -y grub
   ```

1. 次のコマンドを使用して、パーティション管理パッケージをインストールします。

   ```
   [ec2-user ~]$ sudo yum install -y gdisk kpartx parted
   ```

**インスタンスストアのルートボリュームを持つ Amazon Linux インスタンスから AMI を作成するには**

この手順では、「[前提条件](#bundle-ami-prerequisites)」に記載された前提条件が満たされていることを前提としています。

次のコマンドでは、*ユーザー入力プレースホルダー*をユーザー自身の情報で置き換えます。

1. インスタンスに認証情報をアップロードします。Amazon ではこれらの認証情報を使用して、お客様と Amazon EC2 だけがお客様の AMI にアクセスできるようにします。

   1. 次のように、認証情報のための一時ディレクトリをインスタンスに作成します。

      ```
      [ec2-user ~]$ mkdir /tmp/cert
      ```

      それにより、作成したイメージから認証情報を除外できます。

   1. [scp](linux-file-transfer-scp.md) などの安全なコピーツールを使用して、コンピュータからインスタンスの `/tmp/cert` ディレクトリに X.509 証明書と対応するプライベートキーをコピーします。次の `-i my-private-key.pem` コマンドの **scp** オプションは、X.509 プライベートキーではなく、SSH でインスタンスに接続するために使用するプライベートキーです。次に例を示します。

      ```
      you@your_computer:~ $ scp -i my-private-key.pem /path/to/pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem /path/to/cert-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem ec2-user@ec2-203-0-113-25.compute-1.amazonaws.com:/tmp/cert/
      pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem  100%  717     0.7KB/s   00:00
      cert-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem  100%  685     0.7KB/s   00:00
      ```

   または、これらがプレーンテキストファイルの場合、証明書とキーをテキストエディタで開き、コンテンツを `/tmp/cert` の新しいファイルにコピーできます。

1. <a name="step_with_bundle_path_amazon_linux"></a>インスタンス内から [ec2-bundle-vol](ami-tools-commands.md#ami-bundle-vol) コマンドを実行して、Amazon S3 にアップロードするバンドルを準備します。`-e` オプションを指定して、認証情報を保存するディレクトリを除外します。デフォルトでは、バンドルプロセスで機密情報を含んでいる可能性があるファイルを除外します。ファイルには、`*.sw`、`*.swo`、`*.swp`、`*.pem`、`*.priv`、`*id_rsa*`、`*id_dsa*`、`*.gpg`、`*.jks`、`*/.ssh/authorized_keys`、`*/.bash_history` などがあります。これらのファイルをすべて含めるには、`--no-filter` オプションを使用します。これらのファイルの一部を含めるには、`--include` オプションを使用します。
**重要**  
AMI バンドルプロセスは、デフォルトで、ルートボリュームを表す `/tmp` ディレクトリに、圧縮され暗号化された一連のファイルを作成します。バンドルを格納するのに十分な空きディスク領域が `/tmp` にない場合、`-d /path/to/bundle/storage` オプションを使用して、バンドルを格納する別の場所を指定する必要があります。インスタンスによっては、エフェメラルストレージが `/mnt` または `/media/ephemeral0` にマウントされて使用可能になっている場合があります。または、バンドルを格納する新しい Amazon EBS ボリュームを作成、アタッチ、およびマウントすることもできます。詳細については、「Amazon EBS ユーザーガイド」の「[Amazon EKS ボリュームの作成](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-creating-volume.html)」を参照してください。

   1. **ec2-bundle-vol** コマンドは、root として実行する必要があります。ほとんどのコマンドで、**sudo** を使用することでアクセス許可を昇格させることができますが、この場合は、環境変数を維持するために **sudo -E su** を実行する必要があります。

      ```
      [ec2-user ~]$ sudo -E su
      ```

      これで、bash プロンプトにより root ユーザーとして識別されるようになったことと、root シェルにいることを示すハッシュタグにドル記号が置き換えられたことに注意してください。

      ```
      [root ec2-user]#
      ```

   1. AMI のバンドルを作成するには、次のように [ec2-bundle-vol](ami-tools-commands.md#ami-bundle-vol) コマンドを実行します。

      ```
      [root ec2-user]# ec2-bundle-vol -k /tmp/cert/pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem -c /tmp/cert/cert-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem -u 123456789012 -r x86_64 -e /tmp/cert --partition gpt
      ```
**注記**  
中国 (北京) および AWS GovCloud (米国 – 西部) リージョンについては、`--ec2cert` パラメータを使用し、[前提条件](#bundle-ami-prerequisites)に従って証明書を指定します。

      イメージの作成には数分かかります。このコマンドが完了したら、`/tmp` (またはデフォルト以外の) ディレクトリにバンドルが含まれます (`image.manifest.xml`、および複数の `image.part.`*xx* ファイル)。

   1. root シェルを終了します。

      ```
      [root ec2-user]# exit
      ```

1. (オプション) インスタンスストアをさらに追加するには、AMI 用の `image.manifest.xml` ファイルで、ブロックデバイスマッピングを編集します。詳細については、[Amazon EC2 インスタンスでのボリュームのブロックデバイスマッピング](block-device-mapping-concepts.md) を参照してください。

   1. `image.manifest.xml` ファイルのバックアップを作成します。

      ```
      [ec2-user ~]$ sudo cp /tmp/image.manifest.xml /tmp/image.manifest.xml.bak
      ```

   1. `image.manifest.xml` ファイルの形式を変更し、読み取りと編集が簡単になるようにします。

      ```
      [ec2-user ~]$ sudo xmllint --format /tmp/image.manifest.xml.bak > /tmp/image.manifest.xml
      ```

   1. テキストエディタで `image.manifest.xml` のブロックデバイスマッピングを編集します。次の例は、`ephemeral1` インスタンスストアボリュームの新しいエントリを示しています。
**注記**  
無効な種類のファイルの一覧については、「[ec2-bundle-vol](ami-tools-commands.md#ami-bundle-vol)」を参照してください。

      ```
          <block_device_mapping>
            <mapping>
              <virtual>ami</virtual>
              <device>sda</device>
            </mapping>
            <mapping>
              <virtual>ephemeral0</virtual>
              <device>sdb</device>
            </mapping>
            <mapping>
              <virtual>ephemeral1</virtual>
              <device>sdc</device>
            </mapping>
            <mapping>
              <virtual>root</virtual>
              <device>/dev/sda1</device>
            </mapping>
          </block_device_mapping>
      ```

   1. `image.manifest.xml` ファイルを保存し、テキストエディタを終了します。

1. バンドルを Amazon S3 にアップロードするには、次のように [ec2-upload-bundle](ami-tools-commands.md#ami-upload-bundle) コマンドを実行します。

   ```
   [ec2-user ~]$ ec2-upload-bundle -b amzn-s3-demo-bucket/bundle_folder/bundle_name -m /tmp/image.manifest.xml -a your_access_key_id -s your_secret_access_key
   ```
**重要**  
US East (N. Virginia) 以外のリージョンで AMI を登録するには、`--region` オプションと、すでにターゲットリージョンに存在するバケットパス、またはターゲットリージョンで作成できる一意のバケットパスの両方でターゲットリージョンを指定する必要があります。

1. (オプション) バンドルを Amazon S3 にアップロードしたら、次の `/tmp` コマンドを使用して、インスタンスの **rm** ディレクトリからバンドルを削除できます。

   ```
   [ec2-user ~]$ sudo rm /tmp/image.manifest.xml /tmp/image.part.* /tmp/image
   ```
**重要**  
`-d /path/to/bundle/storage` で [Step 2](#step_with_bundle_path_amazon_linux) オプションを使用してパスを指定した場合は、`/tmp` ではなくそのパスを使用します。

1. AMI を登録するには、次のように [register-image](https://docs.aws.amazon.com/cli/latest/reference/ec2/register-image.html) コマンドを実行します。

   ```
   [ec2-user ~]$ aws ec2 register-image --image-location amzn-s3-demo-bucket/bundle_folder/bundle_name/image.manifest.xml --name AMI_name --virtualization-type hvm
   ```
**重要**  
[ec2-upload-bundle](ami-tools-commands.md#ami-upload-bundle) コマンドでリージョンを以前に指定した場合は、このコマンドでもう一度そのリージョンを指定します。

# Amazon EC2 AMI ツールのセットアップ
<a name="set-up-ami-tools"></a>

AMI ツールを使用して、Amazon S3-backed Linux AMI を作成および管理できます。ツールを使用するには、Linux インスタンスにインストールする必要があります。AMI ツールは RPM として使用できるとともに、RPM をサポートしていない Linux ディストリビューションでは .zip ファイルとして使用できます。

**RPM を使用して AMI ツールを設定するには**

1. yum などの Linux ディストリビューション用のパッケージマネージャを使用して Ruby をインストールします。次に例を示します。

   ```
   [ec2-user ~]$ sudo yum install -y ruby
   ```

1. wget や curl などのツールを使用して RPM ファイルをダウンロードします。次に例を示します。

   ```
   [ec2-user ~]$ wget https://s3.amazonaws.com/ec2-downloads/ec2-ami-tools.noarch.rpm
   ```

1. 次のコマンドを使用して RPM ファイルの署名を確認する:

   ```
   [ec2-user ~]$ rpm -K ec2-ami-tools.noarch.rpm
   ```

   上のコマンドは、ファイルの SHA1 および MD5 ハッシュが `OK.` であることを示しています。ハッシュが `NOT OK` であることをコマンドが示している場合、次のコマンドを使用してファイルのヘッダー SHA1 および MD5 ハッシュを表示します。

   ```
   [ec2-user ~]$ rpm -Kv ec2-ami-tools.noarch.rpm
   ```

   次に、ファイルのヘッダー SHA1 および MD5 ハッシュを、以下の検証済み AMI ツールハッシュと比較し、ファイルの正統性を確認します。
   + ヘッダー SHA1: a1f662d6f25f69871104e6a62187fa4df508f880
   + MD5: 9faff05258064e2f7909b66142de6782

   ファイルのヘッダー SHA1 および MD5 ハッシュが検証済み AMI ツールハッシュと一致する場合、次のステップに進みます。

1. 次のコマンドを使用して RPM をインストールします。

   ```
   [ec2-user ~]$ sudo yum install ec2-ami-tools.noarch.rpm
   ```

1. [ec2-ami-tools-version](ami-tools-commands.md#ami-tools-version) コマンドを使用してインストールした AMI ツールを検証します。

   ```
   [ec2-user ~]$ ec2-ami-tools-version
   ```
**注記**  
[cannot load such file -- ec2/amitools/version (LoadError)] などのロードエラーを受信した場合は、次のステップを実行し、AMI ツールをインストールした場所を `RUBYLIB` パスに追加します。

1. (オプション) 前のステップでエラーが発生した場合、AMI ツールをインストールした場所を `RUBYLIB` パスに追加します。

   1. 追加するパスを調べるには、次のコマンドを実行します。

      ```
      [ec2-user ~]$ rpm -qil ec2-ami-tools | grep ec2/amitools/version
      /usr/lib/ruby/site_ruby/ec2/amitools/version.rb
      /usr/lib64/ruby/site_ruby/ec2/amitools/version.rb
      ```

      上記の例では、以前のロードエラーから失われたファイルは `/usr/lib/ruby/site_ruby` および `/usr/lib64/ruby/site_ruby` にあります。

   1. 前のステップの場所を `RUBYLIB` パスに追加します。

      ```
      [ec2-user ~]$ export RUBYLIB=$RUBYLIB:/usr/lib/ruby/site_ruby:/usr/lib64/ruby/site_ruby
      ```

   1. [ec2-ami-tools-version](ami-tools-commands.md#ami-tools-version) コマンドを使用してインストールした AMI ツールを検証します。

      ```
      [ec2-user ~]$ ec2-ami-tools-version
      ```

**zip ファイルを使用して AMI ツールを設定するには**

1. Ruby をインストールし、**apt-get** など、Linux ディストリビューション用のパッケージマネージャを使用して解凍します。次に例を示します。

   ```
   [ec2-user ~]$ sudo apt-get update -y && sudo apt-get install -y ruby unzip
   ```

1. wget や curl などのツールを使用して .zip ファイルをダウンロードします。次に例を示します。

   ```
   [ec2-user ~]$ wget https://s3.amazonaws.com/ec2-downloads/ec2-ami-tools.zip
   ```

1. `/usr/local/ec2` など、適切なインストールディレクトリにファイルを解凍します。

   ```
   [ec2-user ~]$ sudo mkdir -p /usr/local/ec2
   $ sudo unzip ec2-ami-tools.zip -d /usr/local/ec2
   ```

   .zip ファイルには、フォルダ (ec2-ami-tools-*x*.*x*.*x*) が含まれます。ここで、*x*.*x*.*x* はツールのバージョン番号 (例: `ec2-ami-tools-1.5.7`) です。

1. `EC2_AMITOOL_HOME` 環境変数を、ツールのインストールディレクトリに設定します。次に例を示します。

   ```
   [ec2-user ~]$ export EC2_AMITOOL_HOME=/usr/local/ec2/ec2-ami-tools-x.x.x
   ```

1. ツールを `PATH` 環境変数に追加します。次に例を示します。

   ```
   [ec2-user ~]$ export PATH=$EC2_AMITOOL_HOME/bin:$PATH
   ```

1. [ec2-ami-tools-version](ami-tools-commands.md#ami-tools-version) コマンドを使用してインストールした AMI ツールを検証できます。

   ```
   [ec2-user ~]$ ec2-ami-tools-version
   ```

## 署名証明書の管理
<a name="ami-tools-managing-certs"></a>

AMI ツールの特定のコマンドでは、デジタル署名用証明書 (X.509 証明書とも呼ばれる) が必要です。証明書を作成し、AWS にアップロードする必要があります。例えば、証明書の作成に OpenSSL などのサードパーティ製のツールを使用できます。

**デジタル署名用証明書を作成するには**

1. OpenSSL をインストールおよび設定します。

1. プライベートキーを `openssl genrsa` コマンドを使用して作成し、出力を `.pem` ファイルで保存します。2048 ビットまたは 4096 ビット RSA キーの作成を推奨しています。

   ```
   openssl genrsa 2048 > private-key.pem
   ```

1. `openssl req` コマンドを使用して、証明書を作成します。

   ```
   openssl req -new -x509 -nodes -sha256 -days 365 -key private-key.pem -outform PEM -out certificate.pem
   ```

証明書を AWS にアップロードするには、[upload-signing-certificate](https://docs.aws.amazon.com/cli/latest/reference/iam/upload-signing-certificate.html) コマンドを使用します。

```
aws iam upload-signing-certificate --user-name user-name --certificate-body file://path/to/certificate.pem
```

ユーザーの証明書を一覧表示するには、[list-signing-certificates](https://docs.aws.amazon.com/cli/latest/reference/iam/list-signing-certificates.html) コマンドを使用します。

```
aws iam list-signing-certificates --user-name user-name
```

ユーザーのデジタル署名用証明書を無効化または再有効化するには、[update-signing-certificate](https://docs.aws.amazon.com/cli/latest/reference/iam/update-signing-certificate.html) コマンドを使用します。次のコマンドは証明書を無効にします。

```
aws iam update-signing-certificate --certificate-id OFHPLP4ZULTHYPMSYEX7O4BEXAMPLE --status Inactive --user-name user-name
```

証明書を削除するには、[delete-signing-certificate](https://docs.aws.amazon.com/cli/latest/reference/iam/delete-signing-certificate.html) コマンドを使用します。

```
aws iam delete-signing-certificate --user-name user-name --certificate-id OFHPLP4ZULTHYPMSYEX7O4BEXAMPLE
```

# Amazon EC2 AMI ツールリファレンス
<a name="ami-tools-commands"></a>

AMI ツールコマンドを使用して、Amazon S3-backed Linux AMI を作成および管理できます。ツールをセットアップする方法は、「[Amazon EC2 AMI ツールのセットアップ](set-up-ami-tools.md)」を参照してください。

アクセスキーについては、「*IAM ユーザーガイド*」の「[Managing access keys for IAM users](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html)」を参照してください。

**Topics**
+ [ec2-ami-tools-version](#ami-tools-version)
+ [ec2-bundle-image](#ami-bundle-image)
+ [ec2-bundle-vol](#ami-bundle-vol)
+ [ec2-delete-bundle](#ami-delete-bundle)
+ [ec2-download-bundle](#ami-download-bundle)
+ [ec2-migrate-manifest](#ami-migrate-manifest)
+ [ec2-unbundle](#ami-unbundle)
+ [ec2-upload-bundle](#ami-upload-bundle)
+ [AMI ツール用の一般的なオプション](#common-args-ami)

## ec2-ami-tools-version
<a name="ami-tools-version"></a>

### 説明
<a name="ami-tools-version-description"></a>

AMI ツールのバージョンについて説明します。

### 構文
<a name="ami-tools-version-request"></a>

**ec2-ami-tools-version**

### Output
<a name="ami-tools-version-output"></a>

バージョン情報。

### 例
<a name="ami-tools-version-response"></a>

このコマンド例では、使用中の AMI ツールのバージョン情報を表示します。

```
[ec2-user ~]$ ec2-ami-tools-version
1.5.2 20071010
```

## ec2-bundle-image
<a name="ami-bundle-image"></a>

### 説明
<a name="bundle-image-description"></a>

ループバックファイル内に作成されるオペレーティングシステムイメージから Amazon S3-backed Linux AMI を作成します。

### 構文
<a name="bundle-image-request"></a>

****ec2-bundle-image** -c *path* -k *path* -u *account* -i *path* [-d *path*] [--ec2cert *path*] [-r *architecture*] [--productcodes *code1*,*code2*,...] [-B *mapping*] [-p *prefix*]** 

### オプション
<a name="bundle-image-parameters"></a>

`-c, --cert` *パス*  
ユーザーの PEM エンコード RSA パブリックキー証明書ファイル。  
必須: はい

`-k, --privatekey` *パス*  
PEM エンコードされる RSA キーファイルへのパス。このバンドルをバンドル解除するには、このキーを指定する必要があるため、安全な場所に保管してください。このキーは AWS アカウントに登録されている必要はありません。  
必須: はい

`-u, --user ` *アカウント*  
ダッシュのない、ユーザーの AWS アカウント ID。  
必須: はい

`-i, --image` *パス*  
バンドルするイメージへのパス。  
必須: はい

`-d, --destination` *パス*  
バンドルを作成するディレクトリ。  
デフォルト: `/tmp`  
必須: いいえ

`--ec2cert` *パス*  
イメージマニフェストの暗号化に使用される Amazon EC2 X.509 パブリックキー証明書へのパス。  
`us-gov-west-1` および `cn-north-1` リージョンではデフォルト以外のパブリックキー証明書を使用し、その証明書へのパスは、このオプションで指定する必要があります。証明書へのパスは、AMI ツールのインストール方法によって異なります。Amazon Linux の場合、証明書の場所は `/opt/aws/amitools/ec2/etc/ec2/amitools/` です。「[Amazon EC2 AMI ツールのセットアップ](set-up-ami-tools.md)」の RPM または ZIP ファイルから AMI ツールをインストールした場合、証明書の場所は `$EC2_AMITOOL_HOME/etc/ec2/amitools/` です。  
必須: `us-gov-west-1` および `cn-north-1` リージョンのみ。

`-r, --arch` *アーキテクチャ*  
イメージアーキテクチャ。コマンドラインでアーキテクチャを指定しない場合、バンドルの開始時に入力を求められます。  
有効な値: `i386` \$1 `x86_64`  
必須: いいえ

`--productcodes` *code1、code2、…*  
登録時にイメージにアタッチする、カンマ区切りの製品コード。  
必須: いいえ

`-B, --block-device-mapping` *マッピング*  
インスタンスタイプが指定されたデバイスをサポートする場合に、この AMI のインスタンスにブロックデバイスを公開する方法を定義します。  
キーと値のペアのカンマ区切りのペアを指定します。名キーは仮想名であり、各値は対応するデバイス名です。仮想名には以下が含まれています。  
+ `ami` — インスタンスによって判断されるルートファイルシステムデバイス
+ `root` — カーネルによって判断されるルートファイルシステムデバイス
+ `swap` — インスタンスによって判断されるスワップデバイス
+ `ephemeralN` — N 番目のインスタンスストアボリューム
必須: いいえ

`-p, --prefix`*prefix*  
バンドル済み AMI ファイルのファイル名プレフィクス。  
デフォルト: イメージファイルの名前。例えば、イメージパスが `/var/spool/my-image/version-2/debian.img` である場合、デフォルトのプレフィクスは `debian.img` です。  
必須: いいえ

`--kernel` *kernel\$1id*  
廃止。カーネルを設定するには、[register-image](https://docs.aws.amazon.com/cli/latest/reference/ec2/register-image.html) を使用します。  
必須: いいえ

`--ramdisk` *ramdisk\$1id*  
廃止。必要に応じて、[register-image](https://docs.aws.amazon.com/cli/latest/reference/ec2/register-image.html) を使用して RAM ディスクを設定します。  
必須: いいえ

### Output
<a name="bundle-image-output"></a>

バンドルプロセスのステージとステータスを記述するステータスメッセージ。

### 例
<a name="bundle-image-response"></a>

この例は、ループバックファイルで作成されたオペレーティングシステムイメージから、バンドルされた AMI を作成します。

```
[ec2-user ~]$ ec2-bundle-image -k pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem -c cert-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem -u 111122223333 -i image.img -d bundled/ -r x86_64
Please specify a value for arch [i386]: 
Bundling image file...
Splitting bundled/image.gz.crypt...
Created image.part.00
Created image.part.01
Created image.part.02
Created image.part.03
Created image.part.04
Created image.part.05
Created image.part.06
Created image.part.07
Created image.part.08
Created image.part.09
Created image.part.10
Created image.part.11
Created image.part.12
Created image.part.13
Created image.part.14
Generating digests for each part...
Digests generated.
Creating bundle manifest...
ec2-bundle-image complete.
```

## ec2-bundle-vol
<a name="ami-bundle-vol"></a>

### 説明
<a name="bundle-vol-description"></a>

インスタンスのルートボリュームのコピーを圧縮、暗号化、署名することで、Amazon S3-backed Linux AMI を作成します。

Amazon EC2 はインスタンスから製品コード、カーネル設定、RAM ディスク設定、およびブロックデバイスマッピングを継承しようとします。

デフォルトでは、バンドルプロセスで機密情報を含んでいる可能性があるファイルを除外します。ファイルには、`*.sw`、`*.swo`、`*.swp`、`*.pem`、`*.priv`、`*id_rsa*`、`*id_dsa*`、`*.gpg`、`*.jks`、`*/.ssh/authorized_keys`、`*/.bash_history` などがあります。これらのファイルをすべて含めるには、`--no-filter` オプションを使用します。これらのファイルの一部を含めるには、`--include` オプションを使用します。

詳細については、[Amazon S3-backed AMI を作成する](creating-an-ami-instance-store.md) を参照してください。

### 構文
<a name="bundle-vol-request"></a>

****ec2-bundle-vol** -c *path* -k *path* -u *account* [-d *path*] [--ec2cert *path*] [-r *architecture*] [--productcodes *code1*,*code2*,...] [-B *mapping*] [--all] [-e *directory1*,*directory2*,...] [-i *file1*,*file2*,...] [--no-filter] [-p *prefix*] [-s *size*] [--[no-]inherit] [-v *volume*] [-P *type*] [-S *script*] [--fstab *path*] [--generate-fstab] [--grub-config *path*]** 

### オプション
<a name="bundle-vol-parameters"></a>

`-c, --cert` *パス*  
ユーザーの PEM エンコード RSA パブリックキー証明書ファイル。  
必須: はい

`-k, --privatekey ` *パス*   
ユーザーの PEM エンコード RSA キーファイルへのパス。  
必須: はい

`-u, --user` *アカウント*  
ダッシュのない、ユーザーの AWS アカウント ID。  
必須: はい

`-d, --destination` *送信先*  
バンドルを作成するディレクトリ。  
デフォルト: `/tmp`  
必須: いいえ

`--ec2cert` *パス*  
イメージマニフェストの暗号化に使用される Amazon EC2 X.509 パブリックキー証明書へのパス。  
`us-gov-west-1` および `cn-north-1` リージョンではデフォルト以外のパブリックキー証明書を使用し、その証明書へのパスは、このオプションで指定する必要があります。証明書へのパスは、AMI ツールのインストール方法によって異なります。Amazon Linux の場合、証明書の場所は `/opt/aws/amitools/ec2/etc/ec2/amitools/` です。「[Amazon EC2 AMI ツールのセットアップ](set-up-ami-tools.md)」の RPM または ZIP ファイルから AMI ツールをインストールした場合、証明書の場所は `$EC2_AMITOOL_HOME/etc/ec2/amitools/` です。  
必須: `us-gov-west-1` および `cn-north-1` リージョンのみ。

`-r, --arch ` *アーキテクチャ*  
イメージアーキテクチャ。コマンドラインでこれを指定しない場合、バンドルの開始時に入力を求められます。  
有効な値: `i386` \$1 `x86_64`  
必須: いいえ

`--productcodes` *code1、code2、…*  
登録時にイメージにアタッチする、カンマ区切りの製品コード。  
必須: いいえ

`-B, --block-device-mapping` *マッピング*  
インスタンスタイプが指定されたデバイスをサポートする場合に、この AMI のインスタンスにブロックデバイスを公開する方法を定義します。  
キーと値のペアのカンマ区切りのペアを指定します。名キーは仮想名であり、各値は対応するデバイス名です。仮想名には以下が含まれています。  
+ `ami` — インスタンスによって判断されるルートファイルシステムデバイス
+ `root` — カーネルによって判断されるルートファイルシステムデバイス
+ `swap` — インスタンスによって判断されるスワップデバイス
+ `ephemeralN` — N 番目のインスタンスストアボリューム
必須: いいえ

`-a, --all`  
リモートでマウントされたファイルシステムのディレクトリを含めて、すべてのディレクトリをバンドルします。  
必須: いいえ

`-e, --exclude ` *directory1、directory2、…*  
バンドルオペレーションから除外する絶対ディレクトリパスとファイルのリスト。このパラメータは `--all` オプションを上書きします。除外を指定すると、パラメータとともにリストされたディレクトリとサブディレクトリは、ボリュームにバンドルされません。  
必須: いいえ

`-i, --include ` *file1、file2、…*  
バンドルオペレーションに含めるファイルのリスト。指定されたファイルは、それ以外の場合は AMI から除外されます。これは、機密情報が含まれる可能性があるためです。  
必須: いいえ

`--no-filter`  
指定した場合、AMI からファイルは除外されません。これは、機密情報が含まれる可能性があるためです。  
必須: いいえ

`-p, --prefix `*prefix*  
バンドル済み AMI ファイルのファイル名プレフィクス。  
デフォルト: `image`  
必須: いいえ

`-s, --size` *サイズ*  
作成するイメージファイルの MB (1024 \$1 1024 バイト) 単位のサイズ。最大サイズは 10240 MB です。  
デフォルト: 10240  
必須: いいえ

`--[no-]inherit`  
イメージがインスタンスのメタデータを継承するかどうかを示します (デフォルトでは継承します)。`--inherit` を有効にし、インスタンスメタデータにアクセスできない場合、バンドルは失敗します。  
必須: いいえ

`-v, --volume ` *ボリューム*  
バンドルを作成する、マウントされたボリュームへの絶対パス。  
デフォルト: ルートディレクトリ (/)。  
必須: いいえ

`-P, --partition` *type*  
ディスクイメージでパーティションテーブルを使用するかどうかを示します。パーティションテーブルタイプを指定しない場合、デフォルトでは、該当する場合はボリュームの親ブロックデバイスで使用されるタイプになります。それ以外の場合、デフォルトは `gpt` です。  
有効な値: `mbr` \$1 `gpt` \$1 `none`  
必須: いいえ

`-S, --script` *スクリプト*  
バンドルの直前に実行するカスタマイズスクリプト。スクリプトでは単一の引数である、ボリュームのマウントポイントが予期されます。  
必須: いいえ

`--fstab` *パス*  
イメージにバンドルする fstab へのパス。これを指定しない場合、Amazon EC2 は /etc/fstab をバンドルします。  
必須: いいえ

`--generate-fstab`  
Amazon EC2 で提供される fstab を使用してボリュームをバンドルします。  
必須: いいえ

`--grub-config`  
イメージにバンドルする別の grub 設定ファイルへのパス。デフォルトでは、`ec2-bundle-vol` は `/boot/grub/menu.lst` または `/boot/grub/grub.conf` が、クローンされたイメージ上に存在することを想定します。このオプションにより、別の grub 設定ファイルへのパスを指定することができ、このファイルはデフォルトに上書きしてコピーされます (存在する場合)。  
必須: いいえ

`--kernel` *kernel\$1id*  
廃止。カーネルを設定するには、[register-image](https://docs.aws.amazon.com/cli/latest/reference/ec2/register-image.html) を使用します。  
必須: いいえ

`--ramdisk`*ramdisk\$1id*  
廃止。必要に応じて、[register-image](https://docs.aws.amazon.com/cli/latest/reference/ec2/register-image.html) を使用して RAM ディスクを設定します。  
必須: いいえ

### Output
<a name="bundle-vol-output"></a>

バンドルのステージとステータスを説明するステータスメッセージ。

### 例
<a name="bundle-vol-response"></a>

この例では、ローカルマシンのルートファイルシステムのスナップショットを圧縮、暗号化、署名することで、バンドルされた AMI を作成します。

```
[ec2-user ~]$ ec2-bundle-vol -d /mnt -k pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem -c cert-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem -u 111122223333 -r x86_64
  Copying / into the image file /mnt/image...
  Excluding:
       sys
       dev/shm
       proc
       dev/pts
       proc/sys/fs/binfmt_misc
       dev
       media
       mnt
       proc
       sys
       tmp/image
       mnt/img-mnt
  1+0 records in
  1+0 records out
  mke2fs 1.38 (30-Jun-2005)
  warning: 256 blocks unused.

  Splitting /mnt/image.gz.crypt...
  Created image.part.00
  Created image.part.01
  Created image.part.02
  Created image.part.03
  ...
  Created image.part.22
  Created image.part.23
  Generating digests for each part...
  Digests generated.
  Creating bundle manifest...
  Bundle Volume complete.
```

## ec2-delete-bundle
<a name="ami-delete-bundle"></a>

### 説明
<a name="delete-bundle-description"></a>

Amazon S3 ストレージから、指定されたバンドルを削除します。バンドルを削除した後で、対応する AMI からインスタンスを起動することはできません。

### 構文
<a name="delete-bundle-request"></a>

****ec2-delete-bundle** -b *bucket* -a *access\$1key\$1id* -s *secret\$1access\$1key* [-t *token*] [--url *url*] [--region *region*] [--sigv *version*] [-m *path*] [-p *prefix*] [--clear] [--retry] [-y]** 

### オプション
<a name="delete-bundle-parameters"></a>

`-b, --bucket `*bucket*  
バンドルされた AMI に続いてオプションの '/' 区切りパスプレフィクスを含む Amazon S3 バケットの名前  
必須: はい

`-a, --access-key` *access\$1key\$1id*  
AWS アクセスキー ID。  
必須: はい

`-s, --secret-key` *secret\$1access\$1key*  
AWS シークレットアクセスキー。  
必須: はい

`-t, --delegation-token` *トークン*  
AWS リクエストに渡す委任トークン。詳細については、*IAM ユーザーガイド*の「[IAM の一時的なセキュリティ認証情報](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html)」を参照してください。  
必須: 一時的なセキュリティ認証情報を使用している場合のみ。  
デフォルト: `AWS_DELEGATION_TOKEN` 環境変数の値 (設定されている場合)。

`--region`*リージョン*  
リクエスト署名で使用するリージョン。  
デフォルト: `us-east-1`  
必須: 署名バージョン 4 を使用する場合は必須

`--sigv`*version*  
リクエストに署名するときに使用する署名バージョン。  
有効な値: `2` \$1 `4`  
デフォルト: `4`  
必須: いいえ

`-m, --manifest`*パス*  
マニフェストファイルへのパス。  
必須: `--prefix` または `--manifest` のどちらかを指定する必要があります。

`-p, --prefix`*prefix*  
バンドルされた AMI ファイル名プレフィクス。プレフィクス全体を指定します。例えば、プレフィクスが image.img である場合は、`-p image.img` ではなく `-p image` を使用します。  
必須: `--prefix` または `--manifest` のどちらかを指定する必要があります。

`--clear`  
指定されたバンドルを削除した後で空の場合は、Amazon S3 バケットを削除します。  
必須: いいえ

`--retry`  
すべての Amazon S3 エラーで、オペレーションあたり最大 5 回まで自動的に再試行します。  
必須: いいえ

`-y, --yes`  
すべてのプロンプトへの答えが [yes] であると自動的に想定します。  
必須: いいえ

### Output
<a name="delete-bundle-output"></a>

Amazon EC2 は、削除プロセスのステージとステータスを示すステータスメッセージを表示します。

### 例
<a name="delete-bundle-response"></a>

この例では、Amazon S3 からバンドルを削除します。

```
[ec2-user ~]$ ec2-delete-bundle -b amzn-s3-demo-bucket -a your_access_key_id -s your_secret_access_key
Deleting files:
amzn-s3-demo-bucket/image.manifest.xml
amzn-s3-demo-bucket/image.part.00
amzn-s3-demo-bucket/image.part.01
amzn-s3-demo-bucket/image.part.02
amzn-s3-demo-bucket/image.part.03
amzn-s3-demo-bucket/image.part.04
amzn-s3-demo-bucket/image.part.05
amzn-s3-demo-bucket/image.part.06
Continue? [y/n]
y
Deleted amzn-s3-demo-bucket/image.manifest.xml
Deleted amzn-s3-demo-bucket/image.part.00
Deleted amzn-s3-demo-bucket/image.part.01
Deleted amzn-s3-demo-bucket/image.part.02
Deleted amzn-s3-demo-bucket/image.part.03
Deleted amzn-s3-demo-bucket/image.part.04
Deleted amzn-s3-demo-bucket/image.part.05
Deleted amzn-s3-demo-bucket/image.part.06
ec2-delete-bundle complete.
```

## ec2-download-bundle
<a name="ami-download-bundle"></a>

### 説明
<a name="download-bundle-description"></a>

指定された Amazon S3-backed Linux AMI を Amazon S3 ストレージからダウンロードします。

### 構文
<a name="download-bundle-request"></a>

****ec2-download-bundle** -b *bucket* -a *access\$1key\$1id* -s *secret\$1access\$1key* -k *path* [--url *url*] [--region *region*] [--sigv *version*] [-m *file*] [-p *prefix*] [-d *directory*] [--retry]** 

### オプション
<a name="download-bundle-parameters"></a>

`-b, --bucket` *バケット*  
バンドルが存在する Amazon S3 バケットの名前。この後に、オプションで '/' 区切りのパスプレフィクスが続きます。  
必須: はい

`-a, --access-key` *access\$1key\$1id*  
AWS アクセスキー ID。  
必須: はい

`-s, --secret-key` *secret\$1access\$1key*  
AWS シークレットアクセスキー。  
必須: はい

`-k, --privatekey` *パス*  
マニフェストの復号に使用されるプライベートキー。  
必須: はい

`--url` *url*  
Amazon S3 サービスの URL。  
デフォルト: `https://s3.amazonaws.com/`  
必須: いいえ

`--region` *region*  
リクエスト署名で使用するリージョン。  
デフォルト: `us-east-1`  
必須: 署名バージョン 4 を使用する場合は必須

`--sigv` *バージョン*  
リクエストに署名するときに使用する署名バージョン。  
有効な値: `2` \$1 `4`  
デフォルト: `4`  
必須: いいえ

`-m, --manifest` *ファイル*  
マニフェストファイル名 (パスなし)。マニフェスト `-m`またはプレフィクス `-p`を指定することをお勧めします。  
必須: いいえ

`-p, --prefix `*prefix*  
バンドル済み AMI ファイルのファイル名プレフィクス。  
デフォルト: `image`  
必須: いいえ

`-d, --directory ` *ディレクトリ*  
ダウンロードしたバンドルが保存されているディレクトリ。ディレクトリが存在している必要があります。  
デフォルト: 現在の作業ディレクトリ。  
必須: いいえ

 `--retry`   
すべての Amazon S3 エラーで、オペレーションあたり最大 5 回まで自動的に再試行します。  
必須: いいえ

### Output
<a name="download-bundle-output"></a>

ダウンロードプロセスの多様な段階ステータスを示すメッセージが表示されます。

### 例
<a name="download-bundle-response"></a>

この例では、`bundled` ディレクトリを作成 (Linux **mkdir** コマンドを使用) し、Amazon S3 `amzn-s3-demo-bucket` バケットからバンドルをダウンロードします。

```
[ec2-user ~]$ mkdir bundled
[ec2-user ~]$ ec2-download-bundle -b amzn-s3-demo-bucket/bundles/bundle_name -m image.manifest.xml -a your_access_key_id -s your_secret_access_key -k pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem -d mybundle
Downloading manifest image.manifest.xml from amzn-s3-demo-bucket to mybundle/image.manifest.xml ...
Downloading part image.part.00 from amzn-s3-demo-bucket/bundles/bundle_name to mybundle/image.part.00 ...
Downloaded image.part.00 from amzn-s3-demo-bucket
Downloading part image.part.01 from amzn-s3-demo-bucket/bundles/bundle_name to mybundle/image.part.01 ...
Downloaded image.part.01 from amzn-s3-demo-bucket
Downloading part image.part.02 from amzn-s3-demo-bucket/bundles/bundle_name to mybundle/image.part.02 ...
Downloaded image.part.02 from amzn-s3-demo-bucket
Downloading part image.part.03 from amzn-s3-demo-bucket/bundles/bundle_name to mybundle/image.part.03 ...
Downloaded image.part.03 from amzn-s3-demo-bucket
Downloading part image.part.04 from amzn-s3-demo-bucket/bundles/bundle_name to mybundle/image.part.04 ...
Downloaded image.part.04 from amzn-s3-demo-bucket
Downloading part image.part.05 from amzn-s3-demo-bucket/bundles/bundle_name to mybundle/image.part.05 ...
Downloaded image.part.05 from amzn-s3-demo-bucket
Downloading part image.part.06 from amzn-s3-demo-bucket/bundles/bundle_name to mybundle/image.part.06 ...
Downloaded image.part.06 from amzn-s3-demo-bucket
```

## ec2-migrate-manifest
<a name="ami-migrate-manifest"></a>

### 説明
<a name="migrate-manifest-description"></a>

別のリージョンをサポートするように Amazon S3-backed Linux AMI (証明書、カーネル、RAM ディスクなど) を変更します。

### 構文
<a name="migrate-manifest-request"></a>

****ec2-migrate-manifest** -c *path* -k *path* -m *path* \$1(-a *access\$1key\$1id* -s *secret\$1access\$1key* --region *region*) \$1 (--no-mapping)\$1 [--ec2cert *ec2\$1cert\$1path*] [--kernel *kernel-id*] [--ramdisk *ramdisk\$1id*]** 

### オプション
<a name="migrate-manifest-parameters"></a>

`-c, --cert` *パス*  
ユーザーの PEM エンコード RSA パブリックキー証明書ファイル。  
必須: はい

`-k, --privatekey` *パス*  
ユーザーの PEM エンコード RSA キーファイルへのパス。  
必須: はい

`--manifest` *パス*  
マニフェストファイルへのパス。  
必須: はい

`-a, --access-key` *access\$1key\$1id*  
AWS アクセスキー ID。  
必須: 自動マッピングを使用する場合は必須です。

`-s, --secret-key ` *secret\$1access\$1key*  
AWS シークレットアクセスキー。  
必須: 自動マッピングを使用する場合は必須です。

`--region` *region*  
マッピングファイル内で検索するリージョン。  
必須: 自動マッピングを使用する場合は必須です。

`--no-mapping`  
カーネルと RAM ディスクの自動マッピングを無効にします。  
 移行中、Amazon EC2 は、コピー先リージョン用に設計されたカーネルと RAM ディスクで、マニフェストファイルのカーネルと RAM ディスクを置き換えます。`--no-mapping` パラメータを指定しない場合、`ec2-migrate-bundle` は `DescribeRegions` および `DescribeImages` オペレーションを使用して、自動化されたマッピングを実行します。  
必須: 自動マッピングに使用される `-a`、`-s`、および `--region` オプションを指定しない場合は必須です。

`--ec2cert` *パス*  
イメージマニフェストの暗号化に使用される Amazon EC2 X.509 パブリックキー証明書へのパス。  
`us-gov-west-1` および `cn-north-1` リージョンではデフォルト以外のパブリックキー証明書を使用し、その証明書へのパスは、このオプションで指定する必要があります。証明書へのパスは、AMI ツールのインストール方法によって異なります。Amazon Linux の場合、証明書の場所は `/opt/aws/amitools/ec2/etc/ec2/amitools/` です。「[Amazon EC2 AMI ツールのセットアップ](set-up-ami-tools.md)」の ZIP ファイルから AMI ツールをインストールした場合、証明書の場所は `$EC2_AMITOOL_HOME/etc/ec2/amitools/` です。  
必須: `us-gov-west-1` および `cn-north-1` リージョンのみ。

`--kernel` *kernel\$1id*  
選択するカーネルの ID。  
カーネルと RAM ディスクではなく PV-GRUB を使用することをお勧めします。詳細については、「Amazon Linux 2 ユーザーガイド」の「[ユーザー提供カーネル](https://docs.aws.amazon.com/linux/al2/ug/UserProvidedKernels.html)」を参照してください。**
必須: いいえ

`--ramdisk` *ramdisk\$1id*  
選択する RAM ディスクの ID。  
カーネルと RAM ディスクではなく PV-GRUB を使用することをお勧めします。詳細については、「Amazon Linux 2 ユーザーガイド」の「[ユーザー提供カーネル](https://docs.aws.amazon.com/linux/al2/ug/UserProvidedKernels.html)」を参照してください。**
必須: いいえ

### Output
<a name="migrate-manifest-output"></a>

バンドルプロセスのステージとステータスを記述するステータスメッセージ。

### 例
<a name="migrate-manifest-response"></a>

この例では、`my-ami.manifest.xml` マニフェストで指定された AMI を米国から EU にコピーします。

```
[ec2-user ~]$ ec2-migrate-manifest --manifest my-ami.manifest.xml --cert cert-HKZYKTAIG2ECMXYIBH3HXV4ZBZQ55CLO.pem --privatekey pk-HKZYKTAIG2ECMXYIBH3HXV4ZBZQ55CLO.pem --region eu-west-1 

Backing up manifest...
Successfully migrated my-ami.manifest.xml It is now suitable for use in eu-west-1.
```

## ec2-unbundle
<a name="ami-unbundle"></a>

### 説明
<a name="unbundle-description"></a>

Amazon S3-backed Linux AMI からバンドルを再作成します。

### 構文
<a name="unbundle-request"></a>

****ec2-unbundle** -k *path* -m *path* [-s *source\$1directory*] [-d *destination\$1directory*]** 

### オプション
<a name="unbundle-parameters"></a>

`-k, --privatekey` *パス*  
PEM エンコードされる RSA キーファイルへのパス。  
必須: はい

`-m, --manifest` *パス*  
マニフェストファイルへのパス。  
必須: はい

`-s, --source` *source\$1directory*  
バンドル含むディレクトリ。  
デフォルト: 現在のディレクトリ。  
必須: いいえ

`-d, --destination` *destination\$1directory*  
AMI をバンドル解除するディレクトリ。宛先ディレクトリが存在している必要があります。  
デフォルト: 現在のディレクトリ。  
必須: いいえ

### 例
<a name="unbundle-response"></a>

この Linux および UNIX の例では、`image.manifest.xml` ファイルに指定された AMI をバンドル解除します。

```
[ec2-user ~]$ mkdir unbundled
$ ec2-unbundle -m mybundle/image.manifest.xml -k pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem -s mybundle -d unbundled
$ ls -l unbundled
total 1025008
-rw-r--r-- 1 root root 1048578048 Aug 25 23:46 image.img
```

### Output
<a name="unbundle-output"></a>

バンドル解除プロセスの多様な段階ステータスを示すメッセージが表示されます。

## ec2-upload-bundle
<a name="ami-upload-bundle"></a>

### 説明
<a name="upload-bundle-description"></a>

Amazon S3-backed Linux AMI のバンドルを Amazon S3 にアップロードし、アップロードされたオブジェクトで適切なアクセスコントロールリスト (ACL) を設定します。詳細については、「[Amazon S3-backed AMI を作成する](creating-an-ami-instance-store.md)」を参照してください。

**注記**  
Amazon S3-backed Linux AMI の S3 バケットにオブジェクトをアップロードするには、バケットで ACL を有効にする必要があります。有効にしない場合、Amazon EC2 はアップロードするオブジェクトに ACL を設定できません。宛先のバケットが S3 オブジェクトの所有権のバケット所有者強制設定を使用している場合、ACL が無効になるため、この方法は使えません。詳細については、「[バケットのオブジェクト所有権のコントロールと ACL の無効化](https://docs.aws.amazon.com/AmazonS3/latest/userguide/about-object-ownership.html)」を参照してください。

### 構文
<a name="upload-bundle-request"></a>

****ec2-upload-bundle** -b *bucket* -a *access\$1key\$1id* -s *secret\$1access\$1key* [-t *token*] -m *path* [--url *url*] [--region *region*] [--sigv *version*] [--acl *acl*] [-d *directory*] [--part *part*] [--retry] [--skipmanifest]** 

### オプション
<a name="upload-bundle-parameters"></a>

`-b, --bucket` *バケット*  
バンドルを保存する Amazon S3 バケットの名前。その後にオプションで '/' 区切りのパスプレフィクスが続きます。バケットが存在しない場合、バケット名を使用できる場合はバケットが作成されます。さらに、バケットが存在せず、AMI ツールのバージョンが 1.5.18 以降の場合、このコマンドはバケットの ACL を設定します。  
必須: はい

`-a, --access-key` *access\$1key\$1id*  
AWS アクセスキー ID。  
必須: はい

`-s, --secret-key` *secret\$1access\$1key*  
お客様の AWS シークレットアクセスキー。  
必須: はい

`-t, --delegation-token` *トークン*  
AWS リクエストに渡す委任トークン。詳細については、*IAM ユーザーガイド*の「[IAM の一時的なセキュリティ認証情報](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html)」を参照してください。  
必須: 一時的なセキュリティ認証情報を使用している場合のみ。  
デフォルト: `AWS_DELEGATION_TOKEN` 環境変数の値 (設定されている場合)。

`-m, --manifest` *パス*  
マニフェストファイルへのパス。マニフェストファイルはバンドルプロセス中に作成され、バンドルを含むディレクトリにあります。  
必須: はい

`--url` *url*  
廃止。バケットの場所が (`--region` ではなく) `EU` に制約されない限り、代わりに `eu-west-1` オプションを使用します。`--location` フラグは、その特定の場所の制限を対象にする唯一の方法です。  
Amazon S3 エンドポイントサービスの URL。  
デフォルト: `https://s3.amazonaws.com/`  
必須: いいえ

`--region` *region*  
宛先の S3 バケットに対してリクエスト署名で使用するリージョン。  
+ バケットが存在せず、リージョンを指定しない場合、ツールは (`us-east-1` で) 場所の制約のないバケットを作成します。
+ バケットが存在せず、リージョンを指定した場合、ツールは指定したリージョンでバケットを作成します。
+ バケットが存在し、リージョンを指定しない場合、ツールはバケットの場所を使用します。
+ バケットが存在し、リージョンとして `us-east-1` を指定した場合、ツールはエラーメッセージなしでバケットの実際の場所を使用し、一致する既存のファイルは上書きされます。
+ バケットが存在し、バケットの実際の場所に一致しない (`us-east-1` 以外の) リージョンを指定した場合、ツールはエラーで終了します。
バケットが (`EU` ではなく) `eu-west-1` の場所に制約されている場合は、代わりに `--location` フラグを使用します。`--location` フラグは、その特定の場所の制限を対象にする唯一の方法です。  
デフォルト: `us-east-1`  
必須: 署名バージョン 4 を使用する場合は必須

`--sigv` *バージョン*  
リクエストに署名するときに使用する署名バージョン。  
有効な値: `2` \$1 `4`  
デフォルト: `4`  
必須: いいえ

`--acl` *acl*  
バンドルされたイメージのアクセスコントロールリストのポリシー。  
有効な値: `public-read` \$1 `aws-exec-read`  
デフォルト: `aws-exec-read`  
必須: いいえ

`-d, --directory` *ディレクトリ*  
バンドルされた AMI 部分を含むディレクトリ。  
デフォルト: マニフェストファイルを含むディレクトリ (`-m` オプションを参照)。  
必須: いいえ

`--part` *パート*  
指定された部分とそれ以降のすべての部分のアップロードを開始します。例えば、`--part 04`。  
必須: いいえ

`--retry`  
すべての Amazon S3 エラーで、オペレーションあたり最大 5 回まで自動的に再試行します。  
必須: いいえ

`--skipmanifest`  
マニフェストをアップロードしません。  
必須: いいえ

`--location` *の場所*  
廃止。バケットの場所が (`--region` ではなく) `EU` に制約されない限り、代わりに `eu-west-1` オプションを使用します。`--location` フラグは、その特定の場所の制限を対象にする唯一の方法です。  
宛先 Amazon S3 バケットの場所の制約。バケットが存在し、バケットの実際の場所に一致しない場所を指定する場合、ツールはエラーで終了します。バケットが存在し、場所を指定しない場合、ツールはバケットの場所を使用します。バケットが存在しない場合に場所を指定すると、ツールは、指定した場所でバケットを作成します。バケットが存在せず、場所を指定しない場合、ツールは (`us-east-1` で) 場所の制約のないバケットを作成します。  
デフォルト: `--region` を指定した場合、場所はその指定したリージョンに設定されます。`--region` を指定しない場合、場所はデフォルトで `us-east-1` になります。  
必須: いいえ

### Output
<a name="upload-bundle-output"></a>

Amazon EC2 は、アップロードプロセスのステージとステータスを示すステータスメッセージを表示します。

### 例
<a name="upload-bundle-response"></a>

この例では、`image.manifest.xml` マニフェストで指定されたバンドルをアップロードします。

```
[ec2-user ~]$ ec2-upload-bundle -b amzn-s3-demo-bucket/bundles/bundle_name -m image.manifest.xml -a your_access_key_id -s your_secret_access_key
Creating bucket...
Uploading bundled image parts to the S3 bucket amzn-s3-demo-bucket ...
Uploaded image.part.00
Uploaded image.part.01
Uploaded image.part.02
Uploaded image.part.03
Uploaded image.part.04
Uploaded image.part.05
Uploaded image.part.06
Uploaded image.part.07
Uploaded image.part.08
Uploaded image.part.09
Uploaded image.part.10
Uploaded image.part.11
Uploaded image.part.12
Uploaded image.part.13
Uploaded image.part.14
Uploading manifest ...
Uploaded manifest.
Bundle upload completed.
```

## AMI ツール用の一般的なオプション
<a name="common-args-ami"></a>

AMI ツールのほとんどで、以下の任意のパラメータを使用できます。

`--help, -h`  
ヘルプメッセージを表示します。

`--version`  
バージョンと著作権表記を表示します。

`--manual`  
手動のエントリを表示します。

`--batch`  
インタラクティブなプロンプトを制約するバッチモードで実行します。

`--debug`  
問題のトラブルシューティング時に役立つ可能性がある情報を表示します。

# Amazon S3-backed AMI を EBS-backed AMI に変換する
<a name="Using_ConvertingS3toEBS"></a>

所有している Amazon S3-backed Linux AMI は、Amazon EBS-Backed Linux AMI に変換できます。

**重要**  
所有していない AMI を変換することはできません。

**Amazon S3-backed AMI を Amazon EBS-backed AMI に変換するには**

1. Amazon EBS-backed AMI から Amazon Linux インスタンスを起動します。詳細については、[コンソールのインスタンス起動ウィザードを使用して EC2 インスタンスを起動する](ec2-launch-instance-wizard.md) を参照してください。Amazon Linux インスタンスには、AWS CLI および AMI ツールがプリインストールされています。

1. Amazon S3-backed AMI をバンドルするのに使用した X.509 プライベートキーをインスタンスにアップロードします。Amazon はこのキーを使用して、お客様と Amazon EC2 だけがお客様の AMI にアクセスできるようにします。

   1. 次のように、X.509 プライベートキーのインスタンスに一時ディレクトリを作成します。

      ```
      [ec2-user ~]$ mkdir /tmp/cert
      ```

   1. [scp](linux-file-transfer-scp.md) などの安全なコピーツールを使用して、コンピュータから `/tmp/cert` ディレクトリに X.509 プライベートキーをコピーします。次のコマンドの *my-private-key* パラメータは、SSH でインスタンスに接続するために使用するプライベートキーです。例:

      ```
      you@your_computer:~ $ scp -i my-private-key.pem /path/to/pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem ec2-user@ec2-203-0-113-25.compute-1.amazonaws.com:/tmp/cert/
      pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem  100%  717     0.7KB/s   00:00
      ```

1. 環境変数を設定して、AWS CLI を使用します。詳細については、「[環境変数](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-envvars.html)」を参照してください。

   1. (推奨) AWS アクセスキー、シークレットキーおよびセッショントークンの環境変数を設定します。

      ```
      [ec2-user ~]$ export AWS_ACCESS_KEY_ID=your_access_key_id
      [ec2-user ~]$ export AWS_SECRET_ACCESS_KEY=your_secret_access_key
      [ec2-user ~]$ export AWS_SESSION_TOKEN=your_session_token
      ```

   1. AWS アクセスキーおよびシークレットキーの環境変数を設定します。

      ```
      [ec2-user ~]$ export AWS_ACCESS_KEY_ID=your_access_key_id
      [ec2-user ~]$ export AWS_SECRET_ACCESS_KEY=your_secret_access_key
      ```

1. 新しい AMI の Amazon エラスティックブロックストア (Amazon EBS) ボリュームを準備します。

   1. [create-volume](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-volume.html) コマンドを使用して、インスタンスと同じアベイラビリティーゾーンに空の EBS ボリュームを作成します。コマンド出力のボリューム ID を書き留めてください。
**重要**  
 この EBS ボリュームは、元のインスタンスストアのルートボリュームと同じサイズ以上である必要があります。

      ```
      aws ec2 create-volume \
          --size 10 \
          --region us-west-2 \
          --availability-zone us-west-2b
      ```

   1. [attach-volume](https://docs.aws.amazon.com/cli/latest/reference/ec2/attach-volume.html) コマンドを使用して、Amazon EBS-backed インスタンスにボリュームをアタッチします。

      ```
      aws ec2 attach-volume \
          --volume-id vol-01234567890abcdef \
          --instance-id i-1234567890abcdef0 \
          --region us-west-2
      ```

1. バンドルのフォルダを作成します。

   ```
   [ec2-user ~]$ mkdir /tmp/bundle
   ```

1. `/tmp/bundle` コマンドを使用して、インスタンスストアバック AMI のバンドルを [ec2-download-bundle](ami-tools-commands.md#ami-download-bundle) にダウンロードします。

   ```
   [ec2-user ~]$ ec2-download-bundle -b amzn-s3-demo-bucket/bundle_folder/bundle_name -m image.manifest.xml -a $AWS_ACCESS_KEY_ID -s $AWS_SECRET_ACCESS_KEY --privatekey /path/to/pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem -d /tmp/bundle
   ```

1. [ec2-unbundle](ami-tools-commands.md#ami-unbundle) コマンドを使用して、バンドルからイメージファイルを再作成します。

   1. バンドルフォルダにディレクトリを変更します。

      ```
      [ec2-user ~]$ cd /tmp/bundle/
      ```

   1. [ec2-unbundle](ami-tools-commands.md#ami-unbundle) コマンドを実行します。

      ```
      [ec2-user bundle]$ ec2-unbundle -m image.manifest.xml --privatekey /path/to/pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem
      ```

1. バンドルを解除したイメージから新しい EBS ボリュームにファイルをコピーします。

   ```
   [ec2-user bundle]$ sudo dd if=/tmp/bundle/image of=/dev/sdb bs=1M
   ```

1. バンドルを解除した新しいパーティションのボリュームを調査します。

   ```
   [ec2-user bundle]$ sudo partprobe /dev/sdb1
   ```

1. ブロックデバイスの一覧を表示してマウントするデバイス名を選択してください。

   ```
   [ec2-user bundle]$ lsblk
   NAME         MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
   /dev/sda    202:0    0   8G  0 disk
   └─/dev/sda1 202:1    0   8G  0 part /
   /dev/sdb    202:80   0  10G  0 disk
   └─/dev/sdb1 202:81   0  10G  0 part
   ```

   この例では、マウントするパーティションは `/dev/sdb1` ですが、デバイス名はおそらく異なります。ボリュームが仕切られていない場合は、マウントするデバイスは `/dev/sdb` に似ています (デバイスパーティションの末尾に数値なし)。

1. 新しい EBS ボリュームのマウントポイントを作成し、ボリュームをマウントします。

   ```
   [ec2-user bundle]$ sudo mkdir /mnt/ebs
   [ec2-user bundle]$ sudo mount /dev/sdb1 /mnt/ebs
   ```

1. EBS ボリュームの `/etc/fstab` ファイルを任意のテキストエディタ (**vim** や **nano** など) で開き、インスタンスストア (エフェメラル) ボリュームのエントリがあれば削除します。EBS ボリュームが `/mnt/ebs` に取付けられるため、`fstab` ファイルは `/mnt/ebs/etc/fstab` にあります。

   ```
   [ec2-user bundle]$ sudo nano /mnt/ebs/etc/fstab
   #
   LABEL=/     /           ext4    defaults,noatime  1   1
   tmpfs       /dev/shm    tmpfs   defaults        0   0
   devpts      /dev/pts    devpts  gid=5,mode=620  0   0
   sysfs       /sys        sysfs   defaults        0   0
   proc        /proc       proc    defaults        0   0
   /dev/sdb        /media/ephemeral0       auto    defaults,comment=cloudconfig    0       2
   ```

   この例では、最後の行を削除する必要があります。

1. ボリュームをアンマウントし、インスタンスからデタッチします。

   ```
   [ec2-user bundle]$ sudo umount /mnt/ebs
   [ec2-user bundle]$ aws ec2 detach-volume --volume-id vol-01234567890abcdef --region us-west-2
   ```

1. 次のように、新しい EBS ボリュームから AMI を作成します。

   1. 新しい EBS ボリュームのスナップショットを作成します。

      ```
      [ec2-user bundle]$ aws ec2 create-snapshot --region us-west-2 --description "your_snapshot_description" --volume-id vol-01234567890abcdef
      ```

   1. スナップショットが完了していることを確認します。

      ```
      [ec2-user bundle]$ aws ec2 describe-snapshots --region us-west-2 --snapshot-id snap-0abcdef1234567890
      ```

   1. 元の AMI で使用されたプロセッサアーキテクチャ、仮想化タイプ、カーネルイメージ (`aki`) を、**describe-images** コマンドを使用して特定します。このステップでは、元の Amazon S3-backed AMI の AMI ID が必要です。

      ```
      [ec2-user bundle]$ aws ec2 describe-images --region us-west-2 --image-id ami-0abcdef1234567890 --output text
      IMAGES	x86_64	amazon/amzn-ami-pv-2013.09.2.x86_64-s3	ami-8ef297be	amazon	available	public	machine	aki-fc8f11cc	instance-store	paravirtual	xen
      ```

      この例では、アーキテクチャは `x86_64` で、カーネルイメージ ID は `aki-fc8f11cc` です。次のステップでこれらの値を使用します。前述のコマンドの出力では `ari` ID もリストされますので、これも書き留めます。

   1. 新しい EBS ボリュームのスナップショット ID と前のステップで書き留めた値を使用して、新しい AMI を登録します。前述のコマンド出力に `ari` ID がリストされていた場合は、その ID を次のコマンドで `--ramdisk-id ari_id`. を使用して指定します。

      ```
      [ec2-user bundle]$ aws ec2 register-image --region us-west-2 --name your_new_ami_name --block-device-mappings DeviceName=device-name,Ebs={SnapshotId=snap-0abcdef1234567890} --virtualization-type paravirtual --architecture x86_64 --kernel-id aki-fc8f11cc --root-device-name device-name
      ```

1. (オプション) 新しい AMI からインスタンスを起動できることをテストした後で、この手順で作成した EBS ボリュームを削除できます。

   ```
   aws ec2 delete-volume --volume-id vol-01234567890abcdef
   ```

# Windows Sysprep を使用して Amazon EC2 AMI を作成する
<a name="ami-create-win-sysprep"></a>

Microsoft システム準備 (Windows Sysprep) ツールは、新しいイメージをキャプチャする前にインスタンス固有のシステム設定を削除して、オペレーティングシステムの一般化バージョンを作成します。

[EC2 Image Builder](https://docs.aws.amazon.com/imagebuilder/latest/userguide/what-is-image-builder.html) を使用して、ソフトウェアと設定が事前にインストール、定義、カスタマイズされたセキュアな最新の「ゴールデン」サーバーイメージの作成、管理、デプロイを自動化することをお勧めします。

Windows Sysprep で、Windows 起動エージェント (EC2Launch v2、EC2Launch、EC2Config) を使って標準化された AMI を作成することもできます。

**重要**  
Windows Sysprep を使用してインスタンスのバックアップを作成しないでください。Windows Sysprep はシステム固有の情報を削除します。この情報を削除すると、インスタンスのバックアップに予期しない結果が生じる場合があります。

Windows Sysprep のトラブルシューティングについては、「[Amazon EC2 Windows インスタンスの Sysprep の問題をトラブルシューティングする](sysprep-troubleshoot.md)」を参照してください。

**Topics**
+ [Windows Sysprep のステップ](#sysprep-phases)
+ [[開始する前に]](#sysprep-begin)
+ [EC2Launch v2 で Windows Sysprep を使用する](sysprep-using-ec2launchv2.md)
+ [EC2Launch で Windows Sysprep を使用する](ec2launch-sysprep.md)
+ [EC2Config で Windows Sysprep を使用する](sysprep-using.md)

## Windows Sysprep のステップ
<a name="sysprep-phases"></a>

Windows Sysprep は、次のステップを通じて実行されます。
+ **一般化**: Sysprep ツールはイメージに固有の情報と設定を削除します。Windows Sysprep は、例えばセキュリティ識別子 (SID)、コンピュータ名、イベントログおよび特定のドライバーなどを削除します。このステップを完了すると、オペレーティングシステム (OS) は AMI を作成する準備が整いました。
**注記**  
Windows 起動エージェントで Windows Sysprep を実行すると、`PersistAllDeviceInstalls` はデフォルトで true に設定されているため、システムによってドライバーの削除が禁止されます。
+ **特定化**: プラグアンドプレイはコンピュータをスキャンして、検出されたデバイス用のドライバをインストールします。Sysprep ツールは、コンピュータ名や SID など OS に固有の要件を生成します。必要に応じて、このフェーズでコマンドを実行できます。
+ **アウトオブボックスエクスペリエンス (OOBE)**: システムによって Windows セットアップの省略バージョンが実行され、システム言語、タイムゾーン、登録組織などの情報を入力するように求められます。Windows 起動エージェントで Windows Sysprep を実行すると、応答ファイルによってこのステップが自動化されます。

## [開始する前に]
<a name="sysprep-begin"></a>
+ Windows Sysprep を実行する前に、Windows Sysprep を実行する単一の管理者アカウント以外のすべてのローカルユーザーアカウントとすべてのアカウントプロファイルを削除することをお勧めします。追加のアカウントとプロファイルを使用して Windows Sysprep を実行すると、プロファイルデータの損失や Windows Sysprep の完了の失敗など、予期しない動作が発生する可能性があります。
+ 詳細については、「[Sysprep Overview](https://learn.microsoft.com/en-us/windows-hardware/manufacture/desktop/sysprep--system-preparation--overview)」を参照してください。
+ Sysprep でサポートされているサーバーロールについては、「[Sysprep Support for Server Roles](https://learn.microsoft.com/en-us/windows-hardware/manufacture/desktop/sysprep-support-for-server-roles)」を参照してください。

# EC2Launch v2 で Windows Sysprep を使って AMI を作成する
<a name="sysprep-using-ec2launchv2"></a>

EC2Launch v2 エージェントがインストールされたインスタンスからイメージを作成すると、EC2Launch v2 はイメージが作成されたときに特定のタスクを実行します。これには Windows Sysprep を使用した作業が含まれます。詳細については、「[Windows Sysprep のステップ](ami-create-win-sysprep.md#sysprep-phases)」を参照してください。

**Topics**
+ [Windows Sysprep のアクション](#sysprep-actions-ec2launchv2)
+ [Sysprep 後](#sysprep-post-ec2launchv2)
+ [EC2Launch v2 で Windows Sysprep を実行する](#sysprep-gui-procedure-ec2launchv2)

## Windows Sysprep のアクション
<a name="sysprep-actions-ec2launchv2"></a>

イメージを準備するために、Windows Sysprep と EC2Launch v2 は以下のアクションを実行します。

1. **[EC2Launch の設定]** ダイアログボックスで **[Sysprep によるシャットダウン]** を選択すると、システムは `ec2launch sysprep` コマンドを実行します。

1. EC2Launch v2 は、`unattend.xml` のレジストリ値を読み取ることで、`HKEY_USERS\.DEFAULT\Control Panel\International\LocaleName` ファイルの内容を編集します。このファイルは `C:\ProgramData\Amazon\EC2Launch\sysprep` ディレクトリにあります。

1. システムは `BeforeSysprep.cmd` を実行します。このコマンドは、次のレジストリキーを作成します。

   **reg add "HKEY\$1LOCAL\$1MACHINE\$1SYSTEM\$1CurrentControlSet\$1Control\$1Terminal Server" /v fDenyTSConnections /t REG\$1DWORD /d 1 /f**

   レジストリキーは再度有効になるまで RDP 接続を無効にします。RDP 接続を無効にすることは、安全上の観点より必要となります。これは、Windows Sysprep 実行後の最初のブートセッション中、RDP が接続できるわずかな時間の間に管理者パスワードが空白となるためです。

1. EC2Launch v2 サービスは、以下のコマンドを実行して Windows Sysprep を呼び出します。

   **sysprep.exe /oobe /generalize /shutdown /unattend: "C:\$1ProgramData\$1Amazon\$1EC2Launch\$1sysprep\$1unattend.xml"**

### ステップの一般化
<a name="sysprep-generalize-ec2launchv2"></a>
+ EC2Launch v2 は、コンピュータ名や SID などイメージに固有の情報と設定を削除します。インスタンスがドメインのメンバーである場合は、そのドメインから削除されます。`unattend.xml` 応答ファイルには、このステップに影響する以下の設定が含まれています。
  + **PersistAllDeviceInstalls**: この設定は、Windows セットアップがデバイスを削除したり再設定することを防ぐことによってイメージ準備プロセスを高速化します。これは、Amazon AMI を実行するためには特定のドライバーが必要となり、これらのドライバーの再検出には時間がかかるためです。
  + **DoNotCleanUpNonPresentDevices**: この設定では、現在存在しないデバイス用のプラグアンドプレイ情報を保持します。
+ Windows Sysprep は AMI の作成の準備完了後に OS をシャットダウンします。システムは、新しいインスタンスを起動するか、または元のインスタンスを起動します。

### ステップの特定化
<a name="sysprep-specialize-ec2launchv2"></a>

システムは、コンピュータ名や SID など OS に固有の要件を生成します。またシステムは、`unattend.xml` 応答ファイルで指定した設定に基づいて、以下のアクションを実行します。
+ **CopyProfile**: Windows Sysprep は、組み込まれた管理者のプロファイルを含むすべてのユーザープロファイルを削除するように設定できます。この設定は、組み込まれた管理者アカウントを保持するため、アカウントで作成したすべてのカスタム設定は新しいイメージに引き継がれます。デフォルト値は `True` です。

  **CopyProfile** は、デフォルトのプロファイルを既存のローカル管理者プロファイルに置き換えます。Windows Sysprep の実行後にログインしたすべてのアカウントは、最初のログイン時にそのプロファイルとその内容のコピーを受け取ります。

  新しいイメージに引き継ぐ特定のユーザープロファイルがない場合、この設定を `False` に変更します。Windows Sysprep はすべてのユーザープロファイルを削除します (これにより時間とディスク領域が節約されます)。
+ **タイムゾーン**: タイムゾーンはデフォルトで世界時 (UTC) に設定されます。
+ **順序 1 の同期コマンド**: システムは次のコマンドを実行して、管理者アカウントを有効化し、パスワード条件を指定します。

  ```
  net user Administrator /ACTIVE:YES /LOGONPASSWORDCHG:NO /EXPIRES:NEVER /PASSWORDREQ:YES
  ```
+ **順序 2 の同期コマンド**: システムは、管理者パスワードを組み換えます。このセキュリティ対策の目的は、`setAdminAccount` のタスクを設定していない場合、Windows Sysprep の完了後にインスタンスへのアクセスを防ぐことです。

  システムは、ローカルの起動エージェントディレクトリ (`C:\Program Files\Amazon\EC2Launch\`) から次のコマンドを実行します。

  ```
  EC2Launch.exe internal randomize-password --username Administrator
  ```
+ リモートデスクトップ接続を有効にするため、システムはターミナルサーバーの `fDenyTSConnections` レジストリキーを false に設定します。

### OOBE のステップ
<a name="sysprep-oobe-ec2launchv2"></a>

1. システムは EC2Launch v2 応答ファイルを使用して以下の設定を指定します。
   + `<InputLocale>en-US</InputLocale>`
   + `<SystemLocale>en-US</SystemLocale>`
   + `<UILanguage>en-US</UILanguage>`
   + `<UserLocale>en-US</UserLocale>`
   + `<HideEULAPage>true</HideEULAPage>`
   + `<HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE>`
   + `<ProtectYourPC>3</ProtectYourPC>`
   + `<BluetoothTaskbarIconEnabled>false</BluetoothTaskbarIconEnabled>`
   + `<TimeZone>UTC</TimeZone>`
   + `<RegisteredOrganization>Amazon.com</RegisteredOrganization>`
   + `<RegisteredOwner>EC2</RegisteredOwner>`
**注記**  
一般化ステップと特殊化ステップの実行中、EC2Launch v2 によって OS のステータスがモニタリングされます。OS が Sysprep のステップにあることが EC2Launch v2 によって検出された場合、以下のメッセージがシステムログに発行されます。  
Windows is being configured. SysprepState=IMAGE\$1STATE\$1UNDEPLOYABLE

1. システムは EC2Launch v2 を実行します。

## Sysprep 後
<a name="sysprep-post-ec2launchv2"></a>

Windows Sysprep が完了すると、EC2Launch v2 によって以下のメッセージがコンソール出力に送信されます。

```
Windows sysprep configuration complete.
```

次に、EC2Launch v2 は以下のアクションを実行します。

1. `agent-config.yml` ファイルの内容を読み取り、設定されたタスクを実行します。

1. `preReady` ステージのすべてのタスクを実行します。

1. 完了したら、`Windows is ready` メッセージをインスタンスのシステムログに送信します。

1. `PostReady` ステージのすべてのタスクを実行します。

EC2Launch v2 の詳細については、「[EC2 Windows インスタンスの起動時に EC2Launch v2 エージェントを使用してタスクを実行する](ec2launch-v2.md)」を参照してください。

## EC2Launch v2 で Windows Sysprep を実行する
<a name="sysprep-gui-procedure-ec2launchv2"></a>

以下の手順に従って、EC2Launch v2 で Windows Sysprep を使用して標準化 AMI を作成します。

1. Amazon EC2 コンソールで、複製する AMI の場所を特定します。

1. Windows インスタンスを起動して接続します。

1. カスタム設定

   1. Windows の **[スタート]** メニューから、**[Amazon EC2Launch 設定]** を検索して選択します。**[Amazon EC2Launch 設定]** ダイアログボックスのオプションと設定の詳細については、「[EC2Launch v2 設定を Windows インスタンスに構成する](ec2launch-v2-settings.md)」を参照してください。

   1. 変更を加えた場合、シャットダウンする前に **[保存]** を選択してください。

1. **[Sysprep を使用してシャットダウン]** または **[Sysprep を使用せずにシャットダウン]** を選択します。

Windows Sysprep を実行しインスタンスをシャットダウンするかどうか確認を求められたら **[はい]** をクリックします。EC2Launch v2 は Windows Sysprep を実行します。次に、インスタンスからログオフされ、インスタンスがシャットダウンされます。Amazon EC2 コンソールの [**Instances (インスタンス)**] ページでは、インスタンスの状態が `Running` から `Stopping` に変わった後、`Stopped` に変わります。この状態になれば、インスタンスから AMI を安全に作成できます。

コマンドラインから Windows Sysprep ツールを手動で呼び出すには、次のコマンドを使います。

```
"%programfiles%\amazon\ec2launch\ec2launch.exe" sysprep --shutdown=true
```

# EC2Launch で Windows Sysprep を使って AMI を作成する
<a name="ec2launch-sysprep"></a>

EC2Launch エージェントがインストールされたインスタンスからイメージを作成すると、EC2Launch はイメージが作成されたときに特定のタスクを実行します。これには Windows Sysprep を使用した作業が含まれます。詳細については、「[Windows Sysprep のステップ](ami-create-win-sysprep.md#sysprep-phases)」を参照してください。

EC2Launch は、AMI でイメージ準備プロセスを自動化および保護する Windows Sysprep 用のデフォルトの応答ファイルとバッチファイルを提供します。これらのファイルの変更はオプションです。デフォルトでは、これらのファイルは `C:\ProgramData\Amazon\EC2-Windows\Launch\Sysprep` ディレクトリにあります。

**重要**  
Windows Sysprep を使用してインスタンスのバックアップを作成しないでください。Windows Sysprep はシステム固有の情報を削除します。この情報を削除すると、インスタンスバックアップで意図しない結果が生じる可能性があります。

**Topics**
+ [Windows Sysprep の EC2Launch 応答ファイルとバッチファイル](#ec2launch-sysprep-answer-batch)
+ [EC2Launch で Windows Sysprep を実行する](#ec2launch-sysprep-running)
+ [カスタム AMI の起動時に Server 2016 以降のメタデータ/KMS ルートを更新する](#update-metadata-KMS)

## Windows Sysprep の EC2Launch 応答ファイルとバッチファイル
<a name="ec2launch-sysprep-answer-batch"></a>

Windows Sysprep の EC2Launch 応答ファイルとバッチファイルには以下のものが含まれます。

`Unattend.xml`  
これがデフォルトの応答ファイルです。`SysprepInstance.ps1` を実行するか、ユーザーインターフェイスで **ShutdownWithSysprep** を選択すると、このファイルから設定が読み取られます。

`BeforeSysprep.cmd`  
このバッチファイルをカスタマイズし、EC2Launch が Windows Sysprep を実行する前にコマンドを実行します。

`SysprepSpecialize.cmd`  
このバッチファイルをカスタマイズして、Windows Sysprep の特定化ステップ中にコマンドを実行します。

## EC2Launch で Windows Sysprep を実行する
<a name="ec2launch-sysprep-running"></a>

Windows Server 2016 以降の完全インストール (デスクトップ体験を含む) では、EC2Launch を使用して手動で、または **[EC2 起動設定]** アプリケーションを使用して、Windows Sysprep を実行できます。

**[EC2 起動設定] アプリケーションを使用して Windows Sysprep を実行するには**

1. Amazon EC2 コンソールで、Windows Server 2016 以降の AMI を見つけるか作成します。

1. AMI から Windows インスタンスを起動します。

1. Windows インスタンスに接続し、カスタマイズします。

1. [**EC2LaunchSettings**] アプリケーションを検索して実行します。このアプリケーションは、デフォルトでは `C:\ProgramData\Amazon\EC2-Windows\Launch\Settings` ディレクトリにあります。  
![\[EC2 Launch Settings アプリケーション\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/images/ec2launch-sysprep.png)

1. 必要に応じて、オプションを選択または選択解除します。これらの設定は `LaunchConfig.json` ファイルに保存されます。

1. [**Administrator Password**] で、以下のいずれかを行います。
   + [**Random**] を選択します。EC2Launch は、ユーザーのキーを使用してパスワードを生成し、暗号化します。この設定はインスタンス起動後に無効になるため、インスタンスを再起動したり、停止して起動した場合でもパスワードは保持されます。
   + [**Specify**] を選択し、システム要件を満たすパスワードを入力します。このパスワードはクリアテキストとして `LaunchConfig.json` に保存され、Windows Sysprep で管理者パスワードが設定されると削除されます。ここでシャットダウンした場合、パスワードはすぐに設定されます。EC2Launch は、ユーザーのキーを使用してパスワードを暗号化します。
   + [**DoNothing**] を選択して、`unattend.xml` ファイルでパスワードを指定します。`unattend.xml` でパスワードを指定しない場合、管理者アカウントは無効になります。

1. [**Shutdown with Sysprep (Sysprep を使用してシャットダウン)**] を選択します。

**EC2Launch を使用して手動で Windows Sysprep を実行するには**

1. Amazon EC2 コンソールで、複製する Windows Server 2016 以降の Datacenter エディション AMI を見つけるか作成します。

1. Windows インスタンスを起動して接続します。

1. インスタンスをカスタマイズします。

1. `LaunchConfig.json` ファイルで設定を指定します。デフォルトでは、このファイルは `C:\ProgramData\Amazon\EC2-Windows\Launch\Config` ディレクトリにあります。

   `adminPasswordType` で、次のいずれかの値を指定します。  
`Random`  
EC2Launch は、ユーザーのキーを使用してパスワードを生成し、暗号化します。この設定はインスタンス起動後に無効になるため、インスタンスを再起動したり、停止して起動した場合でもパスワードは保持されます。  
`Specify`  
EC2Launch は、`adminPassword` で指定したパスワードを使用します。指定したパスワードがシステム要件を満たさない場合は、代わりに EC2Launch によってランダムなパスワードが生成されます。このパスワードはクリアテキストとして `LaunchConfig.json` に保存され、Windows Sysprep で管理者パスワードが設定されると削除されます。EC2Launch は、ユーザーのキーを使用してパスワードを暗号化します。  
`DoNothing`  
EC2Launch は、`unattend.xml` ファイルで指定したパスワードを使用します。`unattend.xml` でパスワードを指定しない場合、管理者アカウントは無効になります。

1. (オプション) 必要に応じて、`unattend.xml` およびその他の設定ファイルで設定を指定します。手動のインストールを計画している場合は、これらのファイルに変更を加える必要はありません。デフォルトでは、このファイルは `C:\ProgramData\Amazon\EC2-Windows\Launch\Sysprep` ディレクトリにあります。

1. Windows PowerShell で、`./InitializeInstance.ps1 -Schedule` を実行します。デフォルトでは、このスクリプトは `C:\ProgramData\Amazon\EC2-Windows\Launch\Scripts` ディレクトリにあります。このスクリプトは、次の起動中に初期化するようインスタンスをスケジュールします。次のステップで `SysprepInstance.ps1` スクリプトを実行する前に、このスクリプトを実行する必要があります。

1. Windows PowerShell で、`./SysprepInstance.ps1` を実行します。デフォルトでは、このスクリプトは `C:\ProgramData\Amazon\EC2-Windows\Launch\Scripts` ディレクトリにあります。

ユーザーは自動的にログオフさせられ、インスタンスがシャットダウンします。Amazon EC2 コンソールの [**Instances (インスタンス)**] ページを見ると、インスタンスの状態が `Running` から `Stopping` に、そして `Stopped` へ変わるのがわかります。この状態になれば、インスタンスから AMI を安全に作成できます。

## カスタム AMI の起動時に Server 2016 以降のメタデータ/KMS ルートを更新する
<a name="update-metadata-KMS"></a>

カスタム AMI の起動時に Server 2016 以降のメタデータ/KMS ルートを更新するには、以下のいずれかの操作を行います。
+ EC2LaunchSettings GUI (C:\$1ProgramData\$1Amazon\$1EC2-Windows\$1Launch\$1Settings\$1Ec2LaunchSettings.exe) を実行し、Windows Sysprep を使用してシャットダウンするオプションを選択します。
+ AMI を作成する前に、EC2LaunchSettings を実行し、Windows Sysprep を使用しないでシャットダウンします。これにより、次回の起動時に実行される EC2 Launch の初期化タスクが設定され、インスタンスのサブネットに基づいてルートが設定されます。
+ [PowerShell](ec2launch-config.md#ec2launch-inittasks) から AMI を作成する前に、EC2 Launch の初期化タスクを手動で再スケジュールします。
**重要**  
タスクを再スケジューリングする前に、デフォルトではパスワードリセット動作となることに注意してください。
+ Windows のライセンス認証またはインスタンスメタデータの通信に関するエラーが発生している実行中のインスタンスのルートを更新するには、「[Windows のライセンス認証を行うことができません](common-messages.md#activate-windows)」を参照してください。

# EC2Config で Windows Sysprep を使って AMI を作成する
<a name="sysprep-using"></a>

EC2Config サービスがインストールされたインスタンスからイメージを作成すると、EC2Config はイメージが作成されたときに特定のタスクを実行します。これには Windows Sysprep を使用した作業が含まれます。詳細については、「[Windows Sysprep のステップ](ami-create-win-sysprep.md#sysprep-phases)」を参照してください。

**Topics**
+ [Windows Sysprep のアクション](#sysprep-actions)
+ [Sysprep 後](#sysprep-post)
+ [EC2Config サービスで Windows Sysprep を実行する](#sysprep-gui-procedure)

## Windows Sysprep のアクション
<a name="sysprep-actions"></a>

イメージを準備するために、Windows Sysprep と EC2Config サービスは次のアクションを実行します。

1. **[EC2 サービスのプロパティ]** ダイアログボックスで **[Sysprep を使用してシャットダウンする]** を選択すると、システムは **ec2config.exe -sysprep** コマンドを実行します。

1. EC2Config サービスは `BundleConfig.xml` ファイルの内容を読み込みます。デフォルトでは、このファイルは `C:\Program Files\Amazon\Ec2ConfigService\Settings` ディレクトリにあります。

    `BundleConfig.xml` ファイルには、以下の設定が含まれています。これらの設定は変更できます：
   + **AutoSysprep**: Windows Sysprep を自動で使用するかどうかを示します。[EC2 サービスプロパティ] ダイアログボックスで Windows Sysprep を実行した場合、この値を変更する必要はありません。デフォルト値は `No` です。
   + **SetRDPCertificate**: リモートデスクトップサーバーに自己署名証明書を設定します。これによって、リモートデスクトッププロトコール (RDP) を安全に使用して、インスタンスに接続できます。新しいインスタンスに証明書が必要な場合は、値を `Yes` に変更します。この設定は、Windows Server 2012 のインスタンスでは使用されません。これらのオペレーティングシステムが独自の証明書を生成できるためです。デフォルト値は `No` です。
   + **SetPasswordAfterSysprep**: 新しく起動したインスタンスにランダムなパスワードを設定し、ユーザー起動キーで暗号化して、暗号化されたパスワードをコンソールに出力します。新しいインスタンスにランダムに暗号化されたパスワードを設定しない場合は、値 `No` に変更します。デフォルト値は `Yes` です。
   +  **PreSysprepRunCmd**: 実行するコマンドの場所。コマンドは、デフォルトでは `C:\Program Files\Amazon\Ec2ConfigService\Scripts\BeforeSysprep.cmd` ディレクトリにあります。

1. システムは `BeforeSysprep.cmd` を実行します。このコマンドは、次のレジストリキーを作成します。

   ```
   reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 1 /f
   ```

   レジストリキーは再度有効になるまで RDP 接続を無効にします。RDP 接続を無効にすることは、安全上の観点より必要となります。これは、Windows Sysprep 実行後の最初のブートセッション中、RDP が接続できるわずかな時間の間に管理者パスワードが空白となるためです。

1. EC2Config サービスは、以下のコマンドを実行して Windows Sysprep を呼び出します。

   ```
   sysprep.exe /unattend: "C:\Program Files\Amazon\Ec2ConfigService\sysprep2008.xml" /oobe /generalize /shutdown
   ```

### ステップの一般化
<a name="sysprep-generalize"></a>
+ このツールは、コンピュータ名や SID のようなイメージに固有の情報と設定を削除します。インスタンスがドメインのメンバーである場合は、そのドメインから削除されます。`sysprep2008.xml` 応答ファイルには、このステップに影響する以下の設定が含まれています。
  + **PersistAllDeviceInstalls**: この設定は、Windows セットアップがデバイスを削除したり再設定することを防ぐことによってイメージ準備プロセスを高速化します。これは、Amazon AMI を実行するためには特定のドライバーが必要となり、これらのドライバーの再検出には時間がかかるためです。
  + **DoNotCleanUpNonPresentDevices**: この設定では、現在存在しないデバイス用のプラグアンドプレイ情報を保持します。
+ Windows Sysprep は AMI の作成の準備完了後に OS をシャットダウンします。システムは、新しいインスタンスを起動するか、または元のインスタンスを起動します。

### ステップの特定化
<a name="sysprep-specialize"></a>

システムは、コンピュータ名や SID など OS に固有の要件を生成します。またシステムは、sysprep2008.xml 応答ファイルで指定した設定に基づいて、次のアクションを実行します。
+ **CopyProfile**: Windows Sysprep は、組み込まれた管理者のプロファイルを含むすべてのユーザープロファイルを削除するように設定できます。この設定は、組み込まれた管理者アカウントを保持するため、アカウント作成したすべてのカスタム設定は新しいイメージに引き継がれます。デフォルト値は True です。

  **CopyProfile** は、デフォルトのプロファイルを既存のローカル管理者プロファイルに置き換えます。Windows Sysprep の実行後にログインしたすべてのアカウントは、最初のログイン時にそのプロファイルとその内容のコピーを受け取ります。

  新しいイメージに引き継ぐことを希望する特定のユーザープロファイルがない場合、この設定を「いいえ」に変更します。Windows Sysprep はすべてのユーザーを削除します。これによって時間とディスク領域が節約されます。
+ **タイムゾーン**: タイムゾーンはデフォルトで世界時 (UTC) に設定されます。
+ **順序 1 の同期コマンド**: システムは次のコマンドを実行して、管理者アカウントを有効化し、パスワード条件を指定します。

  **net user Administrator /ACTIVE:YES /LOGONPASSWORDCHG:NO /EXPIRES:NEVER /PASSWORDREQ:YES**
+ **順序 2 の同期コマンド**: システムは、管理者パスワードを組み換えます。このセキュリティ対策の目的は、ec2setpassword 設定を有効にしていない場合、Windows Sysprep の完了後にインスタンスへのアクセスを防ぐことです。

  C:\$1Program Files\$1Amazon\$1Ec2ConfigService\$1ScramblePassword.exe" -u Administrator
+ **順序 3 の同期コマンド**: システムは次のコマンドを実行します。

  C: \$1Program Files\$1Amazon\$1Ec2ConfigService\$1Scripts\$1SysprepSpecializePhase.cmd

   このコマンドは、RDP を再度有効にする次のレジストリキーを追加します。

  reg add "HKEY\$1LOCAL\$1MACHINE\$1SYSTEM\$1CurrentControlSet\$1Control\$1Terminal Server" /v fDenyTSConnections /t REG\$1DWORD /d 0 /f

### OOBE のステップ
<a name="sysprep-oobe"></a>

1. EC2Config サービス応答ファイルを使用すると、システムは次の設定を指定します。
   + <InputLocale>en-US</InputLocale>
   + <SystemLocale>en-US</SystemLocale>
   + <UILanguage>en-US</UILanguage>
   + <UserLocale>en-US</UserLocale>
   + <HideEULAPage>true</HideEULAPage>
   + <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE>
   + <NetworkLocation>その他</NetworkLocation>
   + <ProtectYourPC>3</ProtectYourPC>
   + <BluetoothTaskbarIconEnabled>false</BluetoothTaskbarIconEnabled>
   + <TimeZone>UTC</TimeZone>
   + <RegisteredOrganization>Amazon.com</RegisteredOrganization>
   + <RegisteredOwner>Amazon</RegisteredOwner>
**注記**  
一般化と特定化ステップにおいて、EC2Config サービスは OS のステータスをモニタリングします。OS が Sysprep のステップにあることが EC2Config によって検出された場合、以下のメッセージがシステムログに発行されます。  
EC2ConfigMonitorState: 0 Windows is being configured. SysprepState=IMAGE\$1STATE\$1UNDEPLOYABLE

1. OOBE フェーズが完了すると、システムは `SetupComplete.cmd` から `C:\Windows\Setup\Scripts\SetupComplete.cmd` を実行します。2015 年 4 月以前の Amazon パブリック AMI では、このファイルは空となり、イメージには何も実行されません。2015 年 4 月以降のパブリック AMI では、ファイルに **call "C:\$1Program Files\$1Amazon\$1Ec2ConfigService\$1Scripts\$1PostSysprep.cmd"** の値が含まれます。

1. システムが `PostSysprep.cmd` を実行し、次の操作を行います。
   + ローカル管理者パスワード期限切れにならないよう設定します。パスワードの期限が切れた場合、管理者がログインできないことがあります。
   + MSSQLServer マシン名を設定すると (インストールされている場合)、名前は AMI で同期されます。

## Sysprep 後
<a name="sysprep-post"></a>

Windows Sysprep が完了したら、EC2Config サービスは次のメッセージをコンソール出力へ送信します。

```
Windows sysprep configuration complete.
			Message: Sysprep Start
			Message: Sysprep End
```

そして、EC2Config は次のアクションを実行します。

1. config.xml ファイルのコンテンツを読み取り、すべての有効なプラグインを示します。

1. 「Windows の準備が終了する前」のすべてのプラグインを同時に実行します。
   + Ec2SetPassword
   + Ec2SetComputerName
   + Ec2InitializeDrives
   + Ec2EventLog
   + Ec2ConfigureRDP
   + Ec2OutputRDPCert
   + Ec2SetDriveLetter
   + Ec2WindowsActivate
   + Ec2DynamicBootVolumeSize

1. これが完了すると、「Windows の準備完了」のメッセージをインスタンスのシステム ログに送信します。

1. 「Windows の準備が終了した後」のすべてのプラグインを同時に実行します
   + Amazon CloudWatch Logs 
   + UserData
   + AWS Systems Manager (Systems Manager) 

Windows プラグインの詳細については、「[EC2Config サービスを使用して、EC2 レガシー Windows オペレーティングシステムインスタンスの起動時にタスクを実行する](ec2config-service.md)」を参照してください。

## EC2Config サービスで Windows Sysprep を実行する
<a name="sysprep-gui-procedure"></a>

以下の手順に従って、Windows Sysprep と EC2Config サービスを使用して標準化 AMI を作成します。

1. Amazon EC2 コンソールで複製を希望する AMI を見つけるか、[作成](creating-an-ami-ebs.md)します。

1. Windows インスタンスを起動して接続します。

1. カスタマイズする。

1. EC2Config サービス応答ファイルで特定設定を指定します。

   `C:\Program Files\Amazon\Ec2ConfigService\sysprep2008.xml`

1. Windows の [**スタート**] メニューから [**すべてのプログラム**] を選び、次に [**EC2ConfigService 設定**] を選択します。

1. [**Ec2 サービスプロパティ**] ダイアログボックスで [**イメージ**] タブを選択します。Ec2 サービスプロパティダイアログボックスのオプションと設定についての詳細は、「[Ec2 サービスプロパティ](ec2config-service.md)」を参照してください。

1. 管理者パスワードのオプションを選択してから、[**Shutdown with Sysprep**] または [**Shutdown without Sysprep**] を選択します。EC2Config は、選択したパスワードオプションに基づいて設定ファイルを編集します。
   + **ランダム**: EC2Config はパスワードを生成してユーザーのキーで暗号化し、暗号化されたパスワードをコンソールに表示します。この設定は初回起動後に無効になるため、インスタンスを再起動したり、停止して起動した場合でもパスワードは保持されます。
   + **指定**: パスワードは、Windows Sysprep 応答ファイルに暗号化されていない形式 (平文) で保存されます。Windows Sysprep が次に実行されると、管理者パスワードに設定されます。ここでシャットダウンした場合、パスワードはすぐに設定されます。サービスを再開すると、管理者パスワードは削除されます。このパスワードは後で取得できないため覚えておくことが重要です。
   + **既存のパスワードを保持**: Windows Sysprep の実行時や EC2Config の再起動時に、管理者アカウントの既存のパスワードは変更されません。このパスワードは後で取得できないため覚えておくことが重要です。

1. [**OK**] を選択してください。

Windows Sysprep を実行しインスタンスをシャットダウンするかどうか確認を求められたら **[はい]** をクリックします。これにより、EC2Config が Windows Sysprep を実行します。次に、ユーザーは自動的にログオフさせられ、インスタンスがシャットダウンします。Amazon EC2 コンソールの [**インスタンス**] ページを見ると、インスタンスの状態が `Running` から `Stopping`、最終的に `Stopped` に変わるのがわかります。この状態になれば、インスタンスから AMI を安全に作成できます。

コマンドラインから Windows Sysprep ツールを手動で呼び出すには、次のコマンドを使います。

```
"%programfiles%\amazon\ec2configservice\"ec2config.exe -sysprep"" 
```

**注記**  
CMD シェルが C:\$1Program Files\$1Amazon\$1EC2ConfigService\$1 ディレクトリ内に既に存在する場合、コマンドの二重引用符は不要です。

ただし、この操作は慎重に行ってください。`Ec2ConfigService\Settings` フォルダで指定した XML ファイルオプションが正しくないと、インスタンスに接続できなくなる場合があります。設定ファイルの詳細については、「[EC2Config の設定ファイル](ec2config-service.md#UsingConfigXML_WinAMI)」を参照してください。コマンドラインから Windows Sysprep を設定して実行する例については、「`Ec2ConfigService\Scripts\InstallUpdates.ps1`」を参照してください。

# Amazon EC2 AMI のコピー
<a name="CopyingAMIs"></a>

複数のリージョンを横断する、一貫性のある Amazon EC2 インスタンス設定が必要な場合は、すべてのインスタンスを起動するための単一の Amazon マシンイメージ (AMI) をテンプレートとして使用します。ただし、AMI はリージョンに固有のリソースであるため、特定の AWS リージョンでインスタンスを起動するときは、そのリージョンに AMI を配置する必要があります。したがって複数のリージョンで同じ AMI を使用するときは、その AMI をソースのリージョンからターゲットとなる各リージョンにコピーする必要があります。

AMI をコピーする方法は、*同じ[パーティション](https://docs.aws.amazon.com/glossary/latest/reference/glos-chap.html#partition)内*のリージョン間でコピーするか、*異なるパーティション*のリージョン間でコピーするかによって異なります。
+ **クロスリージョンコピー** – AMI を*同じパーティション内*のリージョン間でコピーします。例えば、商用パーティション内のリージョン間でコピーするなどです。この方法については本トピックで説明します。
+ **クロスパーティションコピー** – AMI を*特定のパーティションから別のパーティション*にコピーします。例えば、商用パーティションから AWS GovCloud (US) パーティションにコピーするなどです。この方法の詳細については「[AMI を保存および復元する許可された AMI](ami-store-restore.md)」を参照してください。
+ **クロスアカウントコピー** – 別の AWS アカウントが[お使いの AWS アカウントと共有している](sharingamis-explicit.md) AMI のコピーを作成します。この方法については本トピックで説明します。

クロスリージョンコピーとクロスアカウンコピーの完了までに要する時間は、ベストエフォートベースとなります。完了時間をコントロールする必要がある場合は、15 分から 48 時間までの範囲で完了時間を指定して、AMI が所定の時間内にコピーされるようにすることができます。時間ベースの AMI コピー操作には追加料金が適用されます。詳細については、「*Amazon EBS ユーザーガイド*」の「[料金と請求](https://docs.aws.amazon.com/ebs/latest/userguide/time-based-copies.html)」を参照してください。

**Topics**
+ [考慮事項](#copy-ami-considerations)
+ [コスト](#copy-ami-costs)
+ [Amazon EC2 AMI をコピーするための権限を付与する](copy-ami-permissions.md)
+ [AMI のコピー](#ami-copy-steps)
+ [保留中の AMI コピー操作の中止](#ami-copy-stop)
+ [Amazon EC2 AMI コピーの仕組み](how-ami-copy-works.md)

## 考慮事項
<a name="copy-ami-considerations"></a>
+ **AMI をコピーするためのアクセス許可** – IAM ポリシーを使用すると、AMI をコピーするためのアクセス許可をユーザーに付与したり、それを拒否したりできます。2024 年 10 月 28 日以降、ソース AMI の `CopyImage` アクションにリソースレベルのアクセス許可を指定できます。新しい AMI のリソースレベルのアクセス許可は以前と同様に利用できます。
+ **起動許可と Amazon S3 バケット許可** – AWS は、起動許可と Amazon S3 バケット許可をソース AMI から新しい AMI にコピーしません。コピー操作が完了したら、新しいAMIに起動パーミッションと Amazon S3バケットパーミッションが適用できます。
+ **タグ** – コピーできるのは、ソース AMI にアタッチされているユーザー定義の AMI タグだけです。システムタグ (`aws:` プレフィックスが付いている) や、他の AWS アカウント がアタッチしたユーザー定義タグはコピーされません。AMI をコピーするときに、新しい AMI とそのバックアップスナップショットに新しいタグをアタッチできます。
+ **時間ベースの AMI コピーのクォータ** – *累積スナップショットコピースループットクォータ*に達すると、それ以降の時間ベースの AMI コピーリクエストは失敗します。詳細については「*Amazon EBS ユーザーガイド*」の「[クォータ](https://docs.aws.amazon.com/ebs/latest/userguide/time-based-copies.html#time-based-copies-quota)」を参照してください。
+ **サポートされている送信元と送信先のコピー** – コピーできるかどうか、および新しい AMI で許可される送信先はソース AMI の場所によって決まります。
  + 1 つのリージョンにあるソース AMI は、そのリージョン内、別のリージョン、そのリージョンに関連付けられた Outpost、またはそのリージョン内のローカルゾーンにコピーできます。
  + 1 つのローカルゾーンにあるソース AMI は、そのローカルゾーン内、そのローカルゾーンの親リージョン、または同じ親リージョンを持つ他の特定のローカルゾーンにコピーできます。
  + Outpost にあるソース AMI はコピーできません。
+ **送信元と送信先の CLI パラメータ** – CLI を使用する場合、次のパラメータを使用して、コピーする AMI の送信元の場所と新しい AMI の送信先を指定できます。コピーオペレーションはコピー先リージョンで開始する必要があります。`--region` パラメータを省略すると、AWS CLI 設定で構成されているデフォルトのリージョンがコピー先になります。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/CopyingAMIs.html)

## コスト
<a name="copy-ami-costs"></a>

完了時間を指定しない場合、AMI のコピーに料金はかかりません。ただし、時間を指定して AMI をコピーした場合は、追加料金がかかります。詳細については、「*Amazon EBS ユーザーガイド*」の「[料金と請求](https://docs.aws.amazon.com/ebs/latest/userguide/time-based-copies.html#time-based-copies-pricing)」を参照してください。

標準のストレージ料金とデータ転送料金が適用されます。EBS-backed AMI をコピーする場合は、追加の EBS スナップショットのストレージに対して料金が発生します。

# Amazon EC2 AMI をコピーするための権限を付与する
<a name="copy-ami-permissions"></a>

EBS-backed AMI または Amazon S3-backed AMI をコピーするには、次の IAM アクセス許可が必要です。
+ `ec2:CopyImage` – AMI をコピーするアクセス許可。EBS-backed AMI の場合、AMI のバックアップするスナップショットをコピーするアクセス許可も付与します。
+ `ec2:CreateTags` – ターゲット AMI にタグ付けするアクセス許可。EBS-backed AMI の場合、ターゲット AMI のバックアップするスナップショットにタグ付けするアクセス許可も付与します。

インスタンスストアバック AMI をコピーする場合は、*追加で*次の IAM アクセス許可が必要です。
+ `s3:CreateBucket` – 新しい AMI のターゲットリージョンに S3 バケットを作成するアクセス許可
+ `s3:PutBucketOwnershipControls` – 新しく作成された S3 バケットACLs を有効にして `aws-exec-read` [既定 ACL](https://docs.aws.amazon.com/AmazonS3/latest/userguide/acl-overview.html#canned-acl) でオブジェクトを書き込めるようにするアクセス許可
+ `s3:GetBucketAcl` – ソースバケットの ACL を読み取るアクセス許可
+ `s3:ListAllMyBuckets` – ターゲットリージョンで AMI の既存の S3 バケットを検出するアクセス許可
+ `s3:GetObject` – ソースバケットのオブジェクトを読み取るアクセス許可
+ `s3:PutObject` – ターゲットバケットにオブジェクトを書き込むアクセス許可
+ `s3:PutObjectAcl` – ターゲットバケットの新しいオブジェクトのアクセス許可を書き込むアクセス許可

**注記**  
2024 年 10 月 28 日以降、ソース AMI の `CopyImage` アクションにリソースレベルのアクセス許可を指定できます。ターゲット AMI のリソースレベルのアクセス許可は以前と同様に利用できます。詳細については、「*サービス認可リファレンス*」の「[Amazon EC2 で定義されたアクション](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonec2.html#amazonec2-actions-as-permissions)」でテーブル内の **[CopyImage]** を参照してください。

## EBS-backed AMI をコピーし、ターゲット AMI とスナップショットにタグ付けするための IAM ポリシーの例
<a name="permissions-to-copy-ebs-backed-ami"></a>

次のポリシー例では、EBS-backed AMI をコピーし、ターゲット AMI とそのバックアップするスナップショットにタグを付けるアクセス許可を付与します。

**注記**  
2024 年 10 月 28 日以降、`Resource` 要素でスナップショットを指定できます。詳細については、「*サービス認可リファレンス*」の「[Amazon EC2 で定義されたアクション](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonec2.html#amazonec2-actions-as-permissions)」でテーブル内の **[CopyImage]** を参照してください。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [{
        "Sid": "PermissionToCopyAllImages",
        "Effect": "Allow",
        "Action": [
            "ec2:CopyImage",
            "ec2:CreateTags"
        ],
        "Resource": [
            "arn:aws:ec2:*::image/*",
            "arn:aws:ec2:*::snapshot/*"
        ]
    }]
}
```

------

## EBS-backed AMI をコピーし、新しいスナップショットのタグ付けを拒否する IAM ポリシーの例
<a name="permissions-to-copy-ebs-backed-ami-but-deny-tagging-new-snapshots"></a>

`ec2:CopySnapshot` アクセス許可は、`ec2:CopyImage` アクセス許可を取得すると自動的に付与されます。新しいバッキングスナップショットにタグ付けするアクセス許可は明示的に拒否し、`ec2:CreateTags` アクションの `Allow` 効果を上書きできます。

次のポリシー例では、EBS-backed AMI をコピーするアクセス許可を付与しますが、ターゲット AMI の新しいバックアップするスナップショットのタグ付けは拒否します。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [{
            "Effect": "Allow",
            "Action": [
                "ec2:CopyImage",
                "ec2:CreateTags"
            ],
            "Resource": [
                "arn:aws:ec2:*::image/*",
                "arn:aws:ec2:*::snapshot/*"
            ]
        },
        {
            "Effect": "Deny",
            "Action": "ec2:CreateTags",
            "Resource": "arn:aws:ec2:::snapshot/*"
        }
    ]
}
```

------

## Amazon S3-backed AMI をコピーし、ターゲット AMI にタグ付けするための IAM ポリシーの例
<a name="permissions-to-copy-instance-store-backed-ami"></a>

次のポリシー例では、指定されたソースバケットの Amazon S3-backed AMI を指定されたリージョンにコピーし、ターゲット AMI にタグ付けするアクセス許可を付与します。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [{
            "Sid": "PermissionToCopyAllImages",
            "Effect": "Allow",
            "Action": [
                "ec2:CopyImage",
                "ec2:CreateTags"
            ],
            "Resource": "arn:aws:ec2:*::image/*"
        },
        {
            "Effect": "Allow",
            "Action": "s3:ListAllMyBuckets",
            "Resource": [
                "arn:aws:s3:::*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": "s3:GetObject",
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-source-bucket/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:CreateBucket",
                "s3:GetBucketAcl",
                "s3:PutObjectAcl",
                "s3:PutObject"
            ],
            "Resource": [
                "arn:aws:s3:::amis-for-111122223333-in-us-east-2-hash"
            ]
        }
    ]
}
```

------

AMI ソースバケットの Amazon リソースネーム (ARN) を検索するには、[https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) で Amazon EC2 コンソールを開き、ナビゲーションペインで [**AMI**] を選択し、[**ソース**] 列でバケット名を特定します。

**注記**  
`s3:CreateBucket` アクセス許可は、初めて Amazon S3-backed AMI を個々のリージョンにコピーするときにのみ必要です。その後、リージョンですでに作成された Amazon S3 バケットは、そのリージョンにコピーする将来のすべての AMI に保存されます。

## AMI のコピー
<a name="ami-copy-steps"></a>

コピーできるのは、自分が所有している AMI、または別のアカウントから共有された AMI です。サポートされている送信元と送信先の組み合わせについては、「[考慮事項](#copy-ami-considerations)」を参照してください。

------
#### [ Console ]

**AMI をコピーするには**

1. Amazon EC2 コンソール ([https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)) を開きます。

1. コンソールのナビゲーションバーから、AMI を含むリージョンを選択してください。

1. ナビゲーションペインで、**[AMI]** を選択し、リージョンで利用できる AMI のリストを表示します。

1. コピーする AMI が表示されない場合は、別のフィルターを選択してください。AMI は、**[自己所有]**、**[プライベートイメージ]**、**[パブリックイメージ]**、および **[無効化されたイメージ]** でフィルタリングできます。

1. コピーする AMI を選択して、**[アクション]**、**[AMI のコピー]** の順に選択してください。

1. **[Amazon マシンイメージ (AMI) をコピー]** のページで、次の情報を指定します。

   1. **[AMI コピー名]** : 新しい AMI の名前。この名前にはオペレーティングシステム情報を含めることができます (Amazon EC2 は AMI の詳細を表示するときにこの情報を提供しません)。

   1. **[AMI コピーの説明]** : デフォルトでは、オリジナルからコピーを見分けられるように、ソース AMI に関する情報が説明に含まれています。この説明は必要に応じて変更できます。

   1. **[送信先リージョン]** : AMI をコピーするリージョン。詳細については、「[リージョン間のコピー](how-ami-copy-works.md#copy-amis-across-regions)」および「[アカウント間のコピー](how-ami-copy-works.md#copy-ami-across-accounts)」を参照してください。

   1. **[タグのコピー]**: このチェックボックスをオンにし、AMI のコピー時にユーザー定義の AMI タグを含めます。システムタグ (`aws:` プレフィックスが付いている) や、他の AWS アカウント がアタッチしたユーザー定義タグはコピーされません。

   1. **時間ベースのコピー**: 次のように、指定した時間内にコピーを完了させるか、ベストエフォートベースで完了させるかを指定できます。
      + 指定した時間内にコピーを完了させるには:
        + **[時間ベースのコピーを有効にする]** を選択します。
        + **[完了時間]** に、コピーに割り当てる時間 (分) を 15 分単位で入力します。完了期間は、AMI に関連付けられているすべてのスナップショットに適用されます。

          詳細については、「*Amazon EBS ユーザーガイド*」の「[料金と請求](https://docs.aws.amazon.com/ebs/latest/userguide/time-based-copies.html)」を参照してください。
      + ベストエフォートベースでコピーを完了するには:
        + **[時間ベースのコピーを有効にする]** の選択を外したままにします。

   1. (EBS バックされた AMI のみ) **[AMI コピーの EBS スナップショットを暗号化]**: ターゲットスナップショットを暗号化するか、別のキーを使用して再暗号化する場合、このチェックボックスを選択してください。デフォルトで暗号化を有効にしている場合、**[AMI コピーの EBS スナップショットを暗号化]** チェックボックスがオンになり、オフにできません。詳細については、「[暗号化とコピー](how-ami-copy-works.md#ami-copy-encryption)」を参照してください。

   1. (EBS-backed AMI のみ) **[KMS キー]**: ターゲットスナップショットを暗号化するための KMS キー。

   1. **[タグ]**: 新しい AMI と新しいスナップショットに同じタグを付けることも、異なるタグでタグ付けすることもできます。
      + 新しい AMI と新しいスナップショットに*同じタグ*を付けるには、**[イメージとスナップショットに対し一緒にタグを付けます]** を選択してください。新しい AMI と作成されるすべてのスナップショットには、同じタグが適用されます。
      + 新しい AMI と新しいスナップショットに*異なる*タグを付けるには、**[イメージとスナップショットに対し個別にタグを付けます]** を選択してください。新しい AMI と作成されるスナップショットには、異なるタグが適用されます。ただし、作成されるすべての新しいスナップショットには同じタグが付けられることに注意してください。新しいそれぞれのスナップショットに異なるタグを付けることはできません。

      (オプション) タグを追加するには、[**タグ追加**] を選択し、そのタグのキーと値を入力してください。各タグについて、これを繰り返します。

   1. AMI をコピーする準備ができたら、**[AMI のコピー]** を選択してください。

      新しい AMI の初期ステータスは `Pending` です。ステータスが `Available` になると、AMI のコピー操作は完了です。

------
#### [ AWS CLI ]

**リージョン間で AMI をコピーするには**  
[copy-image](https://docs.aws.amazon.com/cli/latest/reference/ec2/copy-image.html) コマンドを使用します。コピー元リージョンおよび送信先リージョンの両方を指定する必要があります。コピー元のリージョンは、`--source-region` パラメータを使用して指定します。`--region` パラメータを使用して送信先リージョンを指定できます (このパラメータを省略すると AWS CLI 設定で構成されているデフォルトのリージョンが使用されます)。

```
aws ec2 copy-image \
    --source-image-id ami-0abcdef1234567890 \
    --source-region us-west-2 \
    --name my-ami \
    --region us-east-1
```

AMI のコピー時にターゲットスナップショットを暗号化する場合は、追加のパラメータを (`--encrypted` および `--kms-key-id`) を指定する必要があります。

**リージョンからローカルゾーンに AMI をコピーするには**  
[copy-image](https://docs.aws.amazon.com/cli/latest/reference/ec2/copy-image.html) コマンドを使用します。送信元と送信先の両方を指定する必要があります。コピー元のリージョンは、`--source-region` パラメータを使用して指定します。送信先のローカルゾーンは、`--destination-availability-zone` パラメータを使用して指定します (`--destination-availability-zone-id` を使用することもできます)。リージョン内の AMI は、同じリージョン内のローカルゾーンにのみコピーできます。

```
aws ec2 copy-image \
    --source-image-id ami-0abcdef1234567890 \
    --source-region cn-north-1 \
    --destination-availability-zone cn-north-1-pkx-1a \
    --name my-ami \
    --region cn-north-1
```

**ローカルゾーンからリージョンに AMI をコピーするには**  
[copy-image](https://docs.aws.amazon.com/cli/latest/reference/ec2/copy-image.html) コマンドを使用します。送信元と送信先の両方を指定する必要があります。コピー元のリージョンは、`--source-region` パラメータを使用して指定します。`--region` パラメータを使用して送信先リージョンを指定します (このパラメータを省略すると AWS CLI 設定で構成されているデフォルトのリージョンが使用されます)。送信元のローカルゾーンは、指定されたソース AMI ID の場所から継承されます。ローカルゾーンの AMI は、そのローカルゾーンの親リージョンにのみコピーできます。

```
aws ec2 copy-image \
    --source-image-id ami-0abcdef1234567890 \
    --source-region cn-north-1 \
    --name my-ami \
    --region cn-north-1
```

**ローカルゾーン間で AMI をコピーするには**  
[copy-image](https://docs.aws.amazon.com/cli/latest/reference/ec2/copy-image.html) コマンドを使用します。送信元と送信先の両方を指定する必要があります。送信元のローカルゾーンのリージョンは、`--source-region` パラメータを使用して指定します。送信先のローカルゾーンは、`--destination-availability-zone` パラメータを使用して指定します (`--destination-availability-zone-id` を使用することもできます)。送信元のローカルゾーンは、指定されたソース AMI ID の場所から継承されます。`--region` パラメータを使用して送信先ローカルゾーンの親リージョンを指定します (このパラメータを省略すると AWS CLI 設定で構成されているデフォルトのリージョンが使用されます)。

```
aws ec2 copy-image \
    --source-image-id ami-0abcdef1234567890 \
    --source-region cn-north-1 \
    --destination-availability-zone cn-north-1-pkx-1a \
    --name my-ami \
    --region cn-north-1
```

------
#### [ PowerShell ]

**リージョン間で AMI をコピーするには**  
[Copy-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Copy-EC2Image.html) コマンドレットを使用します。コピー元リージョンおよび送信先リージョンの両方を指定する必要があります。コピー元のリージョンは、`-SourceRegion` パラメータを使用して指定します。送信先リージョンは、`-Region` パラメータ、または [Set-AWSDefaultRegion](https://docs.aws.amazon.com/powershell/latest/userguide/pstools-installing-specifying-region.html) コマンドレットを使用して指定できます。

```
Copy-EC2Image `
    -SourceImageId ami-0abcdef1234567890 `
    -SourceRegion us-west-2 `
    -Name my-ami `
    -Region us-east-1
```

AMI のコピー時にターゲットスナップショットを暗号化する場合は、追加のパラメータを (`-Encrypted` および `-KmsKeyId`) を指定する必要があります。

**リージョンからローカルゾーンに AMI をコピーするには**  
[Copy-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Copy-EC2Image.html) コマンドレットを使用します。送信元と送信先の両方を指定する必要があります。コピー元のリージョンは、`-SourceRegion` パラメータを使用して指定します。送信先のローカルゾーンは、`-DestinationAvailabilityZone` パラメータを使用して指定します (`-DestinationAvailabilityZoneId` を使用することもできます)。リージョン内の AMI は、同じリージョン内のローカルゾーンにのみコピーできます。

```
Copy-EC2Image `
    -SourceImageId ami-0abcdef1234567890 `
    -SourceRegion cn-north-1 `
    -DestinationAvailabilityZone cn-north-1-pkx-1a `
    -Name my-ami `
    -Region cn-north-1
```

**ローカルゾーンからリージョンに AMI をコピーするには**  
[Copy-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Copy-EC2Image.html) コマンドレットを使用します。送信元と送信先の両方を指定する必要があります。コピー元のリージョンは、`-SourceRegion` パラメータを使用して指定します。送信先リージョンは、`-Region` パラメータ、または [Set-AWSDefaultRegion](https://docs.aws.amazon.com/powershell/latest/userguide/pstools-installing-specifying-region.html) コマンドレットを使用して指定します。送信元のローカルゾーンは、指定されたソース AMI ID の場所から継承されます。ローカルゾーンの AMI は、そのローカルゾーンの親リージョンにのみコピーできます。

```
Copy-EC2Image `
    -SourceImageId ami-0abcdef1234567890 `
    -SourceRegion cn-north-1 `
    -Name my-ami `
    -Region cn-north-1
```

**ローカルゾーン間で AMI をコピーするには**  
[Copy-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Copy-EC2Image.html) コマンドレットを使用します。送信元と送信先の両方を指定する必要があります。送信元のローカルゾーンのリージョンは、`-SourceRegion` パラメータを使用して指定します。送信先のローカルゾーンは、`-DestinationAvailabilityZone` パラメータを使用して指定します (`-DestinationAvailabilityZoneId` を使用することもできます)。送信元のローカルゾーンは、指定されたソース AMI ID の場所から継承されます。送信先のローカルゾーンの親リージョンは、`-Region` パラメータ、または [Set-AWSDefaultRegion](https://docs.aws.amazon.com/powershell/latest/userguide/pstools-installing-specifying-region.html) コマンドレットを使用して指定できます。

```
Copy-EC2Image `
    -SourceImageId ami-0abcdef1234567890 `
    -SourceRegion cn-north-1 `
    -DestinationAvailabilityZone cn-north-1-pkx-1a `
    -Name my-ami `
    -Region cn-north-1
```

------

## 保留中の AMI コピー操作の中止
<a name="ami-copy-stop"></a>

次の手順を使用して、保留中の AMI コピーを停止できます。

------
#### [ Console ]

**AMI のコピー操作を中止するには**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. ナビゲーションバーのリージョンセレクターから対象のリージョンを選択してください。

1. ナビゲーションペインで [**AMI**] を選択してください。

1. コピーを中止する AMI を選択し、**[アクション]**、**[AMI を登録解除]** を選択してください。

1. 確認を求めるメッセージが表示されたら、**[AMI の登録解除]** を選択してください。

------
#### [ AWS CLI ]

**AMI のコピー操作を中止するには**  
[deregister-image](https://docs.aws.amazon.com/cli/latest/reference/ec2/deregister-image.html) コマンドを使用します。

```
aws ec2 deregister-image --image-id ami-0abcdef1234567890
```

------
#### [ PowerShell ]

**を使用して AMI のコピー操作を中止するには**  
[Unregister-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Unregister-EC2Image.html) コマンドレットを使用します。

```
Unregister-EC2Image -ImageId ami-0abcdef1234567890
```

------

# Amazon EC2 AMI コピーの仕組み
<a name="how-ami-copy-works"></a>

ソース AMI をコピーすると、見た目は同じでもまったく別の*ターゲット* AMI とも呼ばれる新しい AMI になります。ターゲット AMI にはそれ独自の AMI ID があります。ソース AMI は、ターゲット AMI に影響を及ぼさずに変更または登録解除できます。逆の場合も同様です。

EBS-backed AMI を使用すると、それぞれのバックアップするスナップショットは、同一だが区別されるターゲットスナップショットにコピーされます。AMI を新しいリージョンにコピーすると、スナップショットは完全な (増分ではない) コピーになります。暗号化されていないバッキングスナップショットを暗号化するか、新しい KMS キーに暗号化すると、スナップショットは完全な (増分ではない) コピーになります。以降の AMI のコピー操作では、バッキングスナップショットの増分コピーが作成されます。

**Topics**
+ [リージョン間のコピー](#copy-amis-across-regions)
+ [アカウント間のコピー](#copy-ami-across-accounts)
+ [時間ベースの AMI コピー操作](#ami-time-based)
+ [暗号化とコピー](#ami-copy-encryption)

## リージョン間のコピー
<a name="copy-amis-across-regions"></a>

地理的に分散したリージョンに AMI をコピーすると、次のような利点があります。
+ 一貫性のあるグローバルなデプロイメント: 1 つのリージョンから別のリージョンに AMI をコピーすることで、一貫性のあるインスタンスを同じ AMI から別のリージョンに起動できます。
+ スケーラビリティ: ユーザーの場所にかかわらず、ユーザーのニーズに合ったグローバルアプリケーションをより簡単に設計できます。
+ パフォーマンス: アプリケーションを配布したり、アプリケーションの重要なコンポーネントをユーザーの近くに配置したりすることでパフォーマンスを向上できます。また、インスタンスの種類やその他の AWS サービスなど、リージョン固有の機能を活用することもできます。
+ 高可用性: アプリケーションを設計し、AWS リージョン全体にわたってデプロイして可用性を高めることができます。

次の図は、ソース AMI と異なるリージョンにある 2 つのコピーされた AMI、およびそこから起動される EC2 インスタンスの関係を示します。AMI からインスタンスを起動すると、AMI が存在する同じリージョンに存在します。ソース AMI を変更し、それらの変更をターゲットリージョンの AMI に反映させる場合、ソース AMI をターゲットリージョンに再度コピーする必要があります。

![\[別のリージョンにコピーされた AMI\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/images/ami_copy.png)


Amazon S3-backed AMI を最初にリージョンにコピーするときに、そのリージョンにコピーされた AMI に Amazon S3 バケットを作成します。そのリージョンにコピーするすべての Amazon S3-backed AMI が、このバケットに保存されます。バケット名の形式は次のとおりです: AMI-for-*アカウント*-in-*リージョン*-*ハッシュ* 例: `amis-for-123456789012-in-us-east-2-yhjmxvp6`。

**前提条件**  
AMI をコピーする前に、ソース AMI のすべての内容が、異なるリージョンでの実行をサポートするように更新されていることを確認する必要があります。例えば、データベース接続文字列や同様のアプリケーション設定データが、適切なリソースを指すように更新する必要があります。それ以外の場合、対象のリージョンの新しい AMI から起動したインスタンスは元のリージョンのリソースをまだ使用している可能性があり、それによりパフォーマンスとコストに影響が及ぶことがあります。

**制限事項**
+ コピー先のリージョンには、AMI の同時コピー操作が 300 個に制限されます。これは、時間ベースの AMI コピー操作にも適用されます。
+ 準仮想化 (PV) AMI がサポートされていないリージョンに、PV AMI をコピーすることはできません。詳細については、「[仮想化タイプ](ComponentsAMIs.md#virtualization_types)」を参照してください。

## アカウント間のコピー
<a name="copy-ami-across-accounts"></a>

他の AWS アカウント の AMI が [AWS アカウント と共有されている](sharingamis-explicit.md)場合は、共有 AMI をコピーできます。これは、クロスアカウントコピーと呼ばれています。共有される AMI はソース AMI です。ソース AMI をコピーする際に、新しい AMI を作成します。新しい AMI は、多くの場合、ターゲット AMI と呼ばれます。

**AMI のコスト**
+ 共有されている AMI の場合、リージョン内のストレージについて、共有されている AMI のアカウントに課金されます。
+ 自分のアカウントと共有された AMI をコピーした場合、アカウントのコピー先の AMI の所有者は自分になります。
  + ソース AMI の所有者は、標準の Amazon EBS または Amazon S3 転送料金が課金されます。
  + 宛先リージョン内のターゲット AMI のストレージについて料金が課金されます。

**リソースのアクセス許可**  
別のアカウントと共有した AMI をコピーするときは、ソース AMI の所有者から、AMI 自体の読み取り許可だけでなく、それをバックアップしているストレージの読み取り許可も、付与してもらう必要があります。ストレージは、関連 EBS スナップショット (Amazon EBS-backed AMI の場合) か、関連 S3 バケット (Amazon S3-backed AMI の場合) のどちらかです。共有 AMI に暗号化されたスナップショットがある場合、所有者はキーをユーザーと共有する必要があります。リソースのアクセス許可付与についての詳細は、EBS スナップショットの場合は「*Amazon EBS ユーザーガイド*」の「[Amazon EBS スナップショットを他の AWS アカウント と共有](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-modifying-snapshot-permissions.html)」を参照してください。S3 バケットの場合、「*Amazon S3 ユーザーガイド*」の「[Amazon S3 で ID とアクセスの管理](https://docs.aws.amazon.com/AmazonS3/latest/userguide/security-iam.html)」を参照してください。

**注記**  
ソース AMI にアタッチされたタグは、複数のアカウントでターゲット AMI にコピーされません。

## 時間ベースの AMI コピー操作
<a name="ami-time-based"></a>

単一の関連付けられたスナップショットを持つ EBS-backed AMI に対して時間ベースの AMI コピー操作を開始すると、**個々の時間ベースのスナップショットコピー操作**と同じ動作をし、同じスループット制限が適用されます。

複数の関連スナップショットを持つ EBS-backed AMI に対して時間ベースの AMI コピー操作を開始すると、**同時に実行される時間ベースのスナップショットコピー操作**と同じように動作し、同じスループット制限が適用されます。関連付けられたスナップショットごとに個別のスナップショットコピーリクエストが発生し、それぞれが累積スナップショットコピースループットクォータに影響します。指定した完了期間は、関連付けられている各スナップショットに適用されます。

詳細については、「*Amazon EBS ユーザーガイド*」の「[料金と請求](https://docs.aws.amazon.com/ebs/latest/userguide/time-based-copies.html)」を参照してください。

## 暗号化とコピー
<a name="ami-copy-encryption"></a>

次の表は、各種 AMI コピーのシナリオにおける暗号化サポートを示します。暗号化されたスナップショットを生成するために暗号化されていないスナップショットをコピーすることはできますが、暗号化されていないスナップショットを生成するために暗号化されたスナップショットをコピーすることはできません。


| シナリオ | 説明 | サポート対象 | 
| --- | --- | --- | 
| 1 | 非暗号化から非暗号化 | はい | 
| 2 | 暗号化から暗号化 | はい | 
| 3 | 非暗号化から暗号化 | はい | 
| 4 | 暗号化から非暗号化 | いいえ | 

**注記**  
`CopyImage` アクション中の暗号化は Amazon EBS-backed AMI にのみ適用されます。Amazon S3-backed AMI はスナップショットを使用しないため、コピーを使用して暗号化ステータスを変更することはできません。

暗号化パラメータを指定しないで AMI をコピーすると、デフォルトでバックアップするスナップショットは元の暗号化ステータスと一緒にコピーされます。したがって、ソース AMI が暗号化されていないスナップショットでバックアップされている場合、結果のターゲットスナップショットも暗号化されません。同様に、ソース AMI のスナップショットが暗号化されている場合、結果のターゲットスナップショットも同じ AWS KMS キーで暗号化されます。複数のスナップショットでバックアップされている AMI の場合、各ターゲットスナップショットは対応するソーススナップショットの暗号化状態を保持します。

AMI コピー中にターゲットバッキングスナップショットの暗号化状態を変更するには、暗号化パラメータを指定できます。次の例では、ターゲット AMI の暗号化状態を変更するために `CopyImage` アクションに暗号化パラメータが指定されるデフォルトではないケースを示しています。

**暗号化されていないソース AMI の暗号化されたターゲット AMI へのコピー**

このシナリオでは、暗号化されていないルートスナップショットでバックアップされた AMI は、暗号化されたルートスナップショットを持つ AMI にコピーされます。`CopyImage` アクションは、カスタマー管理された型キーなど、2 つの暗号化パラメータで呼び出されます。その結果、ルートスナップショットの暗号化ステータスが変更され、ターゲット AMI はソーススナップショットと同じデータを含むルートスナップショットにバックアップされますが、指定されたキーを使用して暗号化されます。両方の AMI でスナップショットのストレージコストと、いずれかの AMI から起動するインスタンスの料金が発生します。

**注記**  
デフォルトで暗号化を有効にすると、AMI 内のすべてのスナップショットで `Encrypted` パラメータを `true` に設定したのと同じ効果があります。

![\[AMI をコピーし、スナップショットをオンザフライで暗号化\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/images/ami-to-ami-convert.png)


`Encrypted` パラメータを設定すると、このインスタンスの単一のスナップショットが暗号化されます。`KmsKeyId` パラメータを指定しない場合は、デフォルトのカスタマー管理された型キーを使用して、スナップショットのコピーが暗号化されます。

暗号化されたスナップショットを持つ AMI のコピーの詳細については、「[EBS-backed AMI での暗号化の利用](AMIEncryption.md)」を参照してください。

# S3 を使用して AMI を保存および復元する
<a name="ami-store-restore"></a>

Amazon マシンイメージ (AMI) を Amazon S3 バケットに保存し、AMI を別の S3 バケットにコピーして、S3 バケットから復元できます。S3 バケットを使用して AMI を保存および復元することで、AMI をある AWS パーティションから別のパーティション (例えば、主要な商用パーティションから AWS GovCloud (US) パーティション) にコピーできます。AMI を S3 バケットに保存することで、AMI のアーカイブコピーを作成することもできます。

S3 を使用した AMI の保存および復元のサポート対象の API は、`CreateStoreImageTask`、`DescribeStoreImageTasks`、および `CreateRestoreImageTask` です。

`CopyImage` は、AWS パーティション*内*の AMI のコピーの際に使用することが推奨される API です。ただし、`CopyImage` は、AMI を*別の*パーティションにコピーできません。

AWS パーティションの詳細については、「*IAM ユーザーガイド*」の「[Amazon リソースネーム (ARN)](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html)」ページの「*パーティション*」を参照してください。

**警告**  
AWS パーティションまたは AWS リージョン間でデータを移動する場合、適用されるすべての法令およびビジネス要件 (適用される政府の規制およびデータ所在地に関する要件を含みますが、これらに限られません) を確実に遵守してください。

**Topics**
+ [ユースケース](#use-cases)
+ [制限事項](#ami-store-restore-limitations)
+ [コスト](#store-restore-costs)
+ [AMI の保存と復元の仕組み](store-restore-how-it-works.md)
+ [保存イメージタスクを作成する](work-with-ami-store-restore.md)

## ユースケース
<a name="use-cases"></a>

**Topics**
+ [AWS パーティション間で AMI をコピーする](#copy-to-partition)
+ [AMI のアーカイブコピーを作成する](#archival-copies)

### AWS パーティション間で AMI をコピーする
<a name="copy-to-partition"></a>

S3 バケットを使用して AMI を保存および復元することで、ある AWS パーティションから別のパーティションに、またはある AWS リージョンから別のリージョンに AMI をコピーできます。次の例では、主要な商用パーティションから AWS GovCloud (US) パーティションに、具体的には `us-east-2` リージョンから `us-gov-east-1` リージョンに AMI をコピーします。

あるパーティションから別のパーティションに AMI をコピーするには、次の手順に従います。
+ `CreateStoreImageTask` を使用して、現在のリージョンの S3 バケットに AMI を保存します。この例では、S3 バケットは `us-east-2` にあります。
+ `DescribeStoreImageTasks` を使用して、保存タスクの進行状況をモニタリングします。タスクが完了すると、オブジェクトが S3 バケットに表示されます。
+ 任意の手順を使用して、保存された AMI オブジェクトをターゲットパーティションの S3 バケットにコピーします。この例では、S3 バケットは `us-gov-east-1` にあります。
**注記**  
パーティションごとに異なる AWS 認証情報が必要なため、S3 オブジェクトをあるパーティションから別のパーティションに直接コピーすることはできません。パーティション間で S3 オブジェクトをコピーするプロセスは、このドキュメントの対象外です。例として、次のコピープロセスを提供していますが、お客様のセキュリティ要件を満たすコピープロセスを使用する必要があります。  
パーティション間で 1 つの AMI をコピーするためのコピープロセスはシンプルです。ソースバケットから中間ホスト (EC2 インスタンスやラップトップなど) に[オブジェクトをダウンロード](https://docs.aws.amazon.com/AmazonS3/latest/userguide/download-objects.html)し、中間ホストからターゲットバケットに[オブジェクトをアップロード](https://docs.aws.amazon.com/AmazonS3/latest/userguide/upload-objects.html)するだけです。プロセスの各段階で、パーティションの AWS 認証情報を使用します。
より持続的な使用のために、コピーを管理するアプリケーションの開発をご検討ください。S3 [マルチパートダウンロードとアップロード](https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpuoverview.html)を使用することも考慮に値します。
+ `CreateRestoreImageTask` を使用して、ターゲットパーティションの S3 バケットから AMI を復元します。この例では、S3 バケットは `us-gov-east-1` にあります。
+ その状態が使用可能になるタイミングを確認するために、AMI を記述して復元タスクの進行状況をモニタリングします。また、スナップショットを記述することで、復元される AMI を構成するスナップショットの進行状況 (%) をモニタリングすることもできます。

### AMI のアーカイブコピーを作成する
<a name="archival-copies"></a>

AMI を S3 バケットに保存することで、AMI のアーカイブコピーを作成できます。AMI は S3 内の 1 つのオブジェクトにパックされ、すべての AMI メタデータ (共有情報を除く) は、保存された AMI の一部として保持されます。AMI データは、ストレージプロセスの一環として圧縮されます。簡単に圧縮できるデータを含む AMI は、S3 で小さめのオブジェクトとなります。コストを削減するために、より安価な S3 ストレージ階層を使用できます。詳細については、[Amazon S3 ストレージクラス](https://aws.amazon.com/s3/storage-classes/)および [Amazon S3 の料金](https://aws.amazon.com/s3/pricing/)をご参照ください。

## 制限事項
<a name="ami-store-restore-limitations"></a>
+ AMI を保存するには、AWS アカウント が AMI とそのスナップショットを所有しているか、AMI とそのスナップショットを[アカウントと直接共有する](sharingamis-explicit.md)必要があります。[公開されているだけの](sharingamis-intro.md) AMI は保存できません。
+ これらの API を使用して保存できるのは、EBS-backed AMI だけです。
+ 準仮想化 (PV) AMI はサポートされていません。
+ 保存可能な AMI の上限サイズ (圧縮前) は、5,000 GB です。
+ 保存イメージリクエストのクォータ: 進行中の 1,200 GB の保存作業 (スナップショットデータ)。
+ 復元イメージリクエストのクォータ: 進行中の 600 GB の復元作業 (スナップショットデータ)。
+ 保存タスク中は、スナップショットを削除してはならず、保存を実行する IAM プリンシパルにはスナップショットへのアクセス権が必要です。それ以外の場合は、保存プロセスが失敗します。
+ 同じ S3 バケットに AMI の複数のコピーを作成することはできません。
+ S3 バケットに保存されている AMI は、元の AMI ID では復元できません。[AMI エイリアシング](https://docs.aws.amazon.com/systems-manager/latest/userguide/parameter-store-ec2-aliases.html)を使用すると、これを軽減できます。
+ 現在、保存 API と復元 API は、AWS Command Line Interface、AWS SDK、および Amazon EC2 API を使用する場合にのみサポートされます。Amazon EC2 コンソールを使用して AMI を保存および復元することはできません。

## コスト
<a name="store-restore-costs"></a>

S3 を使用して AMI を保存および復元する場合、保存 API と復元 API で使用されるサービス、およびデータ転送について料金が発生します。API は、S3 と EBS Direct API を使用します (これらの API がスナップショットデータにアクセスするために内部的に使用されます)。詳細については、[Amazon S3 の料金](https://aws.amazon.com/s3/pricing/)および [Amazon EBS の料金](https://aws.amazon.com/ebs/pricing/)をご参照ください。

# AMI の保存と復元の仕組み
<a name="store-restore-how-it-works"></a>

S3 を使用して AMI を保存および復元するには、次の API を使用します。
+ `CreateStoreImageTask` – AMI を S3 バケットに保存する
+ `DescribeStoreImageTasks` – AMI 保存タスクの進行状況を示す
+ `CreateRestoreImageTask` – S3 バケットから AMI を復元する

**Topics**
+ [CreateStoreImageTask](#CreateStoreImageTask)
+ [DescribeStoreImageTasks](#DescribeStoreImageTasks)
+ [CreateRestoreImageTask](#CreateRestoreImageTask)
+ [ファイルパス](#file-paths-in-s3)

## CreateStoreImageTask
<a name="CreateStoreImageTask"></a>

`CreateStoreImageTask` API は、AMI を単一のオブジェクトとして S3 バケットに保存します。

API は、AMI とそのスナップショットからすべてのデータを読み取るタスクを作成し、[S3 マルチパートアップロード](https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpuoverview.html)を使用して S3 オブジェクトにデータを保存します。API は、リージョン固有でない AMI メタデータの大部分を含む AMI のすべてのコンポーネント、および AMI に含まれるすべての EBS スナップショットを取得し、S3 内の単一のオブジェクトにパックします。データは、S3 で使用される領域の量を削減するために、アップロードプロセスの一環として圧縮されるので、S3 内のオブジェクトは AMI 内のスナップショットのサイズの合計よりも小さくなる可能性があります。

この API を呼び出すアカウントに AMI タグとスナップショットタグが表示されている場合、それらは保持されます。

S3 のオブジェクトは AMI と同じ ID を持っていますが、`.bin` 拡張子が付いています。AMI 名、AMI の説明、AMI の登録日、AMI の所有者アカウント、および保存オペレーションのタイムスタンプといったデータも S3 オブジェクトに S3 メタデータタグとして保存されます。

タスクを完了するのにかかる時間は、AMI のサイズによって異なります。また、タスクがキューに入れられているため、進行中の他のタスクの数にも依存します。`DescribeStoreImageTasks` API を呼び出してタスクの進行状況を追跡できます。

進行中のすべての AMI のサイズの合計は、アカウントごとに 1,200 GB の EBS スナップショットデータに制限されます。進行中のタスクが制限未満になるまで、それ以降のタスクの作成は拒否されます。例えば、200 GB のスナップショットデータを持つ AMI と 400 GB のスナップショットデータを持つ別の AMI が現在保存されている場合、別のリクエストが受け入れられます。これは、進行中の合計が 600 GB で、制限未満であるためです。ただし、1,200 GB のスナップショットデータを持つ 1 つの AMI が現在保存されようとしている場合は、タスクが完了するまでそれ以降のタスクは拒否されます。

## DescribeStoreImageTasks
<a name="DescribeStoreImageTasks"></a>

`DescribeStoreImageTasks` API は、AMI の保存タスクの進行状況を示します。指定した AMI のタスクを記述できます。AMI を指定しない場合、過去 31 日間に処理されたすべての保存イメージタスクのページ分割されたリストが表示されます。

各 AMI タスクについて、応答では、タスクが `InProgress`、`Completed`、または `Failed` のいずれであるかが示されます。`InProgress` のタスクの場合、応答では、進行状況がパーセンテージで示されます。

タスクは時系列の逆順にリストされます。

現時点では、前月のタスクのみを表示できます。

## CreateRestoreImageTask
<a name="CreateRestoreImageTask"></a>

`CreateRestoreImageTask` API は、`CreateStoreImageTask` リクエストを使用して以前に作成された S3 オブジェクトから AMI を復元するタスクを開始します。

復元タスクは、保存タスクが実行されたリージョンと同じリージョンまたは別のリージョンで実行できます。

AMI オブジェクトの復元ソースである S3 バケットは、復元タスクがリクエストされたリージョンと同じリージョンに存在する必要があります。AMI はこのリージョンで復元されます。

AMI は、保存された AMI の値に対応する名前、説明、ブロックデバイスマッピングなどのメタデータとともに復元されます。このアカウントの名前は、リージョン内の AMI に対して一意である必要があります。名前を指定しない場合、新しい AMI は元の AMI と同じ名前になります。AMI は、復元プロセス時に生成される新しい AMI ID を取得します。

AMI 復元タスクを完了するのにかかる時間は、AMI のサイズによって異なります。また、タスクがキューに入れられているため、進行中の他のタスクの数にも依存します。タスクの進行状況は、AMI ([describe-images](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html)) またはその EBS スナップショット ([describe-snapshots](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-snapshots.html)) を記述することで確認できます。タスクが失敗すると、AMI とスナップショットは失敗の状態に移行されます。

進行中のすべての AMI のサイズの合計は、アカウントあたり 600 GB (復元後のサイズに基づく) の EBS スナップショットデータに制限されます。進行中のタスクが制限未満になるまで、それ以降のタスクの作成は拒否されます。

## ファイルパス
<a name="file-paths-in-s3"></a>

AMI を保存および復元するときは、次の方法でファイルパスを使用できます。
+ AMI を S3 に保存する場合、ファイルパスをバケット名に追加できます。システム内部では、バケット名からパスが分離され、AMI を保存するために生成されたオブジェクトキーにそのパスが追加されます。完全なオブジェクトパスは、API 呼び出しからのレスポンスに表示されます。
+ AMI を復元する場合、オブジェクトキーパラメータを使用できるので、オブジェクトキー値の先頭にパスを追加できます。

**例: ファイルパスが追加されたバケット名**  
AMI を保存する場合、バケット名の後にファイルパスを指定します。

```
amzn-s3-demo-bucket/path1/path2
```

作成されるオブジェクトキーを次に示します。

```
path1/path2/ami-0abcdef1234567890.bin
```

AMI を復元するときは、バケット名とオブジェクトキーの両方を指定します。例については「[保存イメージタスクを作成する](work-with-ami-store-restore.md#create-store-image-task)」を参照してください。

# 保存イメージタスクを作成する
<a name="work-with-ami-store-restore"></a>

AMI を S3 バケットに保存するときに、保存イメージタスクが作成されます。保存イメージタスクを使用して、プロセスの進行状況と結果をモニタリングできます。

**Topics**
+ [AMI のセキュリティ保護](#securing-amis)
+ [S3 を使用して AMI を保存および復元するためのアクセス権限](#ami-s3-permissions)
+ [保存イメージタスクを作成する](#create-store-image-task)
+ [復元イメージタスクを作成する](#create-restore-image-task)

## AMI のセキュリティ保護
<a name="securing-amis"></a>

AMI のコンテンツを保護するために十分なセキュリティをもって S3 バケットが確実に設定されていること、および AMI オブジェクトがバケット内に残っている限り、セキュリティが確実に維持されるようにすることが重要です。これを実行できない場合は、これらの API の使用はお勧めしません。S3 バケットへのパブリックアクセスが許可されていないことを確認します。必須ではありませんが、AMI を保存する S3 バケットのために[サーバー側の暗号化](https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html)を有効にすることをお勧めします。

S3 バケットに適切なセキュリティを設定する方法については、次のセキュリティトピックをご参照ください。
+ [Amazon S3 ストレージへのパブリックアクセスのブロック](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-control-block-public-access.html)
+ [Amazon S3 バケット向けのサーバー側のデフォルトの暗号化動作の設定](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-encryption.html)
+ [AWS Config ルールの s3-bucket-ssl-requests-only に準拠するには、どの S3 バケットポリシーを使用できますか?](https://repost.aws/knowledge-center/s3-bucket-policy-for-config-rule)
+ [Amazon S3 サーバーアクセスログ記録の有効化](https://docs.aws.amazon.com/AmazonS3/latest/userguide/enable-server-access-logging.html)

AMI スナップショットが S3 オブジェクトにコピーされると、データは TLS 接続を介してコピーされます。暗号化されたスナップショットを使用して AMI を保存できますが、スナップショットは保存プロセスの一部として復号されます。

## S3 を使用して AMI を保存および復元するためのアクセス権限
<a name="ami-s3-permissions"></a>

IAM プリンシパルが Amazon S3 を使用して AMI を保存または復元する場合は、必要な許可を付与する必要があります。

次のポリシーの例には、IAM プリンシパルが保存タスクと復元タスクを実行できるようにするために必要なすべてのアクションが含まれています。

特定のリソースへのアクセス権のみをプリンシパルに付与する IAM ポリシーを作成することもできます。ポリシーの例については、「*IAM ユーザーガイド*」の「[AWS リソースのアクセス管理](https://docs.aws.amazon.com/IAM/latest/UserGuide/access.html)」を参照してください。

**注記**  
AMI を構成するスナップショットが暗号化されている場合、またはアカウントの暗号化がデフォルトで有効になっている場合は、IAM プリンシパルに KMS キーを使用するための許可が付与されている必要があります。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:DeleteObject",
                "s3:GetObject",
                "s3:ListBucket",
                "s3:PutObject",
                "s3:PutObjectTagging",
                "s3:AbortMultipartUpload",
                "ebs:CompleteSnapshot",
                "ebs:GetSnapshotBlock",
                "ebs:ListChangedBlocks",
                "ebs:ListSnapshotBlocks",
                "ebs:PutSnapshotBlock",
                "ebs:StartSnapshot",
                "ec2:CreateStoreImageTask",
                "ec2:DescribeStoreImageTasks",
                "ec2:CreateRestoreImageTask",
                "ec2:GetEbsEncryptionByDefault",
                "ec2:DescribeTags",
                "ec2:CreateTags"
            ],
            "Resource": "*"
        }
    ]
}
```

------

## 保存イメージタスクを作成する
<a name="create-store-image-task"></a>

AMI を S3 バケットに保存するには、まず保存イメージタスクを作成します。タスクを完了するのにかかる時間は、AMI のサイズによって異なります。タスクが成功または失敗するまで、タスクの進行状況を追跡できます。

------
#### [ AWS CLI ]

**保存イメージタスクを作成するには**  
[create-store-image-task](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-store-image-task.html) コマンドを使用します。

```
aws ec2 create-store-image-task \
    --image-id ami-0abcdef1234567890 \
    --bucket amzn-s3-demo-bucket
```

以下は出力の例です。

```
{
  "ObjectKey": "ami-0abcdef1234567890.bin"
}
```

**保存イメージタスクの進行状況を表示するには**  
[describe-store-image-tasks](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-store-image-tasks.html) コマンドを使用します。

```
aws ec2 describe-store-image-tasks \
    --image-ids ami-0abcdef1234567890 \
    --query StoreImageTaskResults[].StoreTaskState \
    --output text
```

以下は出力の例です。

```
InProgress
```

------
#### [ PowerShell ]

**保存イメージタスクを作成するには**  
[New-EC2StoreImageTask](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2StoreImageTask.html) コマンドレットを使用します。

```
New-EC2StoreImageTask `
    -ImageId ami-0abcdef1234567890 `
    -Bucket amzn-s3-demo-bucket
```

以下は出力の例です。

```
ObjectKey         : ami-0abcdef1234567890.bin
```

**保存イメージタスクの進行状況を表示するには**  
[Get-EC2StoreImageTask](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2StoreImageTask.html) コマンドレットを使用します。

```
(Get-EC2StoreImageTask -ImageId ami-0abcdef1234567890).StoreTaskState
```

以下は出力の例です。

```
InProgress
```

------

## 復元イメージタスクを作成する
<a name="create-restore-image-task"></a>

復元された AMI の名前を指定する必要があります。このアカウントの名前は、リージョン内の AMI に対して一意である必要があります。復元された AMI は、新しい AMI ID を取得します。

------
#### [ AWS CLI ]

**復元イメージタスクを作成するには**  
[create-restore-image-task](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-restore-image-task.html) コマンドを使用します。

```
aws ec2 create-restore-image-task \
    --object-key ami-0abcdef1234567890.bin \
    --bucket amzn-s3-demo-bucket \
    --name "my-restored-ami"
```

以下は出力の例です。

```
{
   "ImageId": "ami-1234567890abcdef0"
}
```

------
#### [ PowerShell ]

**復元イメージタスクを作成するには**  
[New-EC2RestoreImageTask](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2RestoreImageTask.html) コマンドレットを使用します。

```
New-EC2RestoreImageTask `
    -ObjectKey ami-0abcdef1234567890.bin `
    -Bucket amzn-s3-demo-bucket `
    -Name "my-restored-ami"
```

以下は出力の例です。

```
ImageId         : ami-1234567890abcdef0
```

------

# AMI 祖先を使用して AMI のオリジンをトレースする
<a name="ami-ancestry"></a>

AMI 祖先は、すべての祖先 AMI の ID とリージョンを返すことで、AMI のオリジンをトレースするのに役立ちます。AMI を作成またはコピーすると、新しい AMI はソース (親) AMI の ID とリージョンを保持します。これにより、ルート AMI に遡るまで AMI のチェーンを追跡することができます。

**主な利点**

AMI 祖先を使用すると、次のことができます。
+ AMI 派生を追跡して、内部ポリシーに準拠していることを確認する。
+ 祖先 AMI でセキュリティの問題が見つかったときに、脆弱性を持つ可能性がある AMI を特定する。
+ 複数のリージョンにわたる AMI オリジンの可視性を維持する。

**Topics**
+ [AMI 祖先の仕組み](#how-ami-ancestry-works)
+ [考慮事項](#ami-ancestry-conditions)
+ [AMI 祖先を表示する](#view-ami-ancestry)
+ [ソースを AMI を識別](#identify-source-ami-used-to-create-new-ami)

## AMI 祖先の仕組み
<a name="how-ami-ancestry-works"></a>

AMI 祖先は、指定された AMI の作成に使用された親 AMI、親の親など、ルート AMI に遡るまで AMI を識別します。処理の流れ
+ 各 AMI には、ソース (親) AMI の ID とリージョンが表示されます。
+ 選択した AMI から始まる祖先エントリのリストには、各親 AMI が順番に表示されます。
+ 祖先エントリのリストは、ルート AMI に到達するまでトレースバックすることができます。ルート AMI は次のいずれかです。
  + [検証済みプロバイダー](sharing-amis.md#verified-ami-provider)からのパブリック AMI (所有者エイリアスによって識別されます。これは `amazon` または `aws-marketplace` です)。
  + 祖先が記録されていない AMI。例えば、[RegisterImage](creating-an-ami-ebs.md#creating-launching-ami-from-snapshot) を使用してスナップショットのセットから直接 AMI を作成する場合、インスタンスから AMI を作成する場合とは異なり、追跡できるソース AMI はありません。
  + ソース AMI が別の[パーティション](https://docs.aws.amazon.com/glossary/latest/reference/glos-chap.html#partition)の AMI。
  + リスト内の 50 番目の AMI。祖先リスト内の AMI の最大数は 50 です。

## 考慮事項
<a name="ami-ancestry-conditions"></a>
+ ソース AMI の ID とリージョンは、[CreateImage](creating-an-ami-ebs.md#how-to-create-ebs-ami)、[CopyImage](CopyingAMIs.md#ami-copy-steps)、または [CreateRestoreImageTask](store-restore-how-it-works.md#CreateRestoreImageTask) を使用して作成された AMI でのみ使用できます。
+ [CreateImage](creating-an-ami-ebs.md#how-to-create-ebs-ami) (インスタンスから AMI を作成) を使用して作成された AMI の場合、ソース AMI ID はインスタンスの起動に使用される AMI の ID です。
+ ソース AMI 情報は、次の場合は使用できません。
  + [RegisterImage](creating-an-ami-ebs.md#creating-launching-ami-from-snapshot) を使用して作成された AMI (スナップショットから作成されているため)。
  + 一部の古い AMI。
+ ソース AMI 情報は、次の場合に保持されます。
  + AMI がリージョン間でコピーされている場合。
  + ソース AMI が登録解除 (削除) されている場合。
  + お客様がソース AMI にアクセスできない場合。
+ 各祖先リストが 50 AMI に制限されている場合。

## AMI 祖先を表示する
<a name="view-ami-ancestry"></a>

次の方法を使用して、AMI の祖先を表示できます。

------
#### [ Console ]

**AMI の祖先を表示するには**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. ナビゲーションペインで [**AMI**] を選択してください。

1. AMI を選択し、**[AMI 祖先]** タブを選択します。

1. **[AMI 祖先エントリ]** テーブルには、祖先リスト内のすべての AMI が一覧表示されます。
   + **AMI ID** – 祖先リスト内の各 AMI の識別子。テーブルの最初のエントリは選択した AMI です。その後に祖先が続きます。
   + **ソース AMI ID** – **AMI ID** 列の AMI が作成された AMI の ID。ダッシュ (**-**) は、AMI 祖先リストの末尾を示します。
   + **ソース AMI リージョン** – ソース AMI がある AWS リージョン です。
   + **祖先レベル** – 祖先リスト内の位置。意味を次に記します。
     + **0 (入力 AMI)** は、お客様が祖先を知りたいと考えている、選択した AMI を示します。
     + 数字が増えると、古い祖先が表示されます。
     + ***n* (元の AMI)** はルート AMI を示し、数は祖先リストをどこまで遡るかを示します。
   + **作成日** – AMI が作成された日時。UTC 形式。
   + **所有者エイリアス** – AMI 所有者のエイリアス (`amazon` など)。ダッシュ (**-**) は、AMI に所有者エイリアスがないことを示します。

------
#### [ AWS CLI ]

**AMI 祖先を表示するには**  
[get-image-ancestry](https://docs.aws.amazon.com/cli/latest/reference/ec2/get-image-ancestry.html) コマンドを使用して、AMI の ID を指定します。

```
aws ec2 get-image-ancestry \
    --image-id ami-1111111111EXAMPLE \
    --region us-east-1
```

以下は出力の例です。出力には、AMI が祖先順に一覧表示されます。最初のエントリは指定された (入力) AMI で、その後に親、親の親などが続き、ルート AMI で終わります。

```
{
    "ImageAncestryEntries": [
        {
            "CreationDate": "2025-01-17T18:37:50.000Z",
            "ImageId": "ami-1111111111EXAMPLE", // Input AMI
            "SourceImageId": "ami-2222222222EXAMPLE",
            "SourceImageRegion": "us-east-1"

        },
        {
            "CreationDate": "2025-01-17T18:37:50.000Z",
            "ImageId": "ami-2222222222EXAMPLE", // Parent AMI
            "SourceImageId": "ami-3333333333EXAMPLE",
            "SourceImageRegion": "us-east-1"
        },
        ...
        {
            "CreationDate": "2025-01-17T18:37:50.000Z",
            "ImageId": "ami-8888888888EXAMPLE", // Root AMI
            "ImageOwnerAlias": "aws-marketplace",
            "SourceImageId": "ami-9999999999EXAMPLE",
            "SourceImageRegion": "us-east-2"
        }
    ]
}
```

------
#### [ PowerShell ]

**AMI 祖先を表示するには**  
[Get-EC2ImageAncestry](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2ImageAncestry.html) コマンドレットを使用します。

```
Get-EC2ImageAncestry -ImageId ami-1111111111EXAMPLE
```

以下は出力の例です。出力には、AMI が祖先順に一覧表示されます。最初のエントリは指定された (入力) AMI で、その後に親、親の親などが続き、ルート AMI で終わります。

```
ImageAncestryEntries : {
    @{
        CreationDate = "2025-01-17T18:37:50.000Z"
        ImageId = "ami-1111111111EXAMPLE"    # Input AMI
        SourceImageId = "ami-2222222222EXAMPLE"
        SourceImageRegion = "us-east-1"
    },
    @{
        CreationDate = "2025-01-17T18:37:50.000Z"
        ImageId = "ami-2222222222EXAMPLE"    # Parent AMI
        SourceImageId = "ami-3333333333EXAMPLE"
        SourceImageRegion = "us-east-1"
    },
    ...
    @{
        CreationDate = "2025-01-17T18:37:50.000Z"
        ImageId = "ami-8888888888EXAMPLE"    # Root AMI
        ImageOwnerAlias = "aws-marketplace"
        SourceImageId = "ami-9999999999EXAMPLE"
        SourceImageRegion = "us-east-2"
    }
}
```

------

## ソースを AMI を識別
<a name="identify-source-ami-used-to-create-new-ami"></a>

AMI の作成に使用される直接の親 (ソース) AMI のみを特定する必要がある場合は、次の方法を使用できます。

------
#### [ Console ]

**選択した AMI の作成に使用されるソース AMI を特定するには**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. ナビゲーションペインで [**AMI**] を選択してください。

1. AMI を選択して詳細を表示します。

   ソース AMI 情報は、**[ソース AMI ID]** および **[ソース AMI リージョン]** のフィールドに表示されます。

------
#### [ AWS CLI ]

**指定した AMI の作成に使用されるソース AMI を特定するには**  
[describe-images](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) コマンドを使用します。

```
aws ec2 describe-images \
    --region us-east-1 \
    --image-ids ami-0abcdef1234567890 \
    --query "Images[].{ID:SourceImageId,Region:SourceImageRegion}"
```

以下は出力の例です。

```
[
    {
        "ID": "ami-0abcdef1234567890",
        "Region": "us-west-2"
    }
}
```

------
#### [ PowerShell ]

**指定した AMI の作成に使用されるソース AMI を特定するには**  
[Get-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Image.html) コマンドレットを使用します。

```
Get-EC2Image -ImageId ami-0abcdef1234567890 | Select SourceImageId, SourceImageRegion
```

以下は出力の例です。

```
SourceImageId           SourceImageRegion
-------------           -----------------
ami-0abcdef1234567890 us-west-2
```

------

# AMI の使用を管理およびモニタリングする
<a name="ec2-ami-usage"></a>

AWS には、AMI の使用状況を効果的に管理およびモニタリングするのに役立ついくつかの機能が用意されています。共有 AMI を使用しているアカウントの追跡、AMI が最後に使用された日時の特定、AWS アカウント で特定の AMI を参照しているリソースの検出を行うことができます。

AMI の使用状況を管理およびモニタリングするための機能の概要を次の表に示します。


| 機能 | ユースケース | 主な利点 | 
| --- | --- | --- | 
| [AMI の使用状況レポート](your-ec2-ami-usage.md) | AMI を使用している AWS アカウントと、各 AMI の使用量を可視化します。 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ec2-ami-usage.html)  | 
| [最後に使用された追跡](ami-last-launched-time.md) | AMI が最後に使用された日時を確認します。 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ec2-ami-usage.html)  | 
| [AMI の参照チェック](ec2-ami-references.md) | AWS リソースが最新の準拠 AMI を使用していることを確認します。 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ec2-ami-usage.html)  | 

**Topics**
+ [AMI の使用状況を表示する](your-ec2-ami-usage.md)
+ [Amazon EC2 AMI が最後に使用された日時を確認する](ami-last-launched-time.md)
+ [指定した AMI を参照しているリソースを識別します。](ec2-ami-references.md)

# AMI の使用状況を表示する
<a name="your-ec2-ami-usage"></a>

Amazon マシンイメージ (AMI) を他の AWS アカウント (特定の AWS アカウント、組織、組織単位 (OU)、またはパブリック) と共有する場合、AMI の使用状況レポートを作成することで、これらの AMI がどのように使用されているかを確認できます。レポートは、以下を可視化します。
+ EC2 インスタンスまたは起動テンプレートで AMI を使用している AWS アカウント
+ 各 AMI を参照している EC2 インスタンスまたは起動テンプレートの数

AMI の使用状況レポートは、以下を行って AMI をより効果的に管理するのに役立ちます。
+ AMI の登録解除または無効化を安全に行うことができるように、AMI を参照している AWS アカウントとリソースタイプを特定します。
+ ストレージコストを削減するために登録を解除する未使用の AMI を特定します。
+ 最も使用されている AMI を特定します。

**Topics**
+ [AMI 使用状況レポートの仕組み](#how-ami-usage-reports-work)
+ [AMI の使用状況レポートを作成する](#create-ami-usage-reports)
+ [AMI の使用状況レポートを表示する](#view-ami-usage-reports)
+ [AMI の使用状況レポートを削除する](#delete-ami-usage-reports)
+ [レポートに関するクォータ](#ami-usage-report-quotas)

## AMI 使用状況レポートの仕組み
<a name="how-ami-usage-reports-work"></a>

AMI 使用状況レポートを作成するときは、以下を指定します。
+ レポート対象の AMI。
+ チェックする AWS アカウント (特定のアカウントまたはすべてのアカウント)。
+ チェックするリソースタイプ (EC2 インスタンス、起動テンプレート、またはその両方)。
+ 起動テンプレートの場合、チェックするバージョンの数 (デフォルトでは 20 の最新バージョン)。

Amazon EC2 によって AMI ごとに個別のレポートが作成されます。各レポートは以下を提供します。
+ AMI を使用している AWS アカウントのリスト。
+ アカウントごとのリソースタイプ別に AMI を参照しているリソースの数。起動テンプレートの場合、起動テンプレートの複数のバージョンで AMI が参照されているときはカウントは 1 になります。

**重要**  
AMI の使用状況レポートを生成する場合、最新のアクティビティが含まれていない可能性があります。過去 24 時間のインスタンスアクティビティと、過去数日間の起動テンプレートアクティビティがレポートに表示されないことがあります。

Amazon EC2 は、作成から 30 日後にレポートを自動的に削除します。EC2 コンソールからレポートをダウンロードしてローカルに保持できます。

## AMI の使用状況レポートを作成する
<a name="create-ami-usage-reports"></a>

AMI がどのように使用されているかを確認するには、まず AMI の使用状況レポートを作成し、レポートするアカウントとリソースタイプを指定する必要があります。レポートが作成されたら、レポートの内容を表示できます。EC2 コンソールからレポートをダウンロードすることもできます。

------
#### [ Console ]

**AMI の使用状況レポートを作成するには**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. ナビゲーションペインで [**AMI**] を選択してください。

1. AMI を選択し、**[アクション]**、**[AMI の使用状況]**、**[自分の AMI 使用状況を表示]** の順に選択します。

1. **[AMI 使用状況レポートの作成]** ページで、次の操作を行います。

   1. **[リソースタイプ]** で、レポートする 1 つ以上のリソースタイプを選択します。

   1. [**アカウント ID**] で、次のいずれかを実行します。
      + **[アカウント ID を指定]** を選択し、レポートする各アカウントの **[アカウント ID を追加]** を選択します。
      + すべてのアカウントでレポートするには、**[すべてのアカウントを含める]** を選択します。

   1. **[AMI 使用状況レポートの作成]** を選択します。

1. AMI ページで、**[AMI の使用状況]** タブを選択します。

1. 詳細を表示するレポート ID を選択します。

------
#### [ AWS CLI ]

**複数のアカウントの AMI 使用状況レポートを作成するには**  
次の必須パラメータで [create-image-usage-report](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-image-usage-report.html) コマンドを使用します。
+ `--image-id` – レポートする AMI の ID。
+ `--resource-types` – チェックするリソースのタイプ。次の例では、チェックするリソースタイプは EC2 インスタンスと起動テンプレートです。さらに、チェックする起動テンプレートのバージョンの数も指定されています (`version-depth=100`)。

 複数の特定のアカウントをレポートするには、 `--account-ids` パラメータを使用してレポートする各アカウントの ID を指定します。

```
aws ec2 create-image-usage-report \
    --image-id ami-0abcdef1234567890 \
    --account-ids 111122223333 444455556666 123456789012 \
    --resource-types ResourceType=ec2:Instance \
      'ResourceType=ec2:LaunchTemplate,ResourceTypeOptions=[{OptionName=version-depth,OptionValues=100}]'
```

**すべてのアカウントの AMI 使用状況レポートを作成するには**  
指定した AMI を使用しているすべてのアカウントをレポートするには、同じコマンドを使用しますが、`--account-ids` パラメータを省略します。

```
aws ec2 create-image-usage-report \
    --image-id ami-0abcdef1234567890 \
    --resource-types ResourceType=ec2:Instance \
      'ResourceType=ec2:LaunchTemplate,ResourceTypeOptions=[{OptionName=version-depth,OptionValues=100}]'
```

以下は出力の例です。

```
{
    "ReportId": "amiur-00b877d192f6b02d0"
}
```

**レポート作成ステータスをモニタリングするには**  
[describe-image-usage-reports](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-image-usage-reports.html) コマンドを使用して、レポート ID を指定します。

```
aws ec2 describe-image-usage-reports --report-ids amiur-00b877d192f6b02d0
```

以下は出力の例です。`State` フィールドの初期値は `pending` です。レポートエントリを表示するには、状態が `available` である必要があります。

```
{
    "ImageUsageReports": [
        {
            "ImageId": "ami-0e9ae3dc21c2b3a64",
            "ReportId": "amiur-abcae3dc21c2b3999",
            "ResourceTypes": [
                {"ResourceType": "ec2:Instance"}
            ],
            "State": "pending",
            "CreationTime": "2025-09-29T13:27:12.322000+00:00",
            "ExpirationTime": "2025-10-28T13:27:12.322000+00:00"
        }
    ]
}
```

------
#### [ PowerShell ]

**複数のアカウントの AMI 使用状況レポートを作成するには**  
以下の必須パラメータで [New-EC2ImageUsageReport](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2ImageUsageReport.html) コマンドレットを使用します。
+ `-ImageId` – レポートする AMI の ID。
+ `-ResourceType` – チェックするリソースのタイプ。次の例では、チェックするリソースタイプは EC2 インスタンスと起動テンプレートです。さらに、チェックする起動テンプレートのバージョンの数も指定されています (`'version-depth' = 100`)。

 複数の特定のアカウントをレポートするには、 `-AccountId` パラメータを使用してレポートする各アカウントの ID を指定します。

```
New-EC2ImageUsageReport `
    -ImageId ami-0abcdef1234567890 `
    -AccountId 111122223333 444455556666 123456789012 `
    -ResourceType @(
        @{ResourceType = 'ec2:Instance'},
        @{ResourceType = 'ec2:LaunchTemplate'ResourceTypeOptions = @{'version-depth' = 100}
        })
```

**すべてのアカウントの AMI 使用状況レポートを作成するには**  
指定した AMI を使用しているすべてのアカウントをレポートするには、同じコマンドを使用しますが、`-AccountId` パラメータを省略します。

```
New-EC2ImageUsageReport `
    -ImageId ami-0abcdef1234567890 `
    -ResourceType @(
        @{ResourceType = 'ec2:Instance'},
        @{ResourceType = 'ec2:LaunchTemplate'ResourceTypeOptions = @{'version-depth' = 100}
        })
```

以下は出力の例です。

```
ReportId
--------
amiur-00b877d192f6b02d0
```

**レポート作成ステータスをモニタリングするには**  
[Get-EC2ImageUsageReport](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2ImageUsageReport.html) コマンドを使用してレポート ID を指定します。

```
Get-EC2ImageUsageReport -ReportId amiur-00b877d192f6b02d0
```

以下は出力の例です。`State` フィールドの初期値は `pending` です。レポートエントリを表示するには、状態が `available` である必要があります。

```
ImageUsageReports
-----------------
{@{ImageId=ami-0e9ae3dc21c2b3a64; ReportId=amiur-abcae3dc21c2b3999; ResourceTypes=System.Object[]; State=pending; CreationTime=2025-09-29; ExpirationTime=2025-10-28}}
```

------

## AMI の使用状況レポートを表示する
<a name="view-ami-usage-reports"></a>

AMI に対して過去 30 日間に作成したすべての使用状況レポートを表示できます。Amazon EC2 は、作成から 30 日後にレポートを自動的に削除します。

レポートごとに、AMI を使用している AWS アカウントを表示できます。アカウントごとに、AMI を参照しているリソースの数をリソースタイプ別に確認できます。レポートの作成が開始されたときを表示することもできます。この情報は、レポートが**完了** (コンソール) または `available` (AWS CLI) の場合に表示されます。

**重要**  
AMI の使用状況レポートを生成する場合、最新のアクティビティが含まれていない可能性があります。過去 24 時間のインスタンスアクティビティと、過去数日間の起動テンプレートアクティビティがレポートに表示されないことがあります。

------
#### [ Console ]

**AMI の使用状況レポートを表示するには**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. ナビゲーションペインで [**AMI**] を選択してください。

1. AMI を選択します。

1. **[My usage reports]** タブを選択します。

   レポートリストには以下が表示されます。
   + 選択した AMI に対して過去 30 日間に生成されたすべてのレポート。
   + レポートごとに、**[レポート開始時間]** 列にレポートが作成された日付が表示されます。

1. レポートの ID を選択すると、その内容が表示されます。

1. AMI の詳細ページの **[My usage reports]** タブに戻るには、**[この AMI のすべてのレポートを表示]** を選択します。

------
#### [ AWS CLI ]

**指定した AMI のすべての AMI 使用状況レポートを一覧表示するには**  
[describe-image-usage-reports](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-image-usage-reports.html) コマンドを使用して、レポートのリストを取得する AMI の ID を指定します。

```
aws ec2 describe-image-usage-reports --image-ids ami-0abcdef1234567890
```

以下は出力の例です。スキャンされたリソースタイプ、レポートの作成日と有効期限とともに各レポート ID が一覧表示されます。この情報を使用して、エントリを表示するレポートを識別できます。

```
{
  "ImageUsageReports": [
    {
      "ImageId": "ami-0abcdef1234567890",
      "ReportId": "amiur-1111111111111111",
      "ResourceTypes": [
        {
          "ResourceType": "ec2:Instance"
        }
      ],
      "State": "available",
      "CreationTime": "2025-09-29T13:27:12.322000+00:00",
      "ExpirationTime": "2025-10-28T13:27:12.322000+00:00",
      "Tags": []
    },
    {
      "ImageId": "ami-0abcdef1234567890",
      "ReportId": "amiur-22222222222222222",
      "ResourceTypes": [
        {
          "ResourceType": "ec2:Instance"
        },
        {
          "ResourceType": "ec2:LaunchTemplate"
        }
      ],
      "State": "available",
      "CreationTime": "2025-10-01T13:27:12.322000+00:00",
      "ExpirationTime": "2025-10-30T13:27:12.322000+00:00",
      "Tags": []
    }
  ],
  "NextToken": "opaque"
}
```

**指定した AMI の AMI 使用状況レポートの内容を表示するには**  
[describe-image-usage-report-entries](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-image-usage-report-entries.html) コマンドを使用して AMI の ID を指定します。指定した AMI のすべてのレポートが返され、AMI を使用したアカウントとそのリソース数が表示されます。

```
aws ec2 describe-image-usage-report-entries --image-ids ami-0abcdef1234567890
```

以下は出力の例です。

```
{
  "ImageUsageReportEntries": [
    {
      "ImageId": "ami-0abcdef1234567890",
      "ResourceType": "ec2:Instance",
      "AccountId": "123412341234",
      "UsageCount": 15,
      "ReportCreationTime": "2025-09-29T13:27:12.322000+00:00",
      "ReportId": "amiur-1111111111111111"
    },
    {
      "ImageId": "ami-0abcdef1234567890",
      "ResourceType": "ec2:Instance",
      "AccountId": "123412341234",
      "UsageCount": 2,
      "ReportCreationTime": "2025-10-01T13:27:12.322000+00:00",
      "ReportId": "amiur-22222222222222222"
    },
    {
      "ImageId": "ami-0abcdef1234567890",
      "ResourceType": "ec2:Instance",
      "AccountId": "001100110011",
      "UsageCount": 39,
      "ReportCreationTime": "2025-10-01T13:27:12.322000+00:00",
      "ReportId": "amiur-22222222222222222"
    }
  ],
  "NextToken": "opaque"
}
```

**指定したレポートの AMI 使用状況レポートの内容を表示するには**  
[describe-image-usage-report-entries](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-image-usage-report-entries.html) コマンドを使用してレポートの ID を指定します。指定したレポートのすべてのエントリが返され、AMI を使用したアカウントとそのリソース数が表示されます。

```
aws ec2 describe-image-usage-report-entries --report-ids amiur-11111111111111111
```

以下は出力の例です。

```
{
  "ImageUsageReportEntries": [
    {
      "ImageId": "ami-0abcdef1234567890",
      "ResourceType": "ec2:Instance",
      "AccountId": "123412341234",
      "UsageCount": 15,
      "ReportCreationTime": "2025-09-29T13:27:12.322000+00:00",
      "ReportId": "amiur-11111111111111111"
    },
    {
      "ImageId": "ami-0abcdef1234567890",
      "ResourceType": "ec2:LaunchTemplate",
      "AccountId": "123412341234",
      "UsageCount": 4,
      "ReportCreationTime": "2025-09-29T13:27:12.322000+00:00",
      "ReportId": "amiur-11111111111111111"
    },
    {
      "ImageId": "ami-0abcdef1234567890",
      "ResourceType": "ec2:LaunchTemplate",
      "AccountId": "001100110011",
      "UsageCount": 2,
      "ReportCreationTime": "2025-09-29T13:27:12.322000+00:00",
      "ReportId": "amiur-11111111111111111"
    }
  ],
  "NextToken": "opaque"
}
```

------
#### [ PowerShell ]

**指定した AMI のすべての AMI 使用状況レポートを一覧表示するには**  
[Get-EC2ImageUsageReport](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2ImageUsageReport.html) コマンドレットを使用して、レポートのリストを取得する AMI の ID を指定します。

```
Get-EC2ImageUsageReport -ImageId ami-0abcdef1234567890
```

以下は出力の例です。スキャンされたリソースタイプ、レポートの作成日と有効期限とともに各レポート ID が一覧表示されます。この情報を使用して、エントリを表示するレポートを識別できます。

```
@{
    ImageUsageReports = @(
        @{
            ImageId = "ami-0abcdef1234567890"
            ReportId = "amiur-1111111111111111"
            ResourceTypes = @(
                @{
                    ResourceType = "ec2:Instance"
                }
            )
            State = "available"
            CreationTime = "2025-09-29T13:27:12.322000+00:00"
            ExpirationTime = "2025-10-28T13:27:12.322000+00:00"
        },
        @{
            ImageId = "ami-0abcdef1234567890"
            ReportId = "amiur-22222222222222222"
            ResourceTypes = @(
                @{
                    ResourceType = "ec2:Instance"
                }
            )
            State = "available"
            CreationTime = "2025-09-30T13:27:12.322000+00:00"
            ExpirationTime = "2025-10-29T13:27:12.322000+00:00"
        },
        @{
            ImageId = "ami-0abcdef1234567890"
            ReportId = "amiur-33333333333333333"
            ResourceTypes = @(
                @{
                    ResourceType = "ec2:Instance"
                }
            )
            State = "available"
            CreationTime = "2025-10-01T13:27:12.322000+00:00"
            ExpirationTime = "2025-10-30T13:27:12.322000+00:00"
        }
    )
    NextToken = "opaque"
}
```

**指定した AMI の AMI 使用状況レポートの内容を表示するには**  
[Get-EC2ImageUsageReportEntry](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2ImageUsageReportEntry.html) コマンドレットを使用して AMI の ID を指定します。指定した AMI のすべてのレポートが返され、AMI を使用したアカウントとそのリソース数が表示されます。

```
Get-EC2ImageUsageReportEntry -ImageId ami-0abcdef1234567890
```

以下は出力の例です。

```
ImageUsageReportEntries : {@{
    ImageId = "ami-0abcdef1234567890"
    ResourceType = "ec2:Instance"
    AccountId = "123412341234"
    UsageCount = 15
    ReportCreationTime = "2025-09-29T13:27:12.322000+00:00"
    ReportId = "amiur-1111111111111111"
    }, @{
    ImageId = "ami-0abcdef1234567890"
    ResourceType = "ec2:Instance"
    AccountId = "123412341234"
    UsageCount = 7
    ReportCreationTime = "2025-09-30T13:27:12.322000+00:00"
    ReportId = "amiur-22222222222222222"
    }...}
NextToken : opaque
```

**指定したレポートの AMI 使用状況レポートの内容を表示するには**  
[Get-EC2ImageUsageReportEntry](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2ImageUsageReportEntry.html) コマンドレットを指定してレポートの ID を指定します。指定したレポートのすべてのエントリが返され、AMI を使用したアカウントとそのリソース数が表示されます。

```
Get-EC2ImageUsageReportEntry -ReportId amiur-11111111111111111
```

以下は出力の例です。

```
ImageUsageReportEntries : {@{
    ImageId = "ami-0abcdef1234567890"
    ResourceType = "ec2:Instance"
    AccountId = "123412341234"
    UsageCount = 15
    ReportCreationTime = "2025-09-29T13:27:12.322000+00:00"
    ReportId = "amiur-11111111111111111"
    }, @{
    ImageId = "ami-0abcdef1234567890"
    ResourceType = "ec2:LaunchTemplate"
    AccountId = "123412341234"
    UsageCount = 4
    ReportCreationTime = "2025-09-29T13:27:12.322000+00:00"
    ReportId = "amiur-11111111111111111"
    }, @{
    ImageId = "ami-0abcdef1234567890"
    ResourceType = "ec2:LaunchTemplate"
    AccountId = "************"
    UsageCount = 2
    ReportCreationTime = "2025-09-29T13:27:12.322000+00:00"
    ReportId = "amiur-11111111111111111"
    }}
NextToken : opaque
```

------

## AMI の使用状況レポートを削除する
<a name="delete-ami-usage-reports"></a>

Amazon EC2 は、レポートの作成から 30 日後に自動的にレポートを削除します。その前に手動で削除することができます。

------
#### [ Console ]

**AMI の使用状況レポートを削除するには**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. ナビゲーションペインで [**AMI**] を選択してください。

1. AMI を選択します。

1. **[AMI の使用状況]** タブを選択します。

1. 削除するレポートの横にあるオプションボタンを選択して、**[削除]** を選択します。

------
#### [ AWS CLI ]

**AMI の使用状況レポートを削除するには**  
[delete-image-usage-report](https://docs.aws.amazon.com/cli/latest/reference/ec2/delete-image-usage-report.html) コマンドを使用して、レポートの ID を指定します。

```
aws ec2 delete-image-usage-report --report-id amiur-0123456789abcdefg
```

------
#### [ PowerShell ]

**AMI の使用状況レポートを削除するには**  
[Remove-EC2ImageUsageReport](https://docs.aws.amazon.com/powershell/latest/reference/items/Remove-EC2ImageUsageReport.html) コマンドレットを使用して、レポートの ID を指定します。

```
Remove-EC2ImageUsageReport -ReportId amiur-0123456789abcdefg
```

------

## レポートに関するクォータ
<a name="ami-usage-report-quotas"></a>

AMI 使用状況レポートの作成には、次のクォータが適用されます。AWS リージョン ごとにクォータが適用されます。


| 説明 | クォータ | 
| --- | --- | 
| AWS アカウント ごとの進行中の (pending) AMI 使用状況レポート | 2,000 | 
| AMI ごとの進行中の (pending) AMI 使用状況レポート | 1 | 

# Amazon EC2 AMI が最後に使用された日時を確認する
<a name="ami-last-launched-time"></a>

Amazon EC2 は、インスタンスを起動するために AMI が最後に使用された日時を自動的に追跡します。長期間インスタンスの起動に使用されていない AMI がある場合は、その AMI を[登録解除](deregister-ami.md)または[非推奨化](ami-deprecate.md)の候補とするかどうかを検討してください。

**考慮事項**
+ インスタンスを起動するために AMI が使用される場合、その発生から 24 時間経過した後に報告されます。
+ 最終起動時間を取得するには、AMI の所有者である必要があります。
+ AMI 使用状況データは、2017 年 4 月以降利用可能です。

------
#### [ Console ]

**AMI の最終起動時間を表示するには**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. 左のナビゲーションペインで [**AMI**] を選択してください。

1. フィルターバーから、**[Owned by me]** (自己所有) を選択します。

1. AMI のチェックボックスをオンにします。

1. **[詳細]** タブで **[最終起動時刻]** を見つけます。

------
#### [ AWS CLI ]

**AMI を記述して最終起動時間を表示するには**  
[describe-images](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) コマンドを使用します。出力に `LastLaunchedTime` が含まれていない場合は、自分がその AMI を所有しているか確認します。

```
aws ec2 describe-images \
    --image-id ami-0abcdef1234567890 \
    --query Images[].LastLaunchedTime \
    --output text
```

以下は出力の例です。

```
2025-02-17T20:22:19Z
```

**AMI の最終起動時間の属性を表示するには**  
[describe-image-attribute](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-image-attribute.html) コマンドを使用します。ユーザーは、指定した AMI の所有者でなければなりません。

```
aws ec2 describe-image-attribute \
    --image-id ami-0abcdef1234567890 \
    --attribute lastLaunchedTime \
    --query LastLaunchedTime.Value \
    --output text
```

以下は出力の例です。

```
2025-02-17T20:22:19Z
```

------
#### [ PowerShell ]

**AMI を記述して最終起動時間を表示するには**  
[Get-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Image.html) コマンドレットを使用します。出力に `LastLaunchedTime` が含まれていない場合は、自分がその AMI を所有しているか確認します。

```
(Get-EC2Image -ImageId ami-0abcdef1234567890).LastLaunchedTime
```

以下は出力の例です。

```
2025-02-17T20:22:19Z
```

**AMI の最終起動時間の属性を表示するには**  
[Get-EC2ImageAttribute](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2ImageAttribute.html) コマンドレットを使用します。ユーザーは、指定した AMI の所有者でなければなりません。

```
(Get-EC2ImageAttribute `
    -ImageId ami-0abcdef1234567890 `
    -Attribute LastLaunchedTime).LastLaunchedTime
```

以下は出力の例です。

```
2025-02-17T20:22:19Z
```

------

# 指定した AMI を参照しているリソースを識別します。
<a name="ec2-ami-references"></a>

指定した Amazon マシンイメージ (AMI) を参照する AWS リソースは、AMI がパブリックかプライベートか、または誰が所有しているかに関係なく識別できます。この可視性により、リソースが最新の準拠 AMI を使用することが保証されます。

**主な利点**

AMI の参照をチェックすると、次のことに役立ちます。
+ アカウントでの AMI の使用を監査します。
+ 特定の AMI が参照されている場所を確認します。
+ リソースを更新して最新の AMI を参照することでコンプライアンスを維持します。

 

**Topics**
+ [サポートされているリソース](#ec2-ami-references-supported-resources)
+ [AMI 参照チェックの仕組み](#how-ami-references-works)
+ [必要な IAM 許可](#ami-references-required-permissions)
+ [AMI の参照を確認する手順](#ami-reference-procedures)

## サポートされているリソース
<a name="ec2-ami-references-supported-resources"></a>

AMI の参照は以下でチェックできます。
+ EC2 インスタンス
+ 起動テンプレート
+ SSM パラメータ
+ Image Builder のイメージレシピ
+ Image Builder コンテナレシピ

## AMI 参照チェックの仕組み
<a name="how-ami-references-works"></a>

**基本オペレーション**

AMI 参照チェックを実行する際は、以下の手順を実行します。
+ 確認する AMI を指定します。
+ スキャンするリソースタイプを選択します。
+ 指定した AMI を参照するリソースのリストを受け取ります。

**リソースタイプの選択**

コンソールで、スキャンするリソースタイプを選択します。

CLI では、次の CLI パラメータのいずれかまたは両方を使用して、スキャンするリソースタイプを指定します。
+ `IncludeAllResourceTypes`: サポートされているすべてのリソースタイプをスキャンします。
+ `ResourceTypes`: 指定したリソースタイプをスキャンします。

**応答の範囲設定**

`ResourceTypes` パラメータを使用して `ResourceTypeOptions` の値をカスタマイズすることで、EC2 インスタンスと起動テンプレートの応答範囲を指定できます。コンソールと `IncludeAllResourceTypes` パラメータはどちらもデフォルトのオプション値を使用します。`ResourceTypes` と `IncludeAllResourceTypes` を一緒に使用すると、`ResourceTypes` オプション値がデフォルトよりも優先されます。

デフォルト値を以下に示します。


| リソースタイプ | 範囲オプション (`OptionName`） | 目的 | `OptionValue` とコンソールのデフォルト値 | 
| --- | --- | --- | --- | 
| EC2 インスタンス | state-name | インスタンスの状態でフィルタリングする | pending、running、shutting-down、terminated、stopping、stopped (すべての状態) | 
| 起動テンプレート | version-depth | 確認する起動テンプレートのバージョンの数を指定します (最新バージョンから開始)。 | 10 (最新バージョン) | 

## 必要な IAM 許可
<a name="ami-references-required-permissions"></a>

DescribeImageReferences API を使用して、指定された AMI を参照するリソースを特定するには、リソースを記述するために次の IAM アクセス許可が必要です。
+ `ec2:DescribeInstances`
+ `ec2:DescribeLaunchTemplates`
+ `ec2:DescribeLaunchTemplateVersions`
+ `ssm:DescribeParameters`
+ `ssm:GetParameters`
+ `imagebuilder:ListImageRecipes`
+ `imagebuilder:ListContainerRecipes`
+ `imagebuilder:GetContainerRecipe`

**DescribeImageReferences API を使用するための IAM ポリシーの例**  
次のポリシー例では、DescribeImageReferences API を使用するアクセス許可を付与します。これには、EC2 インスタンス、起動テンプレート、Systems Manager パラメータ、Image Builder イメージレシピ、Image Builder コンテナレシピを記述するアクセス許可が含まれます。

------
#### [ JSON ]

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": "ec2:DescribeImageReferences",
			"Resource": "*"
		},
		{
			"Effect": "Allow",
			"Action": [
				"ec2:DescribeInstances",
				"ec2:DescribeLaunchTemplates",
				"ec2:DescribeLaunchTemplateVersions",
				"ssm:DescribeParameters",
				"ssm:GetParameters",
				"imagebuilder:ListImageRecipes",
				"imagebuilder:ListContainerRecipes",
				"imagebuilder:GetContainerRecipe"
			],
			"Resource": "*",
			"Condition": {
				"ForAnyValue:StringEquals": {
					"aws:CalledVia": [
						"ec2-images.amazonaws.com"
					]
				}
			}
		}
	]
}
```

------

**重要**  
自分でポリシーを作成する代わりに、AWS マネージドポリシー [https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonEC2ImageReferencesAccessPolicy.html](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonEC2ImageReferencesAccessPolicy.html) を使用することを強くお勧めします。必要なアクセス許可のみを提供するカスタム IAM ポリシーを作成するには時間と専門知識が必要で、新しいリソースタイプが利用可能になったときに更新が必要になります。  
`AmazonEC2ImageReferencesAccessPolicy` マネージドポリシー:  
DescribeImageReferences API を使用するために必要なすべてのアクセス許可を付与します (EC2 インスタンス、起動テンプレート、Systems Manager パラメータ、Image Builder コンテナとイメージレシピを記述するためのアクセス許可が含まれます)。
利用可能になった新しいリソースタイプを自動的にサポートします (`IncludeAllResourceTypes` パラメータを使用する場合、特に重要です)。
`AmazonEC2ImageReferencesAccessPolicy` ポリシーは IAM アイデンティティ (ユーザー、グループ、ロール) にアタッチできます。  
このポリシーに含まれるアクセス許可を確認するには、「*AWS マネージドポリシーリファレンス*」の「[https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonEC2ImageReferencesAccessPolicy.html](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonEC2ImageReferencesAccessPolicy.html)」を参照してください。

## AMI の参照を確認する手順
<a name="ami-reference-procedures"></a>

次の手順を使用して、指定した AMI を参照している AWS リソースを特定します。

------
#### [ Console ]

**指定した AMI を参照するリソースを識別するには**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. ナビゲーションペインで [**AMI**] を選択してください。

1. 参照をチェックする 1 つまたは複数の AMI を選択します。

1. **[アクション]**、**[AMI の使用状況]**、**[参照先リソースを表示]** の順に選択します。

1. **[選択した AMI を参照しているリソースを表示]** ページで次の操作を実行します。

   1. **[リソースタイプ]** で 1 つ以上のリソースタイプを選択します。

   1. **[リソースの表示]** を選択します。

1. **[選択した AMI を参照するリソース]** セクションが表示されます。リストには、指定された AMI を参照するリソースが表示されます。各行には、以下に関する情報が表示されます。
   + **[AMI ID]** – 参照されている AMI の ID。
   + **[リソースタイプ]** – AMI を参照しているリソースのリソースタイプ。
   + **[リソース ID]** – AMI を参照しているリソースの ID。

------
#### [ AWS CLI ]

**特定のリソースタイプの AMI 参照を確認するには**  
`--resource-types` パラメータで [describe-image-references](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-image-references.html) コマンドを使用します。次の例では、EC2 インスタンス（インスタンスの状態による範囲指定)、起動テンプレート (最新の 20 個の起動テンプレートバージョンによる範囲指定)、その他の特定のリソースタイプをチェックします。

```
aws ec2 describe-image-references \
    --image-ids ami-0abcdef1234567890 ami-1234567890abcdef0 \
    --resource-types \
        'ResourceType=ec2:Instance,ResourceTypeOptions=[{OptionName=state-name,OptionValues=[running,pending]}]' \
        'ResourceType=ec2:LaunchTemplate,ResourceTypeOptions=[{OptionName=version-depth,OptionValues=[20]}]' \
        'ResourceType=ssm:Parameter' \
        'ResourceType=imagebuilder:ImageRecipe' \
        'ResourceType=imagebuilder:ContainerRecipe'
```

以下は出力の例です。

```
{
    "ImageReferences": [
        {
            "ImageId": "ami-0abcdef1234567890",
            "ResourceType": "ec2:Instance",
            "Arn": "arn:aws:ec2:us-east-1:123456789012:instance/i-1234567890abcdef0"
        },
        {
            "ImageId": "ami-1234567890abcdef0",
            "ResourceType": "ec2:LaunchTemplate",
            "Arn": "arn:aws:ec2:us-east-1:123456789012:launch-template/lt-1234567890abcdef0"
        }
    ]
}
```

**サポートされているすべてのリソースタイプの AMI 参照を確認するには**  
`--include-all-resource-types` パラメータで [describe-image-references](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-image-references.html) コマンドを使用します。

```
aws ec2 describe-image-references \
    --image-ids ami-0abcdef1234567890 ami-1234567890abcdef0 \
    --include-all-resource-types
```

**サポートされているすべてのリソースタイプと特定のオプションの AMI 参照を確認するには**  
`--include-all-resource-types` と `--resource-types` の両方のパラメータで [describe-image-references](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-image-references.html) コマンドを使用します。この例では、実行中または保留中のインスタンスに対する EC2 インスタンスの応答範囲を指定しながら、すべてのリソースタイプをチェックします。

```
aws ec2 describe-image-references \
    --image-ids ami-0abcdef1234567890 ami-1234567890abcdef0 \
    --include-all-resource-types \
    --resource-types 'ResourceType=ec2:Instance,ResourceTypeOptions=[{OptionName=state-name,OptionValues=[running,pending]}]'
```

------
#### [ PowerShell ]

**特定のリソースタイプの AMI 参照を確認するには**  
`-ResourceType` パラメータで [Get-EC2ImageReference](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2ImageReference.html) コマンドレットを使用します。次の例では、EC2 インスタンス（インスタンスの状態による範囲指定)、起動テンプレート (最新の 20 個の起動テンプレートバージョンによる範囲指定)、その他の特定のリソースタイプをチェックします。

```
Get-EC2ImageReference `
    -ImageId 'ami-0abcdef1234567890', 'ami-1234567890abcdef0' `
    -ResourceType @(
        @{
            ResourceType = 'ec2:Instance'
            ResourceTypeOptions = @(
                @{
                    OptionName = 'state-name'
                    OptionValues = @('running', 'pending')
                }
            )
        },
        @{
            ResourceType = 'ec2:LaunchTemplate'
            ResourceTypeOptions = @(
                @{
                    OptionName = 'version-depth'
                    OptionValues = @('20')
                }
            )
        },
        @{
            ResourceType = 'ssm:Parameter'
        },
        @{
            ResourceType = 'imagebuilder:ImageRecipe'
        },
        @{
            ResourceType = 'imagebuilder:ContainerRecipe'
        }
    )
```

**サポートされているすべてのリソースタイプの AMI 参照を確認するには**  
`-IncludeAllResourceTypes` パラメータで [Get-EC2ImageReference](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2ImageReference.html) コマンドレットを使用します。

```
Get-EC2ImageReference `
    -ImageId 'ami-0abcdef1234567890', 'ami-1234567890abcdef0' `
    -IncludeAllResourceTypes
```

**サポートされているすべてのリソースタイプと特定のオプションの AMI 参照を確認するには**  
`-IncludeAllResourceTypes` と `-ResourceType` の両方のパラメータで [Get-EC2ImageReference](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2ImageReference.html) コマンドレットを使用します。この例では、実行中または保留中のインスタンスに対する EC2 インスタンスの応答範囲を指定しながら、すべてのリソースタイプをチェックします。

```
Get-EC2ImageReference `
    -ImageId 'ami-0abcdef1234567890', 'ami-1234567890abcdef0' `
    -IncludeAllResourceTypes `
    -ResourceType @(
        @{
            ResourceType = 'ec2:Instance'
            ResourceTypeOptions = @(
                @{
                    OptionName = 'state-name'
                    OptionValues = @('running', 'pending')
                }
            )
        }
    )
```

------

# Amazon EC2 AMI を非推奨にする
<a name="ami-deprecate"></a>

AMI の使用を避けることで、それが古く、使用すべきではないことを示せます。AMI が非推奨となる将来の日付を特定し、AMI が使用期限切れになるタイミングを知ることも可能です。例えば、現在有効な管理が行われていない AMI の使用を避けたり、新しいバージョンで置き換えられている AMI を避けたりすることができます。新しいユーザーが古い AMI を使用することを防止するため、デフォルトで、非推奨の AMI は AMI のリストに表示されていません。ただし、既存のユーザーおよび起動サービス (起動テンプレートや Auto Scaling グループなど) では、ID を指定することで、非推奨の AMI を引き続き使用できます。AMI を削除して、ユーザーとサービスが使用できないようにするには、その AMI を[登録解除](deregister-ami.md)します。

AMIが非推奨となった後は、以下が実施されます。
+ AMI ユーザーの場合、非推奨の AMI は (ID を指定した場合や、非推奨の AMI を表示する必要があると指定した場合を除き) [DescribeImages](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeImages.html) API 呼び出しに表示されなくなります。AMIの 所有者に対しては、非推奨の AMI は引き続き [DescribeImages](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeImages.html) API 呼び出しに表示されます。
+ AMI ユーザーは、非推奨の AMI をは EC2 コンソール経由で選択できなくなります。例えば、非推奨の AMI は、インスタンスの起動ウィザードの AMI カタログに表示されません。AMI 所有者の EC2 コンソール上には、非推奨の AMI が引き続き表示されます。
+ AMI ユーザーで、非推奨となった AMI の ID がわかっている場合は、API、CLI、または SDK により、非推奨の AMI を使用しながらインスタンスの起動を継続することができます。
+ 起動テンプレートや Auto Scaling グループなどの起動サービスは、非推奨の AMI を引き続き参照できます。
+ 今後非推奨となる予定の AMI を使用して起動された EC2 インスタンスは影響を受けず、停止、起動、および再起動が可能です。

プライベート AMI とパブリック AMI の両方を非推奨にすることができます。

**Topics**
+ [コスト](#ami-deprecate-costs)
+ [考慮事項](#ami-deprecate-limitations)
+ [AMI を非推奨にする](#deprecate-ami)
+ [非推奨の AMI の詳細表示](#describe-deprecate-ami)
+ [AMI の非推奨化をキャンセルする](#cancel-deprecate-ami)

## コスト
<a name="ami-deprecate-costs"></a>

AMI を非推奨にしても、その AMI は削除されません。AMI 所有者には、その AMI のスナップショットのための料金が引き続き請求されます。スナップショットの支払いを停止するには、AMI 所有者は、[登録解除](deregister-ami.md)により AMI を削除する必要があります。

## 考慮事項
<a name="ami-deprecate-limitations"></a>
+ AMI を非推奨にするには、AMI の所有者である必要があります。
+ インスタンスを起動するために最近使用されていない AMI は、非推奨や登録解除の対象となる可能性が高いです。詳細については、「[Amazon EC2 AMI が最後に使用された日時を確認する](ami-last-launched-time.md)」を参照してください。
+ Amazon Data Lifecycle Manager EBS-backed AMI ポリシーを作成することで、EBS-backed AMI の廃止を自動化できます。詳細については、「[Create AMI lifecycle policies](https://docs.aws.amazon.com/ebs/latest/userguide/ami-policy.html)」を参照してください。
+ すべてのパブリック AMI を非推奨にする日をデフォルトで AMI 作成日の 2 年後とします。非推奨にする日は 2 年より前の日付に設定できます。非推奨にする日を取り消す場合や、非推奨にする日をもっと先の日付に変える場合は、AMI を[特定の AWS アカウントとのみ共有する](sharingamis-explicit.md)ようにして、AMI を非公開にする必要があります。

## AMI を非推奨にする
<a name="deprecate-ami"></a>

AMI を非推奨にする日時を指定することができます。ユーザーは、この AMI の所有者である必要があります。

非推奨日の上限は 10 年後ですが、パブリック AMI は例外で、上限は作成日から 2 年です。過去の日付を指定することはできません。

------
#### [ Console ]

**AMI を特定の日付に非推奨にするには**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. 左のナビゲーターで **[AMI]** を選択します。

1. フィルターバーから、**[Owned by me]** (自己所有) を選択します。

1. AMI を選択し、**[Actions]** (アクション)、**[Manage AMI Deprecation]** (AMI 非推奨を管理) の順に選択します。複数の AMI を選択して、複数の AMI の同じ非推奨日を一度に設定できます。

1. **[有効化]** のチェックボックスをオンにしたら、非推奨となった日付および時刻を入力します。

1. **[保存]** を選択します。

------
#### [ AWS CLI ]

**AMI を特定の日付に非推奨にするには**  
[enable-image-deprecation](https://docs.aws.amazon.com/cli/latest/reference/ec2/enable-image-deprecation.html) コマンドを使用します。秒の値を指定した場合は、Amazon EC2 により最も近い分に丸められます。

```
aws ec2 enable-image-deprecation \
    --image-id ami-0abcdef1234567890 \
    --deprecate-at "2025-04-15T13:17:12.000Z"
```

------
#### [ PowerShell ]

**AMI を特定の日付に非推奨にするには**  
[Enable-EC2ImageDeprecation](https://docs.aws.amazon.com/powershell/latest/reference/items/Enable-EC2ImageDeprecation.html) コマンドレットを使用します。秒の値を指定した場合は、Amazon EC2 により最も近い分に丸められます。

```
Enable-EC2ImageDeprecation `
    -ImageId ami-0abcdef1234567890 `
    -DeprecateAt 2025-04-15T13:17:12.000Z
```

------

## 非推奨の AMI の詳細表示
<a name="describe-deprecate-ami"></a>

AMI が非推奨になった日時を表示し、すべての AMI を非推奨になった日付でフィルタリングすることができます。

------
#### [ Console ]

**AMI が非推奨になった日付を表示するには**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. 左側のナビゲーターで [**AMI**] をクリックした後、AMI を選択します。

1. **[非推奨になった時刻]** フィールドにチェックをオンにします (AMI の横にあるチェックボックスをオンにした場合、**[詳細]** タブにあります)。このフィールドには、AMI の非推奨の日次が表示されます。フィールドが空の場合は、AMI は非推奨ではありません。

**非推奨になった日付で AMI をフィルタリングするには**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. 左のナビゲーターで **[AMI]** を選択します。

1. フィルターバーから、**[Owned by me]** (自己所有) または **[Private images]** (プライベートイメージ) を選択します (プライベートイメージには、共有されている AMI のほかに、所有している AMI も含まれます)。

1. 検索バーで **Deprecation time** と入力し (文字を入力すると、**[Deprecation time]** (非推奨となった時刻) のフィルターが表示されます)、演算子と日時を選択します。

------
#### [ AWS CLI ]

すべての AMI を記述すると、結果は、ユーザーが AMI ユーザーであるか AMI 所有者であるかに応じて変わってきます。
+ **AMI ユーザー** – デフォルトでは、ユーザーがすべての AMI を記述すると、ユーザーに共有されているが、ユーザーが所有者ではない非推奨の AMI は、結果から除外されます。非推奨の AMI を結果に含めるには、`--include-deprecated` オプションを指定します。
+ **AMI 所有者** – ユーザーがすべての AMI を記述すると、ユーザーが所有するすべての AMI (非推奨の AMI を含む) が、結果に含まれます。`--no-include-deprecated` オプションを使用して、所有する非推奨の AMI を除外することはできません。

**非推奨の AMI を含めて、アカウントのすべての AMI を記述するには**  
次の [describe-images](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) コマンドを使用します。

```
aws ec2 describe-images 
    --owners 123456789012 \   
    --include-deprecated
```

**アカウントの非推奨の AMI を記述するには**  
次の [describe-images](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) コマンドを使用します。

```
aws ec2 describe-images \
    --owners self \
    --query "Images[?DeprecationTime!=null].ImageId" \
    --output text
```

以下は出力の例です。

```
ami-0abcdef1234567890
```

**AMI が非推奨となった日付を表示するには**  
次の [describe-images](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) コマンドを使用します。出力に `DeprecationTime` がない場合、AMI は非推奨ではなく、将来的に非推奨に設定されることもありません。

```
aws ec2 describe-images \
    --image-ids ami-0abcdef1234567890 \
    --query Images[].DeprecationTime \
    --output text
```

以下は出力の例です。

```
2025-05-01T00:00:00.000Z
```

------
#### [ PowerShell ]

**アカウントの非推奨の AMI を一覧表示するには**  
[Get-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Image.html) コマンドレットを使用します。

```
(Get-EC2Image -Owner self | Where-Object {$_.DeprecationTime -ne $null}).ImageId
```

以下は出力の例です。

```
ami-0abcdef1234567890
```

**AMI が非推奨となった日付を表示するには**  
[Get-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Image.html) コマンドレットを使用します。出力に `DeprecationTime` がない場合、AMI は非推奨ではなく、将来的に非推奨に設定されることもありません。

```
(Get-EC2Image -ImageId ami-0abcdef1234567890).DeprecationTime
```

以下は出力の例です。

```
2025-05-01T00:00:00.000Z
```

------

## AMI の非推奨化をキャンセルする
<a name="cancel-deprecate-ami"></a>

AMI の非推奨はキャンセルすることができ、それにより、非推奨の日時が削除されます。この手順を実行するには、AMI の所有者である必要があります。

------
#### [ Console ]

**非推奨となっている AMI を復旧するには**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. 左のナビゲーターで **[AMI]** を選択します。

1. フィルターバーから、**[Owned by me]** (自己所有) を選択します。

1. AMI を選択し、**[Actions]** (アクション)、**[Manage AMI Deprecation]** (AMI 非推奨を管理) の順に選択します。複数の AMI を選択して、複数の AMI の非推奨を一度にキャンセルできます。

1. **[有効化]** チェックボックスをオフにしたら、**[保存]** を選択します。

------
#### [ AWS CLI ]

**AMI の非推奨をキャンセルするには**  
次の [disable-image-deprecation](https://docs.aws.amazon.com/cli/latest/reference/ec2/disable-image-deprecation.html) コマンドを使用します。

```
aws ec2 disable-image-deprecation --image-id ami-0abcdef1234567890
```

------
#### [ PowerShell ]

**AMI の非推奨をキャンセルするには**  
[Disable-EC2ImageDeprecation](https://docs.aws.amazon.com/powershell/latest/reference/items/Disable-EC2ImageDeprecation.html) コマンドレットを使用します。

```
Disable-EC2ImageDeprecation -ImageId ami-0abcdef1234567890
```

------

# Amazon EC2 AMI を無効にする
<a name="disable-an-ami"></a>

AMI を無効にして、インスタンスの起動に使用されないようにできます。無効な AMI から新しいインスタンスを起動することはできません。無効化された AMI を再度有効にして、インスタンスの起動時に再び使用できるようにすることができます。

プライベート AMI とパブリック AMI の両方を無効化できます。

使用頻度は低いが、長期間保持する必要がある無効な EBS-backed AMI のストレージコストを削減するには、関連するスナップショットをアーカイブできます。詳細については、「*Amazon EBS ユーザーガイド*」の「[Amazon EBS スナップショットのアーカイブ](https://docs.aws.amazon.com/ebs/latest/userguide/snapshot-archive.html)」を参照してください。

**Topics**
+ [AMI 無効化の仕組み](#how-disable-ami-works)
+ [コスト](#ami-disable-costs)
+ [前提条件](#ami-disable-prerequisites)
+ [必要な IAM 許可](#ami-disable-iam-permissions)
+ [AMI の無効化](#disable-ami)
+ [無効化された AMI の説明](#describe-disabled-ami)
+ [無効化された AMI を再度有効にする](#re-enable-a-disabled-ami)

## AMI 無効化の仕組み
<a name="how-disable-ami-works"></a>

**警告**  
AMI を無効にすると、AMI のすべての起動権限が削除されます。

**AMI が無効になっている場合:**
+ AMI の状態は `disabled` に変わります。
+ 無効化された AMI は共有できません。AMI が公開されていたか、以前に共有されていた場合は、非公開になります。AMI が AWS アカウント、組織または組織単位で共有されていた場合、無効になっている AMI にはアクセスできなくなります。
+ 無効化された AMI は、デフォルトで [https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeImages.html](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeImages.html) API 呼び出しに表示されません。
+ 無効化された AMI は **[自分が所有]** コンソールフィルタには表示されません。無効になっている AMI を検索するには、**[無効化されたイメージ]** コンソールフィルタを使用してください。
+ 無効化された AMI は、EC2 コンソールのインスタンス起動時に選択できません。たとえば、無効化された AMI はインスタンスの起動ウィザードの AMI カタログに表示されません。また、起動テンプレート作成時にも表示されません。
+ 起動テンプレートや Auto Scaling グループなどの起動サービスは、無効化された AMI を引き続き参照できます。無効化された AMI からのそれ以降のインスタンスの起動は失敗するため、使用可能な AMI のみを参照するように、起動テンプレートと Auto Scaling グループを更新することをお勧めします。
+ 今後無効化される予定の AMI を使用して起動された EC2 インスタンスは影響を受けず、停止、起動、および再起動が可能です。
+ 無効になっている AMI に関連するスナップショットは削除できません。関連するスナップショットを削除しようとすると `snapshot is currently in use` エラーになります。

**AMI が再び有効になると:**
+ AMI の状態が `available` に変わり、インスタンスの起動に使用できるようになります。
+ AMI は共有できます。
+ AMI を無効にしたときに AMI にアクセスできなくなった AWS アカウント、組織、および組織単位は、自動的にアクセスを回復できませんが、AMI を再び共有することは可能です。

## コスト
<a name="ami-disable-costs"></a>

AMI を無効化しても、その AMI は削除されません。EBS-backed AMI の場合は、AMI の EBS スナップショットの料金を引き続きお支払いいただきます。AMI を残しておきたい場合は、スナップショットをアーカイブすることでストレージコストを削減できる場合があります。詳細については、「Amazon EBS ユーザーガイド」の「[Amazon EBS スナップショットのアーカイブ](https://docs.aws.amazon.com/ebs/latest/userguide/snapshot-archive.html)」を参照してください。AMI とそのスナップショットを保持したくない場合は、AMI を登録解除し、スナップショットを削除する必要があります。詳細については、「[AMI の登録解除](deregister-ami.md)」を参照してください。

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

AMI を無効または再度有効にするには、AMI の所有者である必要があります。

## 必要な IAM 許可
<a name="ami-disable-iam-permissions"></a>

AMI を無効化する、および再度有効化するには、次の IAM 権限が必要です。
+ `ec2:DisableImage`
+ `ec2:EnableImage`

## AMI の無効化
<a name="disable-ami"></a>

AMI は EC2 コンソールまたは AWS Command Line Interface (AWS CLI) を使用して無効にできます。この手順を実行するには、AMI の所有者である必要があります。

------
#### [ Console ]

**AMI を無効化するには**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. 左のナビゲーションペインで [**AMI**] を選択してください。

1. フィルターバーから、**[Owned by me]** (自己所有) を選択します。

1. AMI を選択し、**[アクション]**、**[AMI を無効にする]** の順に選択します。複数の AMI を選択し、まとめて無効化することもできます。

1. **[AMI を無効にする]** ウィンドウで、**[AMI を無効にする]** を選択します。

------
#### [ AWS CLI ]

**AMI を無効化するには**  
次の [https://docs.aws.amazon.com/cli/latest/reference/ec2/disable-image.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/disable-image.html) コマンドを使用します。

```
aws ec2 disable-image --image-id ami-0abcdef1234567890
```

------
#### [ PowerShell ]

**AMI を無効化するには**  
[Disable-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Disable-EC2Image.html) コマンドレットを使用します。

```
Disable-EC2Image -ImageId ami-0abcdef1234567890
```

------

## 無効化された AMI の説明
<a name="describe-disabled-ami"></a>

無効化された AMI は EC2 コンソールと AWS CLI を使用して表示できます。

無効化された AMI を表示するには AMI 所有者である必要があります。無効化された AMI は非公開になるため、所有者以外には表示されません。

------
#### [ Console ]

**無効化された AMI を表示するには**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. 左のナビゲーションペインで [**AMI**] を選択してください。

1. フィルターバーから **[無効化された画像]** を選択します。  
![\[[無効化された画像] フィルター。\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/images/ami-filter-by-disabled-images.png)

------
#### [ AWS CLI ]

デフォルトでは、すべての AMI を記述した場合、無効化された AMI は結果に含まれません。非推奨の AMI を結果に含めるには、`--include-disabled` オプションを指定します。AMI が無効になっている場合、AMI の `State` フィールドは `disabled` になります。

**無効になっている AMI も含めてアカウントのすべての AMI を記述するには**  
次の [https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) コマンドを使用します。

```
aws ec2 describe-images \
    --owners 123456789012 \
    --include-disabled
```

**アカウントの無効になっている AMI を一覧表示するには**  
次の [https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) コマンドを使用します。

```
aws ec2 describe-images \
    --owners self \
    --include-disabled \
    --filters Name=state,Values=disabled \
    --query Images[].ImageId \
    --output text
```

以下は出力の例です。

```
ami-0abcdef1234567890
```

**AMI のステータスを記述するには**  
次の [https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) コマンドを使用します。出力に `DeprecationTime` がない場合、AMI は非推奨ではなく、将来的に非推奨に設定されることもありません。

```
aws ec2 describe-images \
    --image-ids ami-0abcdef1234567890 \
    --query Images[].State \
    --output text
```

以下は出力の例です。

```
disabled
```

------
#### [ PowerShell ]

デフォルトでは、すべての AMI を記述した場合、無効化された AMI は結果に含まれません。無効になった AMI を結果に含めるには、`-IncludeDisabled` パラメータを指定します。AMI が無効になっている場合、AMI の `State` フィールドは `disabled` になります。

**アカウントの無効になっている AMI を一覧表示するには**  
[Get-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Image.html) コマンドレットを使用します。

```
(Get-EC2Image `
    -Owner self `
    -IncludeDisabled $true | Where-Object {$_.State -eq "disabled"}).ImageId
```

以下は出力の例です。

```
ami-0abcdef1234567890
```

**AMI のステータスを記述するには**  
[Get-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Image.html) コマンドレットを使用します。

```
(Get-EC2Image -ImageId ami-0abcdef1234567890).State.Value
```

以下は出力の例です。

```
disabled
```

------

## 無効化された AMI を再度有効にする
<a name="re-enable-a-disabled-ami"></a>

無効化された AMI を再度有効にすることができます。この手順を実行するには、AMI の所有者である必要があります。

------
#### [ Console ]

**無効化した AMI を再度有効にするには**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. 左のナビゲーションペインで [**AMI**] を選択してください。

1. フィルターバーから **[無効化された画像]** を選択します。

1. AMI を選択し、**[アクション]**、**[AMI を有効化]** の順に選択します。複数の AMI を選択し、まとめて再有効化を選択することもできます。

1. **[AMI を有効化]** ウィンドウで、**[有効化]** を選択します。

------
#### [ AWS CLI ]

**無効化した AMI を再度有効にするには**  
次の [https://docs.aws.amazon.com/cli/latest/reference/ec2/enable-image.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/enable-image.html) コマンドを使用します。

```
aws ec2 enable-image --image-id ami-0abcdef1234567890
```

------
#### [ PowerShell ]

**無効化した AMI を再度有効にするには**  
[Enable-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Enable-EC2Image.html) コマンドレットを使用します。

```
Enable-EC2Image -ImageId ami-0abcdef1234567890
```

------

# Amazon EC2 AMI の登録を解除する
<a name="deregister-ami"></a>

AMI の登録を解除すると、Amazon EC2 により AMI は完全に削除されます。AMI の登録を解除すると、それを使用して新しいインスタンスを起動できなくなります。AMI の利用が終わったら、その登録を解除することを検討するとよいでしょう。

AMI が誤ってまたは悪意によって登録解除されるのを防ぐために、[登録解除保護](ami-deregistration-protection.md)を有効にすることができます。EBS-backed AMI を誤って登録解除した場合、完全に削除されるまでの許容期間内に復元した場合にのみ、[ごみ箱](https://docs.aws.amazon.com/ebs/latest/userguide/recycle-bin.html)から復元できます。

AMI の登録解除時に、関連付けられたスナップショットを同時に削除することも可能です。ただし、スナップショットが複数の AMI に関連付けられている場合、AMI は登録解除できますが、スナップショットはたとえ削除対象として指定していても削除されません。削除されていないスナップショットには、引き続きストレージコストが発生します。

AMI の登録を解除しても、AMI から既に起動したインスタンスは影響を受けません。これらのインスタンスを引き続き使用できます。デフォルトでは、AMI の登録を解除しても、その AMI の作成プロセスで作成されたスナップショットには影響はありません。これらのスナップショットのインスタンスとストレージコストには、引き続き使用料が発生します。したがって、不要なコストの発生を避けるには、インスタンスをすべて終了し、不要なスナップショットをすべて削除することをお勧めします。スナップショットは、登録解除時に自動的に削除することも、あるいは登録解除後に手動で削除することも可能です。詳細については、「[未使用のリソースによるコストを回避する](#delete-unneeded-resources-to-avoid-unnecessary-costs)」を参照してください。

AMI から起動されたインスタンスがその後登録解除された場合でも、`describe-instance-image-metadata` AWS CLI コマンドを使用して AMI に関するいくつかの概要情報を表示できます。インスタンスのメタデ[タの詳細については、を参照してくださ](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instance-image-metadata.html).い。

**Topics**
+ [考慮事項](#deregister-ami-considerations)
+ [AMI の登録解除](#deregister-an-ami)
+ [未使用のリソースによるコストを回避する](#delete-unneeded-resources-to-avoid-unnecessary-costs)
+ [Amazon EC2 AMI を登録解除から保護する](ami-deregistration-protection.md)

## 考慮事項
<a name="deregister-ami-considerations"></a>
+ アカウントが所有していない AMI の登録を解除することはできません。
+ AWS Backup サービスで管理されている AMI の登録解除に、Amazon EC2 を使用することはできません。代わりに、AWS Backup を使用して、バックアップボールト内の対応するリカバリポイントを削除します。詳細については、「*AWS Backup デベロッパーガイド*」の「[バックアップの削除](https://docs.aws.amazon.com/aws-backup/latest/devguide/deleting-backups.html)」を参照してください。

## AMI の登録解除
<a name="deregister-an-ami"></a>

Amazon EBS-backed AMI と Amazon S3-backed AMI の登録を解除できます。EBS-backed AMI の場合、関連付けられたスナップショットを同時に削除することも可能です。ただし、スナップショットが他の AMI に関連付けられている場合は、たとえ削除対象として指定していても削除されません。

------
#### [ Console ]

**AMI の登録を解除するには**

1. Amazon EC2 コンソール ([https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)) を開きます。

1. ナビゲーションペインで **[AMI]** を選択してください。

1. フィルターバーから **[自己所有]** を選択して使用可能な AMI を一覧表示するか、**[無効化されたイメージ]** を選択して無効になっている AMI を一覧表示します。

1. 登録を解除する AMI を選択してください。

1. **[アクション]**、**[AMI の登録解除]** の順に選択してください。

1. (オプション) 関連付けられたスナップショットを登録解除時に削除するには、**[関連付けられたスナップショットの削除]** チェックボックスをオンにします。
**注記**  
スナップショットが他の AMI に関連付けられている場合は、たとえこのチェックボックスを選択してもスナップショットは削除されないので注意してください。

1. **[AMI の登録解除]** を選択します。

   コンソールで AMI がリストから削除されるまで、数分ほどかかります。ステータスを更新するには、[**リフレッシュ**] を選択してください。

------
#### [ AWS CLI ]

**AMI の登録を解除するには**  
次の [deregister-image](https://docs.aws.amazon.com/cli/latest/reference/ec2/deregister-image.html) コマンドを使用します。

```
aws ec2 deregister-image --image-id ami-0abcdef1234567890
```

**AMI の登録を解除し、関連するスナップショットを削除するには**  
次の [deregister-image](https://docs.aws.amazon.com/cli/latest/reference/ec2/deregister-image.html) コマンドを使用して、`--delete-associated-snapshots` パラメータを指定します。スナップショットが他の AMI に関連付けられている場合、このパラメータを指定してもスナップショットは削除されないので注意してください。

```
aws ec2 deregister-image \
    --image-id ami-0abcdef1234567890 \
    --delete-associated-snapshots
```

------
#### [ PowerShell ]

**AMI の登録を解除するには**  
[Unregister-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Unregister-EC2Image.html) コマンドレットを使用します。

```
Unregister-EC2Image -ImageId ami-0abcdef1234567890
```

**AMI の登録を解除し、関連するスナップショットを削除するには**  
[Unregister-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Unregister-EC2Image.html) コマンドレットを使用して、`-DeleteAssociatedSnapshots` パラメータを指定します。スナップショットが他の AMI に関連付けられている場合、このパラメータを指定してもスナップショットは削除されないので注意してください。

```
Unregister-EC2Image `
    -ImageId ami-0abcdef1234567890 `
    -DeleteAssociatedSnapshots
```

------

## 未使用のリソースによるコストを回避する
<a name="delete-unneeded-resources-to-avoid-unnecessary-costs"></a>

デフォルトでは、AMI の登録を解除しても、その AMI に関連付けられたリソースは完全には削除されません。これらのリソースには、EBS-backed AMI のスナップショットと、Amazon S3-backed AMI の Amazon S3 内のファイルが含まれます。AMI の登録を解除しても、AMI から起動されたインスタンスが終了または停止することはありません。

スナップショットとファイルの保存には引き続き費用がかかり、実行中のインスタンスにも費用が発生します。

このような不要なコストの発生を避けるために、必要ないリソースを削除することをお勧めします。

**EBS-backed AMI**
+ AMI の登録解除時に、関連付けられたスナップショットを削除します。詳細については、「[AMI の登録解除](#deregister-an-ami)」を参照してください。
+ 関連付けられたスナップショットを削除せずに AMI を登録解除した場合は、手動で[スナップショットを削除](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-deleting-snapshot.html#ebs-delete-snapshot)できます。AMI の作成時に作成されたインスタンスルートボリュームのスナップショットには、次の説明形式があります。

  ```
  Created by CreateImage(i-1234567890abcdef0) for ami-0abcdef1234567890
  ```
+ AMI から起動したインスタンスが不要になった場合は、それらを[停止](Stop_Start.md#starting-stopping-instances)または[終了](terminating-instances.md#terminating-instances-console)できます。インスタンスを一覧表示するには、AMI の ID でフィルタリングします。

**Amazon S3-backed AMI**
+ [ec2-delete-bundle](ami-tools-commands.md#ami-delete-bundle) (AMI ツール) コマンドを使用して、Amazon S3 のバンドルを削除します。
+ バンドルを削除した後に Amazon S3 バケットが空になり、不要になった場合は、その[バケットを削除](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-bucket.html)できます。
+ AMI から起動したインスタンスが不要になった場合は、それらを[削除](terminating-instances.md#terminating-instances-console)できます。インスタンスを一覧表示するには、AMI の ID でフィルタリングします。

# Amazon EC2 AMI を登録解除から保護する
<a name="ami-deregistration-protection"></a>

AMI の*登録解除保護*をオンにして、偶発的な削除や悪意のある削除を防ぐことができます。登録解除保護をオンにすると、IAM アクセス許可に関係なく、ユーザーによる AMI の削除はできなくなります。AMI の登録を解除するには、まず AMI の登録解除保護を無効にする必要があります。

AMI の登録解除保護を有効にする際、24 時間のクールダウン期間を持たせるオプションがあります。このクールダウン期間は、登録解除保護を無効にした後も有効のままになる時間です。このクールダウン期間中、AMI は登録解除できません。クールダウン期間が終了すると、AMI の登録解除が可能になります。

デフォルトでは、すべての既存および新規 AMI では登録解除保護はオフになっています。

## 登録解除保護をオンにする
<a name="enable-deregistration-protection"></a>

登録解除保護をオンにするには、次の手順を使用します。

------
#### [ Console ]

**登録解除保護をオンにするには**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. ナビゲーションペインで **[AMI]** を選択してください。

1. フィルターバーから **[自己所有]** を選択して使用可能な AMI を一覧表示するか、**[無効化されたイメージ]** を選択して無効になっている AMI を一覧表示します。

1. 登録解除保護を有効にする AMI を選択し、**[アクション]**、**[AMI 登録解除保護の管理]** の順に選択してください。

1. **[AMI 登録解除保護の管理]** ダイアログボックスでは、クールダウン期間を有効または無効にして、登録解除保護を有効にできます。以下のオプションのいずれかを選択してください。
   + **[24 時間のクールダウン期間をつけて有効にする]** — クールダウン期間を設定すると、登録解除保護をオフにしてから 24 時間は AMI の登録を解除できません。
   + **[クールダウンなしで有効化]** — クールダウン期間を設定しないと、登録解除保護がオフにしたときに AMI をすぐに登録解除できます。

1. **[保存]** を選択します。

------
#### [ AWS CLI ]

**登録解除保護をオンにするには**  
[enable-image-deregistration-protection](https://docs.aws.amazon.com/cli/latest/reference/ec2/enable-image-deregistration-protection.html) コマンドを使用します。オプションのクールダウン期間を有効にするには、`--with-cooldown` オプションを含めます。

```
aws ec2 enable-image-deregistration-protection \
    --image-id ami-0abcdef1234567890 \
    --with-cooldown
```

------
#### [ PowerShell ]

**登録解除保護をオンにするには**  
[Enable-EC2ImageDeregistrationProtection](https://docs.aws.amazon.com/powershell/latest/reference/items/Enable-EC2ImageDeregistrationProtection.html) コマンドレットを使用します。オプションのクールダウン期間を有効にするには、`-WithCooldown` パラメータを `true` に設定します。

```
Enable-EC2ImageDeregistrationProtection `
    -ImageId ami-0abcdef1234567890 `
    -WithCooldown $true
```

------

## 登録解除保護をオフにする
<a name="disable-deregistration-protection"></a>

登録解除保護をオフにするには、次の手順を使用します。

AMI の登録解除保護をオンにしたときに 24 時間のクールダウン期間を設定した場合、登録解除保護をオフにしても、AMI をすぐに登録解除することはできません。このクールダウン期間は 24 時間の、登録解除保護を無効にした後も有効のままになる期間です。このクールダウン期間中、AMI は登録解除できません。クールダウン期間が終了すると、AMI を登録解除できます。

------
#### [ Console ]

**登録解除保護をオフにするには**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. ナビゲーションペインで **[AMI]** を選択してください。

1. フィルターバーから **[自己所有]** を選択して使用可能な AMI を一覧表示するか、**[無効化されたイメージ]** を選択して無効になっている AMI を一覧表示します。

1. 登録解除保護を無効にする AMI を選択し、**[アクション]**、**[AMI 登録解除保護の管理]** の順に選択してください。

1. **[AMI 登録解除保護の管理]** ダイアログボックスで、**[無効にする]** を選択してください。

1. **[保存]** を選択します。

------
#### [ AWS CLI ]

**登録解除保護をオフにするには**  
[disable-image-deregistration-protection](https://docs.aws.amazon.com/cli/latest/reference/ec2/disable-image-deregistration-protection.html) コマンドを使用します。

```
aws ec2 disable-image-deregistration-protection --image-id ami-0abcdef1234567890
```

------
#### [ PowerShell ]

**登録解除保護をオフにするには**  
[Disable-EC2ImageDeregistrationProtection](https://docs.aws.amazon.com/powershell/latest/reference/items/Disable-EC2ImageDeregistrationProtection.html) コマンドレットを使用します。

```
Disable-EC2ImageDeregistrationProtection -ImageId ami-0abcdef1234567890
```

------

# Amazon EC2 ブートモードでのインスタンスの起動動作
<a name="ami-boot"></a>

コンピュータが起動して最初に実行されるソフトウェアが、プラットフォームの初期化を行い、そのプラットフォーム固有の操作を実行するためのオペレーティングシステム用のインタフェースを提供する必要があります。

Amazon EC2 では、統合拡張ファームウェアインターフェイス (UEFI) とレガシー BIOS の、2 種類のブートモードソフトウェアがサポートされます。

**AMI で使用可能なブートモードパラメータ**  
AMI のブートモードパラメータ値には、`uefi`、`legacy-bios` または `uefi-preferred` のどちらかを指定できます。AMI ブートモードパラメータの設定はオプションです。ブートモードパラメータがない AMI の場合、これらの AMI から起動されるインスタンスでは、インスタンスタイプごとのデフォルトのブートモード値が使用されます。

**AMI ブートモードパラメータの目的**  
AMI ブートモードパラメータは、インスタンスの起動時に使用するブートモードを Amazon EC2 に通知します。ブートモードパラメータが `uefi` に設定されている場合、EC2 は UEFI でのインスタンスの起動を試みます。オペレーティングシステムが UEFI をサポートするように設定されていない場合、インスタンスの起動が失敗します。

**UEFI Preferred ブートモードパラメータ**  
`uefi-preferred` ブートモードパラメータを使用して、UEFI とレガシー BIOS の両方をサポートする AMI を作成できます。ブートモードパラメータが `uefi-preferred` に設定されている場合、インスタンスタイプごとの EFI がサポートされている場合、インスタンスは UEFI での起動になります。インスタンスタイプが UEFI をサポートしていない場合、インスタンスはレガシー BIOS で起動されます。

**警告**  
UEFI セキュアブートなどの一部の機能は、UEFI で起動するインスタンスでのみ使用できます。UEFI をサポートしないインスタンスタイプで `uefi-preferred` AMI ブートモードパラメータを使用すると、インスタンスはレガシー BIOS として起動し、UEFI 依存機能は無効になります。UEFI に依存する機能の可用性を重視する場合は、AMI ブートモードパラメータを `uefi` に設定します。

**インスタンスタイプごとのデフォルトのブートモード**
+ Graviton インスタンスタイプ: UEFI
+ Intel および AMD インスタンスタイプ: レガシー BIOS

**ゾーンのサポート**  
UEFI ブートは Wavelength ゾーンではサポートされていません。

**Topics**
+ [UEFI ブートモードで EC2 インスタンスを起動するための要件](launch-instance-boot-mode.md)
+ [Amazon EC2 AMI のブートモードパラメータを確認する](ami-boot-mode.md)
+ [EC2 インスタンスタイプがサポートしているブートモードを確認する](instance-type-boot-mode.md)
+ [EC2 インスタンスのブートモードを確認する](instance-boot-mode.md)
+ [EC2 インスタンスのオペレーティングシステムのブートモードを確認する](os-boot-mode.md)
+ [Amazon EC2 AMI のブートモードを設定する](set-ami-boot-mode.md)
+ [Amazon EC2 インスタンスの UEFI 変数](uefi-variables.md)
+ [Amazon EC2 インスタンスの UEFI 安全ブート](uefi-secure-boot.md)

# UEFI ブートモードで EC2 インスタンスを起動するための要件
<a name="launch-instance-boot-mode"></a>

インスタンスのブートモードは、AMI の設定、その中に含まれるオペレーティングシステム、およびインスタンスタイプによって決まります。UEFI ブートモードでインスタンスを起動するには、以下の要件を満たしている必要があります。

**AMI**  
UEFI では、AMI は次のように設定する必要があります。  
+ **オペレーティングシステム** – AMI に含まれるオペレーティングシステムです。UEFI の使用を設定する必要があり、この設定がない場合はインスタンスの起動に失敗します。詳細については、「[EC2 インスタンスのオペレーティングシステムのブートモードを確認する](os-boot-mode.md)」を参照してください。
+ **AMI ブートモードパラメータ** - AMI のブートモードパラメータは `uefi` または `uefi-preferred` に設定します。詳細については、「[Amazon EC2 AMI のブートモードパラメータを確認する](ami-boot-mode.md)」を参照してください。
**Linux** – 以下の Linux AMI は UEFI をサポートしています。  
+ Amazon Linux 2023
+ Amazon Linux 2 (重力子 インスタンスタイプのみ)
その他の Linux AMI の場合、[AMI の設定](set-ami-boot-mode.md)、[VM Import/Export](https://docs.aws.amazon.com/vm-import/latest/userguide/) を介した AMI のインポート、または [CloudEndure](https://docs.cloudendure.com/) を介した AMI のインポートを行う必要があります。  
**Windows** – 以下の Windows AMI は UEFI をサポートしています。  
+ Windows\$1Server-2025-\$1 (`BIOS-` 名前のプレフィックスが付いた AMI を除く)
+ TPM-Windows\$1Server-2022-English-Full-Base
+ TPM-Windows\$1Server-2022-English-Core-Base
+ TPM-Windows\$1Server-2019-English-Full-Base
+ TPM-Windows\$1Server-2019-English-Core-Base
+ TPM-Windows\$1Server-2016-English-Full-Base
+ TPM-Windows\$1Server-2016-English-Core-Base

**インスタンスタイプ**  
AWS Nitro System に構築されているすべてのインスタンス (ベアメタルインスタンス、DL1、G4ad、P4、u-3tb1、u-6tb1、u-9tb1、u-12tb1、u-18tb1、u-24tb1 および VT1 を除く) では、UEFI とレガシー BIOS の両方がサポートされます。詳細については、「[EC2 インスタンスタイプがサポートしているブートモードを確認する](instance-type-boot-mode.md)」を参照してください。

次の表は、インスタンスのブートモード (**インスタンス起動モードの結果**列で示される) が AMI のブートモードパラメータ (列 1)、AMI に含まれるオペレーティングシステムのブートモード設定 (列 2)、およびインスタンスタイプのブートモードサポート (列 3) の組み合わせによって決定されることを示しています。


| AMI ブートモードパラメータ | オペレーティングシステムのブートモード設定 | インスタンスタイプのブートモードサポート | インスタンスのブートモードの結果 | 
| --- | --- | --- | --- | 
| UEFI | UEFI | UEFI | UEFI | 
| レガシー BIOS | レガシー BIOS | レガシー BIOS | レガシー BIOS | 
| UEFI Preferred | UEFI | UEFI | UEFI | 
| UEFI Preferred | UEFI | UEFI とレガシー BIOS | UEFI | 
| UEFI Preferred | レガシー BIOS | レガシー BIOS | レガシー BIOS | 
| UEFI Preferred | レガシー BIOS | UEFI とレガシー BIOS | レガシー BIOS | 
| ブートモードが指定されていません - ARM | UEFI | UEFI | UEFI | 
| ブートモードが指定されていません - x86 | レガシー BIOS | UEFI とレガシー BIOS | レガシー BIOS | 

# Amazon EC2 AMI のブートモードパラメータを確認する
<a name="ami-boot-mode"></a>

AMI ブートモードパラメータの設定はオプションです。AMI のブートモードパラメータ値には、`uefi`、`legacy-bios` または `uefi-preferred` のどちらかを指定できます。

一部の AMI には、ブートモードパラメータがありません。AMI にブートモードパラメータがない場合、AMI から起動されるインスタンスでは、インスタンスタイプごとのデフォルト値が使用されます。重力子 ではこの設定は `uefi` となり、Intel および AMD インスタンスタイプでは `legacy-bios` となります。

------
#### [ Console ]

**AMI のブートモードパラメータを確認するには ()**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. ナビゲーションペインで [**AMI**] をクリックした後、AMI を選択してください。

1. **[ブートモード]** フィールドを調べます。
   + **uefi** という値は、AMI が UEFI をサポートしていることを示します。
   + **uefi-preferred** という値は、AMI が UEFI とレガシー BIOS の両方をサポートしていることを示します。
   + 値がない場合、AMI から起動されるインスタンスは、インスタンスタイプのデフォルト値を使用します。

**インスタンスの起動時に AMI のブートモードパラメータを確認するには**  
インスタンスの起動ウィザードを使用してインスタンスを起動する場合、AMI を選択するステップで、[**ブートモード**] フィールドを表示します。詳細については、「[アプリケーションと OS イメージ (Amazon マシンイメージ)](ec2-instance-launch-parameters.md#liw-ami)」を参照してください。

------
#### [ AWS CLI ]

**AMI のブートモードパラメータを確認するには ()**  
[https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) コマンドを使用して、AMI のブートモードを確認します。

```
aws ec2 describe-images \
    --region us-east-1 \
    --image-id ami-0abcdef1234567890 \
    --query Images[].BootMode \
    --output text
```

以下は出力の例です。

```
uefi
```

出力で、`uefi` という値はその AMI が UEFI をサポートしていることを示しています。`uefi-preferred` の値により、その AMI が UEFI とレガシー BIOS の両方をサポートしていることを示されます。値がない場合、AMI から起動されるインスタンスは、インスタンスタイプのデフォルト値を使用します。

------
#### [ PowerShell ]

**AMI のブートモードパラメータを確認するには ()**  
[https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Image.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Image.html) コマンドレットを使用して、AMI のブートモードを確認します。

```
Get-EC2Image -Region us-east-1 `
    -ImageId ami-0abcdef1234567890 | Format-List Name, BootMode, TpmSupport
```

以下は出力の例です。

```
Name       : TPM-Windows_Server-2016-English-Full-Base-2023.05.10
BootMode   : uefi
TpmSupport : v2.0
```

出力で、`BootMode` という値は AMI のブートモードを示しています。`uefi` という値により、その AMI が UEFI をサポートしていることを示します。`uefi-preferred` の値により、その AMI が UEFI とレガシー BIOS の両方をサポートしていることを示されます。値がない場合、AMI から起動されるインスタンスは、インスタンスタイプのデフォルト値を使用します。

------

# EC2 インスタンスタイプがサポートしているブートモードを確認する
<a name="instance-type-boot-mode"></a>

インスタンスタイプがサポートしているブートモードを確認できます。

Amazon EC2 コンソールには、インスタンスタイプがサポートしているブートモードは表示されません。

------
#### [ AWS CLI ]

[https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instance-types.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instance-types.html) コマンドを使用して、インスタンスタイプがサポートしているブートモードを確認します。`--query` パラメータは、サポートされているブートモードのみを返すように出力をフィルタリングします。

次の例では、指定されたインスタンスタイプが UEFI ブートモードとレガシー BIOS ブートモードの両方をサポートしていることを示しています。

```
aws ec2 describe-instance-types \
    --instance-types m5.2xlarge \
    --query "InstanceTypes[*].SupportedBootModes"
```

以下は出力の例です。

```
[
    [
        "legacy-bios",
        "uefi"
    ]
]
```

次の例は、`t2.xlarge` がレガシー BIOS のみをサポートしていることを示しています。

```
aws ec2 describe-instance-types \
    --instance-types t2.xlarge \
    --query "InstanceTypes[*].SupportedBootModes"
```

以下は出力の例です。

```
[
    [
        "legacy-bios"
    ]
]
```

------
#### [ PowerShell ]

[https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2InstanceType.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2InstanceType.html) コマンドレットを使用して、インスタンスタイプがサポートしているブートモードを確認します。

次の例では、`m5.2xlarge` が UEFI ブートモードとレガシー BIOS ブートモードの両方をサポートしていることを示しています。

```
Get-EC2InstanceType -InstanceType m5.2xlarge | Format-List InstanceType, SupportedBootModes
```

以下は出力の例です。

```
InstanceType       : m5.2xlarge
SupportedBootModes : {legacy-bios, uefi}
```

次の例は、`t2.xlarge` がレガシー BIOS のみをサポートしていることを示しています。

```
Get-EC2InstanceType -InstanceType t2.xlarge | Format-List InstanceType, SupportedBootModes
```

以下は出力の例です。

```
InstanceType       : t2.xlarge
SupportedBootModes : {legacy-bios}
```

------

**UEFI をサポートするインスタンスタイプを確認するには**  
UEFI をサポートするインスタンスタイプを確認できます。Amazon EC2 コンソールには、インスタンスタイプの UEFI のサポートは表示されません。

------
#### [ AWS CLI ]

利用可能なインスタンスタイプは、AWS リージョン ごとに異なります。リージョンで使用可能であり、UEFI をサポートしているインスタンスタイプを確認するには、[describe-instance-types](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instance-types.html) コマンドを使用します。`--filters` パラメータを含めることで結果の範囲を UEFI をサポートするインスタンスタイプに規定し、`--query` パラメータを含めることで出力の範囲を `InstanceType` の値に規定します。

```
aws ec2 describe-instance-types \
    --filters Name=supported-boot-mode,Values=uefi \
    --query "InstanceTypes[*].[InstanceType]" --output text | sort
```

------
#### [ PowerShell ]

利用可能なインスタンスタイプは、AWS リージョン ごとに異なります。リージョンで使用可能であり、UEFI をサポートしているインスタンスタイプを確認するには、[Get-EC2InstanceType](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2InstanceType.html) コマンドレットを使用します。

```
Get-EC2InstanceType | `
	Where-Object {$_.SupportedBootModes -Contains "uefi"} | `
	Sort-Object InstanceType | `
	Format-Table InstanceType -GroupBy CurrentGeneration
```

------

**UEFI 安全ブート をサポートし不揮発性変数を保持する、インスタンスタイプを確認するには**  
ベアメタルインスタンスでは UEFI 安全ブート と不揮発性変数はサポートされないため、以下の例では出力から除外します。UEFI 安全ブート の詳細については、「[Amazon EC2 インスタンスの UEFI 安全ブート](uefi-secure-boot.md)」を参照してください。

------
#### [ AWS CLI ]

[describe-instance-types](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instance-types.html) コマンドを使用し、出力からベアメタルインスタンスを除外します。

```
aws ec2 describe-instance-types \
    --filters Name=supported-boot-mode,Values=uefi Name=bare-metal,Values=false \
    --query "InstanceTypes[*].[InstanceType]" \
    --output text | sort
```

------
#### [ PowerShell ]

[Get-EC2InstanceType](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2InstanceType.html) コマンドレットを使用し、出力からベアメタルインスタンスを除外します。

```
Get-EC2InstanceType | `
    Where-Object { `
        $_.SupportedBootModes -Contains "uefi" -and `
        $_.BareMetal -eq $False
        } | `
    Sort-Object InstanceType  | `
    Format-Table InstanceType, SupportedBootModes, BareMetal, `
        @{Name="SupportedArchitectures"; Expression={$_.ProcessorInfo.SupportedArchitectures}}
```

------

# EC2 インスタンスのブートモードを確認する
<a name="instance-boot-mode"></a>

インスタンスのブートモードは、Amazon EC2 コンソールの **[ブートモード]** フィールドに表示され、AWS CLI の `currentInstanceBootMode` パラメータによって表示されます。

インスタンスの起動時、そのブートモードパラメータの値は、インスタンスの起動に使用された AMI のブートモードパラメータの値によって決まります。
+ `uefi` のブートモードパラメータを持つ AMI は、`uefi` の `currentInstanceBootMode` パラメータを持つインスタンスを作成します。
+ `legacy-bios` のブートモードパラメータを持つ AMI は、` legacy-bios` の `currentInstanceBootMode` パラメータを持つインスタンスを作成します。
+ `uefi-preferred` のブートモードパラメータを持つ AMI は、インスタンスタイプが UEFI をサポートしている場合はという `uefi` の `currentInstanceBootMode` パラメータを持つインスタンスを作成します。それ以外の場合は、`legacy-bios` の `currentInstanceBootMode` パラメータがのインスタンスを作成します。
+ ブートモードのパラメータ値を持たない AMI は、AMI アーキテクチャが ARM か x86 か、サポートされているインスタンスタイプのブートモードによって決まる `currentInstanceBootMode` パラメータ値を持つインスタンスを作成します。デフォルトのブートモードは、重力子 インスタンスタイプでは `uefi`、Intel と AMD インスタンスタイプでは `legacy-bios` です。

------
#### [ Console ]

**インスタンスのブートモードを確認するには ()**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. ナビゲーションペインで [**インスタンス**] を選択し、インスタンスを選択してください。

1. [**詳細**] タブを開き、[**ブートモード**] フィールドを確認します。

------
#### [ AWS CLI ]

**インスタンスのブートモードを確認するには ()**  
インスタンスのブートモードを決定するには [https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instances.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instances.html) を使用します。インスタンスの作成に使用された AMI のブートモードを確認することもできます。

```
aws ec2 describe-instances \
    --region us-east-1 \
    --instance-ids i-1234567890abcdef0 \
    --query Reservations[].Instances[].BootMode \
    --output text
```

以下は出力の例です。

```
uefi
```

------
#### [ PowerShell ]

**インスタンスのブートモードを確認するには ()**  
インスタンスのブートモードを決定するには [https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Instance.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Instance.html) コマンドレットを使用します。インスタンスの作成に使用された AMI のブートモードを確認することもできます。

```
(Get-EC2Instance `
    -InstanceId i-1234567890abcdef0).Instances | Format-List BootMode, CurrentInstanceBootMode, InstanceType, ImageId
```

以下は出力の例です。

```
BootMode                : uefi
CurrentInstanceBootMode : uefi
InstanceType            : c5a.large
ImageId                 : ami-0abcdef1234567890
```

------

# EC2 インスタンスのオペレーティングシステムのブートモードを確認する
<a name="os-boot-mode"></a>

Amazon EC2 のブートモードは AMI のブートモードに従います。このブートモードがインスタンスの起動に使用されます。インスタンスのオペレーティングシステムが UEFI 用に設定されているかどうかを確認するには、SSH (Linux インスタンス) または RDP (Windows インスタンス) を使用してインスタンスに接続する必要があります。

インスタンスのオペレーティングシステムの説明を使用してください。

## Linux
<a name="os-boot-mode-linux"></a>

**インスタンスのオペレーティングシステムのブートモードを特定するには**

1. [SSH を使用しての Linux インスタンスへの接続](connect-linux-inst-ssh.md)

1. オペレーティングシステムのブートモードを表示するには、以下のいずれかを実行します。
   + 以下のコマンドを実行してください。

     ```
     [ec2-user ~]$ sudo /usr/sbin/efibootmgr
     ```

     UEFI ブートモードで起動されたインスタンスで想定される出力

     ```
     BootCurrent: 0001
     Timeout: 0 seconds
     BootOrder: 0000,0001
     Boot0000* UiApp
     Boot0001* UEFI Amazon Elastic Block Store vol-xyz
     ```
   + 次のコマンドを実行して、`/sys/firmware/efi` ディレクトリが存在するか確認します。このディレクトリは、インスタンスが UEFI を使用して起動する場合のみ存在します。このディレクトリが存在しない場合、このコマンドは `Legacy BIOS Boot Detected` を返します。

     ```
     [ec2-user ~]$ [ -d /sys/firmware/efi ] && echo "UEFI Boot Detected" || echo "Legacy BIOS Boot Detected"
     ```

     UEFI ブートモードで起動されたインスタンスで想定される出力

     ```
     UEFI Boot Detected
     ```

     レガシー BIOS ブートモードで起動されたインスタンスで想定される出力

     ```
     Legacy BIOS Boot Detected
     ```
   + 次のコマンドを実行して、`dmesg` 出力に EFI が 含まれていることを確認します。

     ```
     [ec2-user ~]$ dmesg | grep -i "EFI"
     ```

     UEFI ブートモードで起動されたインスタンスで想定される出力

     ```
     [    0.000000] efi: Getting EFI parameters from FDT:
     [    0.000000] efi: EFI v2.70 by EDK II
     ```

## Server
<a name="os-boot-mode-windows"></a>

**インスタンスのオペレーティングシステムのブートモードを特定するには**

1. [RDP を使用しての Windows インスタンスへの接続](connecting_to_windows_instance.md)

1. [**システム情報**] を開き、[**BIOS モード**] 行を確認します。  
![\[システム情報ウィンドウに、選択した BIOS モード行が表示されます。BIOS モードの値はレガシーです。\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/images/BIOS-mode-win.png)

# Amazon EC2 AMI のブートモードを設定する
<a name="set-ami-boot-mode"></a>

デフォルトでは、AMI には、その作成に使用される EC2 インスタンスのブートモードが継承されます。例えば、レガシー BIOS で実行されている EC2 インスタンスから AMI を作成する場合、新しい AMI のブートモードは `legacy-bios` になります。ブートモードが `uefi-preferred` の EC2 インスタンスから AMI を作成する場合、新しい AMI のブートモードは `uefi-preferred` になります。

AMI を登録する際に、AMI のブートモードを `uefi`、`legacy-bios`、または `uefi-preferred` に設定できます。

AMI ブートモードを `uefi-preferred` に設定すると、インスタンスは次のように起動します。
+ UEFI とレガシー BIOS の両方をサポートするインスタンスタイプ (例えば `m5.large` など) の場合、インスタンスは UEFI を使用して起動します。
+ レガシー BIOS のみをサポートするインスタンスタイプ (例えば `m4.large` など) の場合、インスタンスはレガシー BIOS を使用して起動します。

AMI ブートモードを `uefi-preferred` に設定した場合、オペレーティングシステムは UEFI と Legacy BIOS の両方を起動する機能をサポートしている必要があります。

既存のレガシー BIOS ベースのインスタンスを UEFI に、または既存の UEFI ベースのインスタンスをレガシー BIOS に変換するには、まず、選択したブートモードをサポートするように、インスタンスのボリュームとオペレーティングシステムを変更する必要があります。次に、ボリュームのスナップショットを作成します。最後に、スナップショットから AMI を作成します。

**考慮事項**
+ AMI ブートモードパラメータを設定しても、オペレーティングシステムは指定されたブートモードに自動的に変更されません。最初に、インスタンスのボリュームとオペレーティングシステムに対し、選択したブートモードを使用した起動をサポートするための適切な変更を加える必要があります。これを行わないと、作成される AMI を使用できません。例えば、レガシー BIOS ベースの Windows インスタンスを UEFI に変換する場合、Microsoft の [MBR2GPT](https://learn.microsoft.com/en-us/windows/deployment/mbr-to-gpt) ツールを使用して、システムディスクを MBR から GPT に変換できます。ここでの変更内容は、オペレーティングシステムにより異なります。詳細については、オペレーティングシステムのマニュアルを参照してください。
+ [https://docs.aws.amazon.com/cli/latest/reference/ec2/register-image.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/register-image.html) コマンドまたは [https://docs.aws.amazon.com/powershell/latest/reference/items/Register-EC2Image.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Register-EC2Image.html) コマンドレットを使用して、[NitroTPM](nitrotpm.md) と UEFI Preferred の両方をサポートする AMI を作成することはできません。
+ UEFI セキュアブートなどの一部の機能は、UEFI で起動するインスタンスでのみ使用できます。UEFI をサポートしないインスタンスタイプで `uefi-preferred` AMI ブートモードパラメータを使用すると、インスタンスはレガシー BIOS として起動し、UEFI 依存機能は無効になります。UEFI に依存する機能の可用性を重視する場合は、AMI ブートモードパラメータを `uefi` に設定します。

------
#### [ AWS CLI ]

**AMI のブートモードを設定するには**

1. インスタンスのボリュームとオペレーティングシステムに対し、選択したブートモードでの起動をサポートするための適切な変更を加えます。ここでの変更内容は、オペレーティングシステムにより異なります。詳細については、オペレーティングシステムのマニュアルを参照してください。
**警告**  
このステップを実行しないと、AMI は使用不可能になります。

1. インスタンスのボリューム ID を、[https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instances.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instances.html) コマンドを使用して確認します。次のステップでは、このボリュームのスナップショットを作成します。

   ```
   aws ec2 describe-instances \
       --instance-ids i-1234567890abcdef0 \
       --query Reservations[].Instances[].BlockDeviceMappings
   ```

   以下は出力の例です。

   ```
   [
       [
           {
               "DeviceName": "/dev/xvda",
               "Ebs": {
                   "AttachTime": "2024-07-11T01:05:51+00:00",
                   "DeleteOnTermination": true,
                   "Status": "attached",
                   "VolumeId": "vol-1234567890abcdef0"
               }
           }
       ]
   ]
   ```

1. ボリュームのスナップショットを作成するには、[https://docs.aws.amazon.com/cli/latest/reference/ec2/create-snapshot.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-snapshot.html) コマンドを使用します。前のステップで取得したボリューム ID を使用します。

   ```
   aws ec2 create-snapshot \
       --volume-id vol-01234567890abcdef \
       --description "my snapshot"
   ```

   以下は出力の例です。

   ```
   {
       "Description": "my snapshot",
       "Encrypted": false,
       "OwnerId": "123456789012",
       "Progress": "",
       "SnapshotId": "snap-0abcdef1234567890",
       "StartTime": "",
       "State": "pending",
       "VolumeId": "vol-01234567890abcdef",
       "VolumeSize": 30,
       "Tags": []
   }
   ```

1. スナップショットの状態が `completed` になるまで待ってから、次のステップに進みます。スナップショットの状態を取得するには、[https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-snapshots.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-snapshots.html) コマンドを前のステップのスナップショット ID と共に使用します。

   ```
   aws ec2 describe-snapshots \
       --snapshot-ids snap-0abcdef1234567890 \
       --query Snapshots[].State \
       --output text
   ```

   以下は出力の例です。

   ```
   completed
   ```

1. 新しい AMI を作成するには、[https://docs.aws.amazon.com/cli/latest/reference/ec2/register-image.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/register-image.html) コマンドを使用します。**CreateSnapshot** の出力の `SnapshotId` の値を使用します。
   + ブートモードを UEFI に設定するには、`uefi` の値を使用した `--boot-mode` パラメータを追加します。

     ```
     aws ec2 register-image \
        --description "my image" \
        --name "my-image" \
        --block-device-mappings "DeviceName=/dev/sda1,Ebs={SnapshotId=snap-0abcdef1234567890,DeleteOnTermination=true}" \
        --root-device-name /dev/sda1 \
        --virtualization-type hvm \
        --ena-support \
        --boot-mode uefi
     ```
   + ブートモードを `uefi-preferred` に設定するには、`--boot-mode` の値を `uefi-preferred` に設定します

     ```
     aws ec2 register-image \
        --description "my description" \
        --name "my-image" \
        --block-device-mappings "DeviceName=/dev/sda1,Ebs={SnapshotId=snap-0abcdef1234567890,DeleteOnTermination=true}" \
        --root-device-name /dev/sda1 \
        --virtualization-type hvm \
        --ena-support \
        --boot-mode uefi-preferred
     ```

1. (オプション) 新しく作成した AMI が、指定したブートモードに設定されていることを確認するには、[https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) コマンドを使用します。

   ```
   aws ec2 describe-images \
       --image-id ami-1234567890abcdef0 \
       --query Images[].BootMode \
       --output text
   ```

   以下は出力の例です。

   ```
   uefi
   ```

------
#### [ PowerShell ]

**AMI のブートモードを設定するには**

1. インスタンスのボリュームとオペレーティングシステムに対し、選択したブートモードでの起動をサポートするための適切な変更を加えます。ここでの変更内容は、オペレーティングシステムにより異なります。詳細については、オペレーティングシステムのマニュアルを参照してください。
**警告**  
このステップを実行しないと、AMI は使用不可能になります。

1. インスタンスのボリューム ID を確認するには、[https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Instance.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Instance.html) コマンドレットを使用します。

   ```
   (Get-EC2Instance `
       -InstanceId i-1234567890abcdef0).Instances.BlockDeviceMappings.Ebs
   ```

   以下は出力の例です。

   ```
   AssociatedResource  : 
   AttachTime          : 7/11/2024 1:05:51 AM
   DeleteOnTermination : True
   Operator            : 
   Status              : attached
   VolumeId            : vol-01234567890abcdef
   ```

1. ボリュームのスナップショットを作成するには、[https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2Snapshot.html](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2Snapshot.html) コマンドレットを使用します。前のステップで取得したボリューム ID を使用します。

   ```
   New-EC2Snapshot `
       -VolumeId vol-01234567890abcdef `
       -Description "my snapshot"
   ```

   以下は出力の例です。

   ```
   AvailabilityZone          : 
   Description               : my snapshot
   Encrypted                 : False
   FullSnapshotSizeInBytes   : 0
   KmsKeyId                  : 
   OwnerId                   : 123456789012
   RestoreExpiryTime         : 
   SnapshotId                : snap-0abcdef1234567890
   SseType                   : 
   StartTime                 : 4/25/2025 6:08:59 PM
   State                     : pending
   StateMessage              : 
   VolumeId                  : vol-01234567890abcdef
   VolumeSize                : 30
   ```

1. スナップショットの状態が `completed` になるまで待ってから、次のステップに進みます。スナップショットの状態を取得するには、[https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Snapshot.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Snapshot.html) コマンドレットを前のステップのスナップショット ID と共に使用します。

   ```
   (Get-EC2Snapshot `
       -SnapshotId snap-0abcdef1234567890).State.Value
   ```

   以下は出力の例です。

   ```
   completed
   ```

1. 新しい AMI を作成するには、[https://docs.aws.amazon.com/powershell/latest/reference/items/Register-EC2Image.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Register-EC2Image.html) コマンドレットを使用します。**New-EC2Snapshot** の出力の `SnapshotId` の値を使用します。
   + ブートモードを UEFI に設定するには、`uefi` の値を使用した `-BootMode` パラメータを追加します。

     ```
     $block = @{SnapshotId=snap-0abcdef1234567890}
     Register-EC2Image ` 
        -Description "my image" `
        -Name "my-image" `
        -BlockDeviceMapping @{DeviceName="/dev/xvda";Ebs=$block} `
        -RootDeviceName /dev/xvda `
        -EnaSupport $true `
        -BootMode uefi
     ```
   + ブートモードを `uefi-preferred` に設定するには、`-BootMode` の値を `uefi-preferred` に設定します

     ```
     $block = @{SnapshotId=snap-0abcdef1234567890}
     Register-EC2Image ` 
        -Description "my image" `
        -Name "my-image" `
        -BlockDeviceMapping @{DeviceName="/dev/xvda";Ebs=$block} `
        -RootDeviceName /dev/xvda `
        -EnaSupport $true `
        -BootMode uefi-preferred
     ```

1. (オプション) 新しく作成した AMI が、指定したブートモードに設定されていることを確認するには、[https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Image.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Image.html) コマンドレットを使用します。

   ```
   (Get-EC2Image `
       -ImageId ami-1234567890abcdef0).BootMode.Value
   ```

   以下は出力の例です。

   ```
   uefi
   ```

------

# Amazon EC2 インスタンスの UEFI 変数
<a name="uefi-variables"></a>

ブートモードが UEFI に設定されているインスタンスを起動すると、変数の key-value ストアが作成されます。このストアは、UEFI およびインスタンスオペレーティングシステムで UEFI 変数を格納するために使用できます。

UEFI 変数は、ブートローダーとオペレーティングシステムにより使用されるもので、システムの起動初期における処理を指定します。これにより、オペレーティングシステムは、(ブート順序や UEFI 安全ブート キーの管理など) ブートプロセスに関する特定の設定を行えます。

**警告**  
インスタンス (およびインスタンス上で実行されている可能性のある任意のソフトウェア) に接続できるユーザー、またはインスタンスで [GetInstanceUefiData](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetInstanceUefiData.html) API を使用するアクセス許可を持つユーザーは誰でも変数を読み取ることができます。パスワードや個人識別情報などの機密データを UEFI 変数ストアに保存しないでください。

**UEFI 変数の永続性**
+ 2022 年 5 月 10 日以前に起動されたインスタンスの UEFI 変数は、再起動または停止時に消去されます。
+ 2022 年 5 月 11 日以降に起動されたインスタンスの場合、不揮発性として設定された UEFI 変数であれば、再起動および停止/開始時にも保持されます。
+ ベアメタルインスタンスの場合は、インスタンスの停止/開始オペレーションの全体を通して、不揮発性の UEFI 変数は保持されません。

# Amazon EC2 インスタンスの UEFI 安全ブート
<a name="uefi-secure-boot"></a>

UEFI 安全ブート は、長期の使用実績がある Amazon EC2 の安全なブートプロセスを基に構築されたものです。これには詳細な防御が追加されているので、ユーザーは、起動後も持続する脅威からソフトウェアを保護できます。インスタンスが起動できるのは、暗号化キーで署名されたソフトウェアのみになります。キーは、[UEFI の不揮発性変数ストア](uefi-variables.md)のキーデータベースに保存されています。UEFI 安全ブート は、インスタンスのブートフローが不正な変更を受けることを防止します。

**Topics**
+ [Amazon EC2 インスタンスで UEFI 安全ブート を使用する方法](how-uefi-secure-boot-works.md)
+ [Amazon EC2 で UEFI 安全ブート を使用するための要件](launch-instance-with-uefi-sb.md)
+ [Amazon EC2 インスタンスで UEFI 安全ブート が有効化されているかどうかを確認する](verify-uefi-secure-boot.md)
+ [カスタム UEFI 安全ブート キーを使用して Linux AMI を作成する](create-ami-with-uefi-secure-boot.md)
+ [UEFI 安全ブート の AWS バイナリ BLOB を作成する](aws-binary-blob-creation.md)

# Amazon EC2 インスタンスで UEFI 安全ブート を使用する方法
<a name="how-uefi-secure-boot-works"></a>

UEFI 安全ブート は、UEFI の中で規定された機能であり、これにより、ブートチェーンの状態を検証することができます。ファームウェア自体による初期化後は、暗号を使用した検証が行われた UEFI バイナリコードのみを、実行するように設計されています。これらのバイナリコードには、UEFI ドライバーやメインブートローダーに加え、ブートチェーンによりロードされるコンポーネントも含まれます。

UEFI 安全ブート では、信頼チェーンで使用される 4 つのキーデータベースが指定されています。このデータベースは、UEFI の変数ストアに格納されています。

信頼チェーンには、以下が含まれます。

**プラットフォームキー (PK) データベース**  
PK データベースは信頼チェーンのルートに置かれます。これには、キー交換キー (KEK) データベースを更新する際に信頼チェーンで使用される、単一のパブリック PK キーが含まれています。  
PK データベースを変更するためには、プライベート PK キーを使用して、その更新リクエストに署名する必要があります。この変更処理には、空の PK キーの書き込みによる PK データベースの削除も含まれます。

**キー交換キー (KEK) データベース**  
KEK データベースでは、公開 KEK キーがリストされています。これらのキーは、署名データベース (db) と拒否リストデータベース (dbx) を更新する際に、信頼チェーンが使用します。  
パブリック KEK データベースを変更するには、プライベート PK キーを使用して、更新のリクエストに署名をする必要があります。

**署名 (DB) データベース**  
db データベースには、すべての UEFI ブートバイナリを検証するために信頼チェーンが使用する、パブリックキーとハッシュがリストされています。  
db データベースを変更するには、プライベート PK キーまたはプライベート KEK キーを使用して、更新リクエストに署名する必要があります。

**署名拒否リスト (dbx) データベース**  
dbx データベースは、信頼されていないパブリックキーとバイナリハッシュをリストします。このリストは、信頼チェーンが失効ファイルとして使用します。  
dbx データベースは、常に、他のすべてのキーデータベースよりも優先されます。  
dbx データベースを変更するには、プライベート PK キーまたはプライベート KEK キーを使用して、その更新リクエストに署名する必要があります。  
UEFI フォーラム ([https://uefi.org/revocationlistfile](https://uefi.org/revocationlistfile)) には、既知の問題のあるバイナリコードと証明書を多数リストした dbx が公開されており、いつでも使用できます。

**重要**  
UEFI 安全ブート は、任意の UEFI バイナリでシグニチャ検証を適用します。UEFI 安全ブート 内での UEFI バイナリの実行を許可するには、上記で説明したいずれかのプライベート db キーを使用して、そのバイナリに署名します。

デフォルトでは、UEFI 安全ブート は無効になっており、システムは `SetupMode` になっています。`SetupMode` の状態であるシステムでは、暗号による署名なしですべてのキー変数の更新が可能です。PK が設定されると、UEFI 安全ブート が有効化されるとともに、SetupMode が取り消されます。

# Amazon EC2 で UEFI 安全ブート を使用するための要件
<a name="launch-instance-with-uefi-sb"></a>

サポートされている AMI とサポートされているインスタンス タイプで [Amazon EC2 インスタンスを起動する](LaunchingAndUsingInstances.md)と、そのインスタンスは UEFI 安全ブート データベースで UEFI ブートバイナリを自動的に検証します。追加の設定は必要ありません。UEFI 安全ブート は、インスタンスを起動した後に設定することもできます。

**注記**  
UEFI 安全ブート は、インスタンスとそのオペレーティングシステムについて、ブートフローが変更されないように保護します。UEFI 安全ブート が有効になっているソース AMI から新しい AMI を作成し、コピープロセス中に AMI 内で `UefiData` を変更するなど、特定のパラメータを変更すると、UEFI 安全ブート を無効にできます。

**Topics**
+ [サポートされている AMI](#uefi-amis)
+ [サポートされるインスタンスタイプ](#uefi-instance)

## サポートされている AMI
<a name="uefi-amis"></a>

**Linux AMI**  
Linux インスタンスを起動するには、Linux AMI で UEFI セキュアブートが有効になっている必要があります。

Amazon Linux は、AL2023 リリース 2023.1 から UEFI セキュアブートをサポートしています。ただし UEFI セキュアブートは、デフォルトの AMI では有効になっていません。詳細については、「*AL2023 ユーザーガイド*」の「[UEFI Secure Boot](https://docs.aws.amazon.com/linux/al2023/ug/uefi-secure-boot.html)」を参照してください。古いバージョンの Amazon Linux AMI では、UEFI セキュアブートは有効ではありません。サポートされている AMI を使用するには、独自の Linux AMI でいくつかの設定ステップを実行する必要があります。詳細については、「[カスタム UEFI 安全ブート キーを使用して Linux AMI を作成する](create-ami-with-uefi-secure-boot.md)」を参照してください。

**Windows AMI**  
Windows インスタンスを起動するには、Windows AMI で UEFI セキュアブートが有効になっている必要があります。Microsoft キーで UEFI Secure Boot 用に事前設定された AWS Windows AMI を見つけるには、「*AWSWindows AMI リファレンス*」の「[NitroTPM と UEFI Secure Boot で設定された Windows Server AMI を見つける](https://docs.aws.amazon.com/ec2/latest/windows-ami-reference/ami-windows-tpm.html#ami-windows-tpm-find)」を参照してください。

現時点では、[import-image](https://docs.aws.amazon.com/cli/latest/reference/ec2/import-image.html) コマンドにより、UEFI 安全ブート 使用する Windows をインポートすることはできません。

## サポートされるインスタンスタイプ
<a name="uefi-instance"></a>

UEFI をサポートするすべての仮想インスタンスタイプは、UEFI 安全ブート もサポートします。UEFI 安全ブート をサポートするインスタンスタイプについては、[UEFI ブートモードの要件](launch-instance-boot-mode.md) を参照してください。

**注記**  
ベアメタルインスタンスタイプは UEFI 安全ブート をサポートしていません。

# Amazon EC2 インスタンスで UEFI 安全ブート が有効化されているかどうかを確認する
<a name="verify-uefi-secure-boot"></a>

次のステップを使用して、Amazon EC2 で UEFI 安全ブート が有効になっているかどうかを確認できます。

## Linux インスタンス
<a name="verify-uefi-secure-boot-linux"></a>

Linux インスタンスが UEFI 安全ブート に対して有効になっているかどうかを確認するには `mokutil` ユティリティを使用できます。`mokutil` がインスタンスにインストールされていない場合は、これをインストールする必要があります。Amazon Linux 2 のインストールステップについては、「[Find and install software packages on an Amazon Linux 2 instance](https://docs.aws.amazon.com/linux/al2/ug/find-install-software.html)」を参照してください。その他の Linux ディストリビューションについては、それぞれの個別のドキュメントを参照してください。

**Linux インスタンスが UEFI 安全ブート に対して有効になっているかどうかを確認するには**  
インスタンスに接続し、ターミナルウィンドウで `root` として次のコマンドを実行します。

```
mokutil --sb-state 
```

以下は出力の例です。
+ UEFI 安全ブート が有効な場合、出力には `SecureBoot enabled` が含まれます。
+ UEFI 安全ブート が有効化されていない場合は、出力に `SecureBoot disabled` または `Failed to read SecureBoot` が含まれます。

## Windows インスタンス
<a name="verify-uefi-secure-boot-windows"></a>

**Windows インスタンスで UEFI 安全ブート が有効になっているかどうかを確認するには**

1. インスタンスに接続します。

1. msinfo32 ツールを開きます。

1. **[安全ブート State]** (安全ブート の状態) フィールドを確認します。UEFI 安全ブート が有効になっている場合、次の図に示すように、この値は **[サポート対象]** です。  
![\[システム情報内の 安全ブート の状態。\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/images/secure-boot-state-win.png)

Windows PowerShell コマンドレット `Confirm-SecureBootUEFI` を使用して安全ブートのステータスを確認することもできます。コマンドの詳細については、Microsoft ドキュメントの「[Confirm-SecureBootUEFI](https://learn.microsoft.com/en-us/powershell/module/secureboot/confirm-securebootuefi)」を参照してください。

# カスタム UEFI 安全ブート キーを使用して Linux AMI を作成する
<a name="create-ami-with-uefi-secure-boot"></a>

この手順では、UEFI 安全ブートとカスタムメイドのプライベートキーを使用して Linux AMI を作成する方法を示します。Amazon Linux は、AL2023 リリース 2023.1 から UEFI セキュアブートをサポートしています。詳細については、「Amazon Linux 2023 ユーザーガイド」の「[UEFI Secure Boot on AL2023](https://docs.aws.amazon.com/linux/al2023/ug/uefi-secure-boot.html)」を参照してください。

**重要**  
次の手順は、**上級ユーザーのみ**を対象としています。これらの手順を使用するには、SSL および Linux ディストリビューションのブートフローに関する十分な知識が必要です。

**前提条件**
+ 以下のツールを使用します。
  + OpenSSL – [https://www.openssl.org/](https://www.openssl.org/)
  + efivar – [https://github.com/rhboot/efivar](https://github.com/rhboot/efivar)
  + efitools – [https://git.kernel.org/pub/scm/linux/kernel/git/jejb/efitools.git/](https://git.kernel.org/pub/scm/linux/kernel/git/jejb/efitools.git/)
  + [get-instance-uefi-data](https://docs.aws.amazon.com/cli/latest/reference/ec2/get-instance-uefi-data.html) コマンド
+ Linux インスタンスは、UEFI ブートモードをサポートする Linux AMI で起動され、不揮発性データを使用している必要があります。

UEFI 安全ブート キーを使用せずに新規で作成されたインスタンスには、`SetupMode` が適用されます。この状態で、独自のキーを登録することが可能です。一部の AMI では UEFI 安全ブート が事前設定されており、既定のキーを変更することはできません。AMI のキーを変更する場合は、その AMI をベースに、新らたな AMI を作成する必要があります。

変数ストア内のキーを伝達するには 2 つの方法があり、それぞれを、以下の オプション A とオプション B の中で説明します。オプション A では、実際のハードウェアのフローを模倣することで、インスタンス内からこれを行う方法について説明します。オプション B では、AMI の作成時に base64 でエンコードされたファイルとして渡される、バイナリ BLOB を作成する方法について説明します。どちらのオプションでも、最初に、信頼チェーンに使用するためのキーペアを 3 つ作成する必要があります。

**Topics**
+ [タスク 1: キーペアを作成する](#uefi-secure-boot-create-three-key-pairs)
+ [タスク 2 – オプション A: インスタンス内から変数ストアにキーを追加する](#uefi-secure-boot-optionA)
+ [タスク 2 – オプション B: 値が事前に設定済みの変数ストアを含むバイナリ BLOB を作成する](#uefi-secure-boot-optionB)

## タスク 1: キーペアを作成する
<a name="uefi-secure-boot-create-three-key-pairs"></a>

UEFI 安全ブート は、プラットフォームキー (PK)、キー交換キー (KEK)、署名データベース (db) という 3 つのキーデータベースに基づいおり、これらのデータベースは信頼チェーンで使用されます。

インスタンスでは、これらの各キーを作成する必要があります。UEFI 安全ブート 標準が有効な形式でパブリックキーの準備を行うには、それぞれのキー用に証明書を作成します。`DER` では SSL 形式 (バイナリエンコード用の形式) を定義しています。その後、各証明書を UEFI 署名リストに変換します。このリストはバイナリ形式で、UEFI 安全ブート による解析が可能です。最後に、関連するキーで各証明書に署名します。

**Topics**
+ [キーペアの作成を準備するには](#uefisb-prepare-to-create-key-pairs)
+ [キーペア 1: プラットフォームキー (PK) を作成します。](#uefisb-create-key-pair-1)
+ [キーペア 2: キー交換キー (KEK) を作成します](#uefisb-create-key-pair-2)
+ [キーペア 3: 署名データベース (db) を作成します](#uefisb-create-key-pair-3)
+ [ブートイメージ (カーネル) にプライベートキーで署名する](#uefi-secure-boot-sign-kernel)

### キーペアの作成を準備するには
<a name="uefisb-prepare-to-create-key-pairs"></a>

キーペアを作成する前に、キー生成処理で使用するための、グローバルで一意の識別子 (GUID) を作成します。

1. [インスタンスに接続します。](connect.md)

1. シェルプロンプトで、次のコマンドを実行します。

   ```
   uuidgen --random > GUID.txt
   ```

### キーペア 1: プラットフォームキー (PK) を作成します。
<a name="uefisb-create-key-pair-1"></a>

PK は UEFI 安全ブート インスタンスの信頼のルートです。プライベート PK は KEK を更新するために使用されます。このキーはその後、認証されたキーを署名データベース (db) に追加するためにも使用されます。

キーペアの作成には、X.509 標準が適用されます。標準の詳細については、*ウィキペディア*の「[X.509](https://en.wikipedia.org/wiki/X.509)」を参照してください。

**PK を作成するには**

1. キーを作成します。変数 `PK` に名前を付ける必要があります

   ```
   openssl req -newkey rsa:4096 -nodes -keyout PK.key -new -x509 -sha256 -days 3650 -subj "/CN=Platform key/" -out PK.crt
   ```

   以下の各パラメータが指定されます。
   + `-keyout PK.key` – プライベートキーファイル。
   + `-days 3650` – 証明書が有効な日数。
   + `-out PK.crt` – UEFI 変数の作成に使用される証明書。
   + `CN=Platform key` – キーの共通名 (CN)。ここでは、*プラットフォームキー* の代わりに組織の独自の名前を入力できます。

1. 証明書を作成します。

   ```
   openssl x509 -outform DER -in PK.crt -out PK.cer
   ```

1. 証明書を UEFI 署名リストに変換します。

   ```
   cert-to-efi-sig-list -g "$(< GUID.txt)" PK.crt PK.esl
   ```

1. UEFI 署名リストに (自己署名の) プライベート PKで署名します。

   ```
   sign-efi-sig-list -g "$(< GUID.txt)" -k PK.key -c PK.crt PK PK.esl PK.auth
   ```

### キーペア 2: キー交換キー (KEK) を作成します
<a name="uefisb-create-key-pair-2"></a>

プライベート KEK は db にキーを追加するために使用されます。このデータベースは、システム上で起動が許可された署名のリストです。

**KEK を作成するには**

1. キーを作成します。

   ```
   openssl req -newkey rsa:4096 -nodes -keyout KEK.key -new -x509 -sha256 -days 3650 -subj "/CN=Key Exchange Key/" -out KEK.crt
   ```

1. 証明書を作成します。

   ```
   openssl x509 -outform DER -in KEK.crt -out KEK.cer
   ```

1. 証明書を UEFI 署名リストに変換します。

   ```
   cert-to-efi-sig-list -g "$(< GUID.txt)" KEK.crt KEK.esl
   ```

1. プライベート PK で署名リストに署名します。

   ```
   sign-efi-sig-list -g "$(< GUID.txt)" -k PK.key -c PK.crt KEK KEK.esl KEK.auth
   ```

### キーペア 3: 署名データベース (db) を作成します
<a name="uefisb-create-key-pair-3"></a>

db リストには、システム上で起動することが認証されているキーが記載されています。このリストを変更する場合は、プライベート KEK が必要です。ブートイメージは、このステップで作成したプライベートキーで署名されます。

**db を作成するには**

1. キーを作成します。

   ```
   openssl req -newkey rsa:4096 -nodes -keyout db.key -new -x509 -sha256 -days 3650 -subj "/CN=Signature Database key/" -out db.crt
   ```

1. 証明書を作成します。

   ```
   openssl x509 -outform DER -in db.crt -out db.cer
   ```

1. 証明書を UEFI 署名リストに変換します。

   ```
   cert-to-efi-sig-list -g "$(< GUID.txt)" db.crt db.esl
   ```

1. プライベート KEK を使用して署名リストに署名します。

   ```
   sign-efi-sig-list -g "$(< GUID.txt)" -k KEK.key -c KEK.crt db db.esl db.auth
   ```

### ブートイメージ (カーネル) にプライベートキーで署名する
<a name="uefi-secure-boot-sign-kernel"></a>

Ubuntu 22.04 の場合、以下のイメージに署名が必要です。

```
/boot/efi/EFI/ubuntu/shimx64.efi
/boot/efi/EFI/ubuntu/mmx64.efi
/boot/efi/EFI/ubuntu/grubx64.efi
/boot/vmlinuz
```

**イメージに署名するには**  
イメージに署名するには、以下の構文を使用します。

```
sbsign --key db.key --cert db.crt --output /boot/vmlinuz /boot/vmlinuz
```

**注記**  
署名は、すべての新しいカーネルに対して行う必要があります。通常、*`/boot/vmlinuz`* は、最近インストールしたカーネルへのシンボリックリンクとなります。

ブートチェーンおよび必要なイメージは、ディストリビューションのドキュメントで確認してください。

¹ ArchWiki コミュニティの皆さんから提供された、すべての作業に感謝します。PK の作成、KEK の作成、DB の作成、およびイメージへの署名のためのコマンドは、[Creating keys](https://wiki.archlinux.org/title/Unified_Extensible_Firmware_Interface/Secure_Boot#Creating_keys) から提供されており、ArchWiki メンテナンスチームおよび (または) ArchWiki のコントリビューターによって作成されたものです。

## タスク 2 – オプション A: インスタンス内から変数ストアにキーを追加する
<a name="uefi-secure-boot-optionA"></a>

[3 つのキーペア](#uefi-secure-boot-create-three-key-pairs)の作成が完了すると、以下のステップにより、インスタンスに接続し、インスタンス内から変数ストアにキーを追加できるようになります。または、[タスク 2 – オプション B: 値が事前に設定済みの変数ストアを含むバイナリ BLOB を作成する](#uefi-secure-boot-optionB) の手順を完了します。

**Topics**
+ [ステップ 1: UEFI 安全ブート をサポートするインスタンスを起動する](#step1-launch-uefi-sb)
+ [ステップ 2: UEFI 安全ブート をサポートするようにインスタンスを設定する](#step2-launch-uefi-sb)
+ [ステップ 3: インスタンスから AMI を作成する](#step3-launch-uefi-sb)

### ステップ 1: UEFI 安全ブート をサポートするインスタンスを起動する
<a name="step1-launch-uefi-sb"></a>

次の前提条件の下で‭[‭‬インスタンスを起動‭](LaunchingAndUsingInstances.md)‬することで、UEFI 安全ブート をサポートするようにインスタンスを構成する準備が整います。インスタンスでの UEFI 安全ブート のサポートは、起動時にみ有効化が可能で、その後に有効にすることはできません。

**前提条件**
+ **AMI** - Linux AMI では、UEFI ブートモードをサポートする必要があります。AMI が UEFI ブートモードをサポートしていることを確認するには、AMI ブートモードパラメータで **uefi** を指定する必要があります。詳細については、「[Amazon EC2 AMI のブートモードパラメータを確認する](ami-boot-mode.md)」を参照してください。

  AWS では、重力子 ベースのインスタンスタイプ向けに UEFI をサポートするように構成された Linux AMI のみを提供します。AWS では、UEFI ブートモードをサポートする x86\$164 Linux AMI を提供していません。すべてのアーキテクチャで UEFI ブートモードをサポートするように独自の AMI を構成できます。UEFI ブートモードをサポートするように AMI を設定するには、独自の AMI に対して、複数の設定ステップを実行する必要があります。詳細については、「[Amazon EC2 AMI のブートモードを設定する](set-ami-boot-mode.md)」を参照してください。
+ **インスタンスタイプ** — UEFI をサポートするすべての仮想インスタンスタイプは、UEFI 安全ブート もサポートします。ベアメタルインスタンスタイプは UEFI 安全ブート をサポートしていません。UEFI 安全ブート をサポートするインスタンスタイプについては、[UEFI ブートモードの要件](launch-instance-boot-mode.md) を参照してください。
+ UEFI 安全ブート の立ち上げ後に、インスタンスの起動を行います。UEFI 安全ブート のサポートが可能なのは、2022 年 5 月 10 日 (UEFI 安全ブート リリース日) より後に起動されたインスタンスのみです。

インスタンスを起動したら、UEFI データが存在するかどうかを調べ、UEFI 安全ブート のサポートを設定できる状態であることを確認します ([ステップ 2](#step2-launch-uefi-sb)‬ に進みます)。UEFI データが見つかれば、不揮発性データが保持されていることになります。

**インスタンスがステップ 2 に進める状態かどうかを確認するには**  
[https://docs.aws.amazon.com/cli/latest/reference/ec2/get-instance-uefi-data.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/get-instance-uefi-data.html) コマンドを使用して、インスタンス ID を指定します。

```
aws ec2 get-instance-uefi-data --instance-id i-1234567890abcdef0
```

出力に UEFI データが含まれていれば、そのインスタンスはステップ 2 に進める状態です。空の出力が表示される場合、そのインスタンスで UEFI 安全ブート をサポートする設定は行えません。この状態は、UEFI 安全ブート サポートが利用可能になる前に起動されたインスタンスで発生します。この場合、新しいインスタンスを起動して再試行します。

### ステップ 2: UEFI 安全ブート をサポートするようにインスタンスを設定する
<a name="step2-launch-uefi-sb"></a>

#### インスタンスの UEFI 変数ストアにキーペアを登録します。
<a name="step2a-launch-uefi-sb"></a>

**警告**  
ブートイメージへの署名は、キーの登録*後*に行う必要があります。そうしないと、インスタンスを起動できなくなります。

署名済みの UEFI 署名リスト (`PK`、`KEK`、および `db`) は、作成後に UEFI ファームウェアに登録する必要があります。

`PK` 変数に対する書き込みは、以下の場合にのみ行うことができます。
+ `SetupMode`変数が`1`の場合、PKはまだ登録されていない。これは、次のコマンドを使用して確認します。`1` または `0` のどちらかが出力されている。

  ```
  efivar -d -n 8be4df61-93ca-11d2-aa0d-00e098032b8c-SetupMode 
  ```
+ 新しい PK が、既存の PK のプライベートキーによって署名されている。

**UEFI 変数ストアにキーを登録するには**  
インスタンスで以下のコマンドを実行する必要があります。

SetupMode が有効 (値が `1`) になっていれば、インスタンスで以下のコマンドを実行することでキーを登録できます。

```
[ec2-user ~]$ efi-updatevar -f db.auth db
```

```
[ec2-user ~]$ efi-updatevar -f KEK.auth KEK
```

```
[ec2-user ~]$ efi-updatevar -f PK.auth PK
```

**UEFI 安全ブート が有効になっていることを確認するには**  
UEFI 安全ブート が有効であることを確認するには、「[Amazon EC2 インスタンスで UEFI 安全ブート が有効化されているかどうかを確認する](verify-uefi-secure-boot.md)」に示したステップに従います。

この段階で、[https://docs.aws.amazon.com/cli/latest/reference/ec2/get-instance-uefi-data.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/get-instance-uefi-data.html) CLI コマンドにより UEFI 変数ストアをエクスポートすることが可能です。あるいは、次のステップに進みブートイメージに署名して、それを UEFI 安全ブート-対応のインスタンスで再起動できます。

### ステップ 3: インスタンスから AMI を作成する
<a name="step3-launch-uefi-sb"></a>

インスタンスから AMI を作成するには、コンソールまたは `CreateImage` API、CLI、または SDK を使用します。コンソールでのステップについては、「[Amazon EBS-backed AMI を作成する](creating-an-ami-ebs.md)」を参照してください。API でのステップについては、「[CreateImage](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateImage.html)」を参照してください。

**注記**  
`CreateImage` API は、インスタンスの UEFI 変数ストアを AMI に自動的にコピーします。コンソールは `CreateImage` API を使用します。この AMI を使用してインスタンスを起動した場合、インスタンスにも AMI と同じ UEFI 変数ストアが含まれます。

## タスク 2 – オプション B: 値が事前に設定済みの変数ストアを含むバイナリ BLOB を作成する
<a name="uefi-secure-boot-optionB"></a>

[3 つのキーペア](#uefi-secure-boot-create-three-key-pairs)の作成後、事前に値が設定され UEFI 安全ブート キーが指定された変数ストアを含む、バイナリ BLOB を作成できます。または、[タスク 2 – オプション A: インスタンス内から変数ストアにキーを追加する](#uefi-secure-boot-optionA) の手順を完了します。

**警告**  
ブートイメージへの署名は、キーの登録*前*に行う必要があります。そうしないと、インスタンスを起動できなくなります。

**Topics**
+ [ステップ 1: 変数ストアを新規で作成するか既存の変数ストアを更新する](#uefi-secure-boot-create-or-update-variable)
+ [ステップ 2: AMI の作成時にバイナリ BLOB をアップロードする](#uefi-secure-boot-upload-binary-blob-on-ami-creation)

### ステップ 1: 変数ストアを新規で作成するか既存の変数ストアを更新する
<a name="uefi-secure-boot-create-or-update-variable"></a>

python-uefivars ツールを使用すれば、インスタンスを実行しなくても*オフラインで*変数ストアを作成できます。このツールでは、キーから新しい変数ストアを作成できます。現在、このスクリプトでは、EDK2 形式、AWS 形式、および上位レベルのツールで編集しやすい JSON 表現がサポートされています。

**インスタンスを実行せずに変数ストアをオフラインで作成するには**

1. 次のリンクからツールをダウンロードします。

   ```
   https://github.com/awslabs/python-uefivars
   ```

1. 次のコマンドを実行して、キーから新しい変数ストアを作成します。これにより、base64 でエンコードされたバイナリ BLOB が、*your\$1binary\$1blob* bin として作成されます。このツールでは、`-I` パラメータ経由でバイナリ BLOB を更新することもできます。

   ```
   ./uefivars.py -i none -o aws -O your_binary_blob.bin -P PK.esl -K KEK.esl --db db.esl --dbx dbx.esl
   ```

### ステップ 2: AMI の作成時にバイナリ BLOB をアップロードする
<a name="uefi-secure-boot-upload-binary-blob-on-ami-creation"></a>

[https://docs.aws.amazon.com/cli/latest/reference/ec2/register-image.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/register-image.html) により、UEFI 変数ストアデータを渡します。`--uefi-data` パラメータではバイナリ BLOB を指定し、また `--boot-mode` パラメータでは `uefi` を指定します。

```
aws ec2 register-image \
    --name uefi_sb_tpm_register_image_test \
    --uefi-data $(cat your_binary_blob.bin) \
    --block-device-mappings "DeviceName=/dev/sda1,Ebs= {SnapshotId=snap-0123456789example,DeleteOnTermination=true}" \
    --architecture x86_64 \
    --root-device-name /dev/sda1 \
    --virtualization-type hvm \
    --ena-support \
    --boot-mode uefi
```

# UEFI 安全ブート の AWS バイナリ BLOB を作成する
<a name="aws-binary-blob-creation"></a>

次のステップにより、AMI の作成中に UEFI 安全ブート 変数をカスタマイズすることができます。このステップで使用される KEK は、2021 年 9 月現在のものです。Microsoft により KEK が更新された場合は、その最新の KEK を使用する必要があります。

**AWS でバイナリ BLOB を作成するには**

1. 空の PK 署名リストを作成します。

   ```
   touch empty_key.crt
   cert-to-efi-sig-list empty_key.crt PK.esl
   ```

1. KEK 証明書をダウンロードします。

   ```
   https://go.microsoft.com/fwlink/?LinkId=321185
   ```

1. UEFI 署名リスト (`siglist`) で KEK 証明書をラップします。

   ```
   sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_KEK.esl MicCorKEKCA2011_2011-06-24.crt 
   ```

1. Microsoft から db 証明書をダウンロードします。

   ```
   https://www.microsoft.com/pkiops/certs/MicWinProPCA2011_2011-10-19.crt
   https://www.microsoft.com/pkiops/certs/MicCorUEFCA2011_2011-06-27.crt
   ```

1. db 署名リストを生成します。

   ```
   sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_db.esl MicWinProPCA2011_2011-10-19.crt
   sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_UEFI_db.esl MicCorUEFCA2011_2011-06-27.crt
   cat MS_Win_db.esl MS_UEFI_db.esl > MS_db.esl
   ```

1. Unified Extensible Firmware Interface Forum は、DBX ファイルを提供しなくなりました。これらは、Microsoft によって GitHub で提供されるようになりました。[https://github.com/microsoft/secureboot\$1objects](https://github.com/microsoft/secureboot_objects) の Microsoft セキュアブート更新リポジトリから最新の DBX 更新をダウンロードしてください。

1. 署名付きの更新バイナリを解凍します。

   以下のスクリプトコンテンツを使用して `SplitDbxContent.ps1` を作成します。または、`Install-Script -Name SplitDbxContent` を使用して [PowerShell Gallery](https://www.powershellgallery.com/packages/SplitDbxContent/1.0) からスクリプトをインストールすることもできます。

   ```
   <#PSScriptInfo
    
   .VERSION 1.0
    
   .GUID ec45a3fc-5e87-4d90-b55e-bdea083f732d
    
   .AUTHOR Microsoft Secure Boot Team
    
   .COMPANYNAME Microsoft
    
   .COPYRIGHT Microsoft
    
   .TAGS Windows Security
    
   .LICENSEURI
    
   .PROJECTURI
    
   .ICONURI
    
   .EXTERNALMODULEDEPENDENCIES
    
   .REQUIREDSCRIPTS
    
   .EXTERNALSCRIPTDEPENDENCIES
    
   .RELEASENOTES
   Version 1.0: Original published version.
    
   #>
   
   <#
   .DESCRIPTION
    Splits a DBX update package into the new DBX variable contents and the signature authorizing the change.
    To apply an update using the output files of this script, try:
    Set-SecureBootUefi -Name dbx -ContentFilePath .\content.bin -SignedFilePath .\signature.p7 -Time 2010-03-06T19:17:21Z -AppendWrite'
   .EXAMPLE
   .\SplitDbxAuthInfo.ps1 DbxUpdate_x64.bin
   #>
   
   
   # Get file from script input
   $file  = Get-Content -Encoding Byte $args[0]
   
   # Identify file signature
   $chop = $file[40..($file.Length - 1)]
   if (($chop[0] -ne 0x30) -or ($chop[1] -ne 0x82 )) {
       Write-Error "Cannot find signature"
       exit 1
   }
   
   # Signature is known to be ASN size plus header of 4 bytes
   $sig_length = ($chop[2] * 256) + $chop[3] + 4
   $sig = $chop[0..($sig_length - 1)]
   
   if ($sig_length -gt ($file.Length + 40)) {
       Write-Error "Signature longer than file size!"
       exit 1
   }
   
   # Content is everything else
   $content = $file[0..39] + $chop[$sig_length..($chop.Length - 1)]
   
   # Write signature and content to files
   Set-Content -Encoding Byte signature.p7 $sig
   Set-Content -Encoding Byte content.bin $content
   ```

   次のスクリプトを使用して、署名付き DBX ファイルを解凍します。

   ```
   PS C:\Windows\system32> SplitDbxContent.ps1 .\dbx.bin
   ```

   これにより、`signature.p7` および `content.bin` の 2 つのファイルが生成されます。`content.bin` は次のステップで使用します。

1. `uefivars.py` スクリプトを使用して UEFI 変数ストアを作成します。

   ```
   ./uefivars.py -i none -o aws -O uefiblob-microsoft-keys-empty-pk.bin -P ~/PK.esl -K ~/MS_Win_KEK.esl --db ~/MS_db.esl  --dbx ~/content.bin 
   ```

1. バイナリ BLOB と UEFI 変数ストアを確認します。

   ```
   ./uefivars.py -i aws -I uefiblob-microsoft-keys-empty-pk.bin -o json | less
   ```

1. 再度、同じツールに渡すと、BLOB を更新できます。

   ```
   ./uefivars.py -i aws -I uefiblob-microsoft-keys-empty-pk.bin -o aws -O uefiblob-microsoft-keys-empty-pk.bin -P ~/PK.esl -K ~/MS_Win_KEK.esl --db ~/MS_db.esl  --dbx ~/content.bin
   ```

   正常な出力

   ```
   Replacing PK
   Replacing KEK
   Replacing db
   Replacing dbx
   ```

# EBS-backed AMI での暗号化の利用
<a name="AMIEncryption"></a>

Amazon EBS スナップショットを使用した AMI は Amazon EBS 暗号化の利点を活かすことができます。データおよびルートボリュームの両方のスナップショットを暗号化して AMI にアタッチできます。インスタンスを起動し、完全な EBS 暗号化サポートも含めてイメージをコピーできます。これらのオペレーションの暗号化パラメータは、AWS KMS が利用できるすべてのリージョンでサポートされています。

暗号化された EBS ボリュームを持つ EC2 インスタンスは、他のインスタンスと同様に AMIs から起動します。また、暗号化されていない EBS スナップショットでバックアップされている AMI からインスタンスを起動するとき、起動中に一部またはすべてのボリュームを暗号化できます。

EBS ボリュームと同様に、AMI のスナップショットはデフォルトの AWS KMS key または指定したカスタマーマネージド型キーで暗号化できます。いずれの場合も、選択した KMS キー を使用するためのアクセス権限が必要です。

暗号化されたスナップショットを持つ AMI は、AWS アカウント間で共有できます。詳細については、[Amazon EC2 での共有 AMI の使用方法について](sharing-amis.md) を参照してください。

**Topics**
+ [インスタンスの起動シナリオ](#AMI-encryption-launch)
+ [イメージコピーのシナリオ](#AMI-encryption-copy)

## インスタンスの起動シナリオ
<a name="AMI-encryption-launch"></a>



AMI から Amazon EC2 インスタンスを起動するには、`RunInstances` または直接 Amazon EC2 API や CLI を使用して、AWS マネジメントコンソール アクションを実行します。その際、ブロックデバイスマッピングから提供されるパラメータを指定します。詳細については、「[Amazon EC2 インスタンスでのボリュームのブロックデバイスマッピング](block-device-mapping-concepts.md)」を参照してください。AWS CLI からブロックデバイスマッピングを制御する例については、「[EC2 インスタンスを起動、リスト、および終了する](https://docs.aws.amazon.com/cli/latest/userguide/cli-services-ec2-instances.html)」を参照してください。

デフォルトでは、明示的な暗号化パラメータがない場合、AMI のソーススナップショットから EBS ボリュームを復元しているときに、`RunInstances` アクションは AMI のソーススナップショットの既存の暗号化状態を維持します。デフォルトでの暗号化が有効になっている場合、AMI から作成したすべてのボリュームが暗号化されます (作成元のスナップショットが暗号化されているかどうかは関係ありません)。デフォルトでの暗号化が有効にされていない場合、インスタンスは AMI の暗号化状態を維持します。

インスタンスを起動し、同時に、暗号化パラメータを指定して、新しい暗号化状態を生成されるボリュームに適用することもできます。そのため、以下の動作が観察されます。

**暗号化パラメータなしでの起動**
+ デフォルトでの暗号化が有効にされている場合を除き、暗号化されていないスナップショットは、暗号化されていないボリュームに復元されます。デフォルトでの暗号化が有効にされている場合は、新しく作成されるすべてのボリュームが暗号化されます。
+ 所有する暗号化されたスナップショットは、同じ KMS キー に暗号化されるボリュームに復元されます。
+ 所有していない (例えば、AMI が共有されている) 暗号化されたスナップショットは、ユーザーの AWS アカウントのデフォルト KMS キーで暗号化されているボリュームに復元されます。

デフォルトの動作は、暗号化パラメータを指定してオーバーライドできます。利用できるパラメータは、`Encrypted` と `KmsKeyId` です。`Encrypted` パラメータのみを設定すると、次のような結果になります。

**`Encrypted` を設定し、`KmsKeyId` を指定しない場合のインスタンス起動動作**
+ 暗号化されていないスナップショットは、ユーザーの AWS アカウントのデフォルト KMS キーで暗号化されている EBS ボリュームに復元されます。
+ 所有する暗号化されたスナップショットは、同じ KMS キー により暗号化された EBS ボリュームに復元されます。(つまり、`Encrypted` パラメータには効果がありません。)
+ 所有していない (つまり、AMI が共有されている) 暗号化されたスナップショットは、ユーザーの AWS アカウントのデフォルト KMS キーで暗号化されているボリュームに復元されます。(つまり、`Encrypted` パラメータには効果がありません。)

`Encrypted` と `KmsKeyId` 両方のパラメータを設定すると、暗号化オペレーションにデフォルトではない KMS キー を指定できます。結果として次のように動作します。

**`Encrypted` と `KmsKeyId` が両方設定されたインスタンス**
+ 暗号化されていないスナップショットは、指定された KMS キー により暗号化された EBS ボリュームに復元されます。
+ 暗号化されたスナップショットは、元の KMS キー ではなく、指定された KMS キー に暗号化された EBS ボリュームに復元されます。

`Encrypted` パラメータも設定せずに `KmsKeyId`を送信するとエラーが発生します。

以下のセクションでは、デフォルトではない暗号化パラメータを使用して AMI からインスタンスを起動する例を示します。これらの各シナリオでは、`RunInstances` アクションに指定するパラメータにより、スナップショットからボリュームを復元中に暗号化の状態が変化します。

コンソールを使用して AMI からインスタンスを起動する方法については、「[Amazon EC2 インスタンスの起動](LaunchingAndUsingInstances.md)」を参照してください。

### 起動時にボリュームを暗号化する
<a name="launch1"></a>

この例では、暗号化されていないスナップショットでバックアップされた AMI を使用して、暗号化された EBS ボリュームのある EC2 インスタンスを起動します。

![\[インスタンスを起動して、ボリュームをオンザフライで暗号化します。\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/images/ami-launch-convert.png)


`Encrypted` パラメータのみを使用すると、このインスタンスのボリュームが暗号化されます。`KmsKeyId` パラメータの指定はオプションです。KMS キー ID を指定しない場合、AWS アカウントのデフォルト KMS キーを使用して、ボリュームを暗号化します。所有する別の KMS キー にボリュームを暗号化するには、`KmsKeyId` パラメータを指定します。

### 起動時にボリュームを再暗号化する
<a name="launch2"></a>

この例では、暗号化されたスナップショットでバックアップされた AMI を使用して、新しい KMS キー により暗号化された EBS ボリュームのある EC2 インスタンスを起動します。

![\[インスタンスを起動して、ボリュームをオンザフライで再暗号化します。\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/images/ami-launch-encrypted.png)


AMI を所有していて、暗号化パラメータを指定しない場合、作成されるインスタンスではスナップショットと同じ KMS キーでボリュームが暗号化されます。他のアカウントから共有された AMI に対して暗号化パラメータを指定しない場合、ボリュームはデフォルト KMS キー により暗号化されます。図のように暗号化パラメータが指定されている場合、ボリュームは指定された KMS キー により暗号化されます。

### 起動時に複数のボリュームの暗号化状態を変更する
<a name="launch3"></a>

このより複雑な例では、複数のスナップショット (暗号化状態はそれぞれ異なります) でバックアップされた AMI を使用して、新しく暗号化されたボリュームと再暗号化されたボリュームがある EC2 インスタンスを起動します。

![\[起動時に複数のボリュームを暗号化および再暗号化します。\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/images/ami-launch-mixed.png)


このシナリオでは、`RunInstances` アクションにソーススナップショットそれぞれに対する暗号化パラメータが指定されます。可能な暗号化パラメータがすべて指定されると、AMI を所有しているかどうかに関係なく、作成されるインスタンスは同じです。

## イメージコピーのシナリオ
<a name="AMI-encryption-copy"></a>

Amazon EC2 AMI をコピーするには、`CopyImage` または直接 Amazon EC2 API や CLI を使用して、AWS マネジメントコンソール アクションを実行します。

デフォルトでは、明示的な暗号化パラメータがない場合、コピー中 `CopyImage` アクションは AMI のソーススナップショットの既存の暗号化状態を維持します。AMI をコピーし、同時に、暗号化パラメータを指定して、新しい暗号化状態を関連付けられている EBS スナップショットに適用することもできます。そのため、以下の動作が観察されます。

**暗号化パラメータなしでのコピー**
+ デフォルトでの暗号化が有効にされている場合を除き、暗号化されていないスナップショットは、別の暗号化されていないスナップショットにコピーされます。デフォルトでの暗号化が有効にされている場合は、新しく作成されるすべてのスナップショットが暗号化されます。
+ 所有する暗号化されたスナップショットは、同じ KMS キー で暗号化されたスナップショットにコピーされます。
+ 所有していない (例えば、AMI が共有されている) 暗号化されたスナップショットは、ユーザーの AWS アカウントのデフォルト KMS キーで暗号化されているスナップショットにコピーされます。

これらすべてのデフォルトの動作は、暗号化パラメータを指定してオーバーライドできます。利用できるパラメータは、`Encrypted` と `KmsKeyId` です。`Encrypted` パラメータのみを設定すると、次のような結果になります。

**`Encrypted` を設定し、`KmsKeyId` を指定しない場合のコピーイメージ動作**
+ 暗号化されていないスナップショットは、AWS アカウントのデフォルト KMS キーで暗号化されたスナップショットにコピーされます。
+ 暗号化されたスナップショットは、同じ KMS キー により暗号化されたスナップショットにコピーされます。(つまり、`Encrypted` パラメータには効果がありません。)
+ 所有していない (例えば、AMI が共有されている) 暗号化されたスナップショットは、ユーザーの AWS アカウントのデフォルト KMS キーで暗号化されているボリュームにコピーされます。(つまり、`Encrypted` パラメータには効果がありません。)

`Encrypted` と `KmsKeyId` 両方のパラメータを設定すると、暗号化オペレーションにカスタマー管理 KMS キー を指定できます。結果として次のように動作します。

**`Encrypted` と `KmsKeyId` の両方を設定した場合のコピーイメージ動作**
+ 暗号化されていないスナップショットは、指定された KMS キー により暗号化されたスナップショットにコピーされます。
+ 暗号化されたスナップショットは、元の KMS キー ではなく、指定された KMS キー に暗号化されたスナップショットにコピーされます。

`Encrypted` パラメータも設定せずに `KmsKeyId`を送信するとエラーが発生します。

以下のセクションでは、デフォルトではない暗号化パラメータを使用して AMI をコピーし、結果として暗号化状態が変化する例を示します。

コンソールを使用する手順の詳細については、「[Amazon EC2 AMI のコピー](CopyingAMIs.md)」を参照してください。

### コピー時に暗号化されていないイメージを暗号化する
<a name="copy-unencrypted-to-encrypted"></a>

このシナリオでは、暗号化されていないルートスナップショットでバックアップされた AMI は、暗号化されたルートスナップショットを持つ AMI にコピーされます。`CopyImage` アクションは、カスタマー管理された型キーなど、2 つの暗号化パラメータで呼び出されます。その結果、ルートスナップショットの暗号化ステータスが変更され、ターゲット AMI はソーススナップショットと同じデータを含むルートスナップショットにバックアップされますが、指定されたキーを使用して暗号化されます。両方の AMI でスナップショットのストレージコストと、いずれかの AMI から起動するインスタンスの料金が発生します。

**注記**  
デフォルトで暗号化を有効にすると、AMI 内のすべてのスナップショットで `Encrypted` パラメータを `true` に設定したのと同じ効果があります。

![\[AMI をコピーし、スナップショットをオンザフライで暗号化\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/images/ami-to-ami-convert.png)


`Encrypted` パラメータを設定すると、このインスタンスの単一のスナップショットが暗号化されます。`KmsKeyId` パラメータを指定しない場合は、デフォルトのカスタマーマネージド型キーを使用して、スナップショットのコピーが暗号化されます。

**注記**  
複数のスナップショットがあるイメージをコピーして、それぞれの暗号化状態を個々に設定することもできます。

# Amazon EC2 での共有 AMI の使用方法について
<a name="sharing-amis"></a>

*共有 AMI* は、デベロッパーが作成し、他のデベロッパーが利用できるようにした AMI です。Amazon EC2 を始める最も簡単な方法は、必要なコンポーネントが含まれている共有 AMI を使用して、カスタムコンテンツを追加することです。独自の AMI を作成し、他のユーザーと共有することもできます。

共有 AMI は、ご自分の判断で使用してください。Amazon は、他の Amazon EC2 ユーザーとの間で共有される AMI の統合性や安全性を保証できません。そのため、共有 AMI を取り扱う際は、ご自分のデータセンターに外部のコードをデプロイすることを検討する場合と同じように、充分な注意を払う必要があります。検証済みのプロバイダーなど、信頼できるソースから AMI を取得することをお勧めします。

## 検証済みプロバイダー
<a name="verified-ami-provider"></a>

Amazon EC2 コンソールでは、Amazon または検証済み Amazon パートナーが所有するパブリック AMI には **[検証済みプロバイダー]** のマークが付されます。

また、[describe-images](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) AWS CLI コマンドを使用して、検証済みプロバイダーからのパブリック AMI を識別することもできます。Amazon または検証済みパートナーが所有するパブリックイメージには、`amazon`、`aws-backup-vault`、`aws-marketplace` のいずれかのエイリアス付き所有者が存在します。CLI 出力では、これらの値が `ImageOwnerAlias` について表示されます。他のユーザーは、AMI にエイリアスを設定できません。これを利用すれば、Amazon または検証済みパートナーから AMI を簡単に見つけられます。

検証済みプロバイダーになるには、AWS Marketplace で販売者として登録する必要があります。登録が完了すると、AMI を AWS Marketplace で一覧表示できます。詳細については、「*AWS Marketplace 販売者ガイド*」の「[販売者としての開始方法](https://docs.aws.amazon.com/marketplace/latest/userguide/user-guide-for-sellers.html)」および「[AMI ベースの製品](https://docs.aws.amazon.com/marketplace/latest/userguide/ami-products.html)」を参照してください。

**Topics**
+ [検証済みプロバイダー](#verified-ami-provider)
+ [Amazon EC2 インスタンスで使用する共有 AMI を検索する](usingsharedamis-finding.md)
+ [Linux 用の共有 AMI を使用する準備をする](usingsharedamis-confirm.md)
+ [許可された AMI を使用して Amazon EC2 で AMI の検出と使用を制御する](ec2-allowed-amis.md)
+ [Amazon EC2 で使用するために AMI を公開する](sharingamis-intro.md)
+ [AMI のパブリックアクセスのブロックについて](block-public-access-to-amis.md)
+ [組織および組織単位での共有 AMI の使用](share-amis-with-organizations-and-OUs.md)
+ [特定の AWS アカウントとの AMI の共有](sharingamis-explicit.md)
+ [お客様の AWS アカウント と AMI の共有をキャンセルする](cancel-sharing-an-AMI.md)
+ [共有 Linux AMI の作成に関する推奨事項](building-shared-amis.md)

**他のトピックに関する情報をお探しの場合は**
+ AMI の作成については、「[Amazon S3-backed AMI を作成する](creating-an-ami-instance-store.md)」または「[Amazon EBS-backed AMI を作成する](creating-an-ami-ebs.md)」を参照してください。
+ AWS Marketplace でのアプリケーションの構築、配信、保守の詳細については、[AWS Marketplace ドキュメント](https://docs.aws.amazon.com/marketplace/)をご参照ください。

# Amazon EC2 インスタンスで使用する共有 AMI を検索する
<a name="usingsharedamis-finding"></a>

Amazon EC2 コンソールまたはコマンドラインを使用すると、Amazon EC2 インスタンスで使用するパブリックまたはプライベートの共有 AMI を検索できます。

AMI はリージョンのリソースです。共有 AMI (パブリックまたはプライベート) を検索するときには、それの共有元のリージョンから実行する必要があります。AMI を他のリージョンで利用できるようにするには、AMI をそのリージョンにコピーし、共有します。詳細については「[Amazon EC2 AMI のコピー](CopyingAMIs.md)」を参照してください。

------
#### [ Console ]

コンソールには AMI フィルターフィールドが用意されています。**[検索]** フィールドで指定されたフィルターを使用して、検索範囲を指定することもできます。

**共有または AMI を見つけるには**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. ナビゲーションペインで **[AMI]** を選択してください。

1. 最初のフィルターで、次のいずれかのオプションを選択します。
   + **プライベートイメージ** – 共有されているすべての AMI を一覧表示します。
   + **パブリックイメージ** – すべてのパブリック AMI を一覧表示します。

1. (オプション) Amazon の公開イメージのみを表示するには、**[検索]** フィールドを選択し、メニューオプションから **[所有者エイリアス]** 、**[=]**、**[Amazon]** の順に選択します。

1. (オプション) フィルターを追加して、要件を満たす AMI に検索範囲を設定します。

**「[検証済みプロバイダー](sharing-amis.md#verified-ami-provider)」で共有パブリック AMI を見つける方法**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. ナビゲーションペインで **[AMI カタログ]** を選択してください。

1. [**コミュニティ AMI**] を選択してください。

1. **[結果を絞り込む]** ペインで、**[検証済みプロバイダー]** を選択します。**[検証済みプロバイダー]** のラベルは、AMI が Amazon または検証済みパートナーからのものであることを示します。

------
#### [ AWS CLI ]

AMI を一覧表示するには、- [describe-images](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) マンド () を使用します。次の例のように、興味のある種類の AMI に絞って一覧表示できます。

**すべてのパブリック AMI を一覧表示する方法**  
次のコマンドは、所有しているパブリック AMI を含むすべてのパブリック AMI を一覧表示します。

```
aws ec2 describe-images --executable-users all
```

**明示的な起動許可を持つ AMI を一覧表示する方法**  
次のコマンドを使用すると、お客様が明示的な起動許可を持つ AMI が一覧表示されます。このリストには、お客様が所有する AMI は含まれていません。

```
aws ec2 describe-images --executable-users self
```

**検証済みプロバイダーが所有する AMI を一覧表示する方法**  
次のコマンドにより、「[検証済みプロバイダー](sharing-amis.md#verified-ami-provider)」が所有する AMI が一覧表示されます。検証済みプロバイダー (Amazon または検証済みパートナーのいずれか) が所有するパブリック AMI には、アカウントフィールドで `amazon`、`aws-backup-vault`、`aws-marketplace` として表示されるエイリアス付き所有者が存在します。これは、検証済みプロバイダーからの AMI を簡単に見つけるのに役立ちます。他のユーザーは、AMI にエイリアスを設定できません。

```
aws ec2 describe-images \
    --owners amazon aws-marketplace \
    --query 'Images[*].[ImageId]' \
    --output text
```

**アカウントが所有する AMI を一覧表示する方法**  
次のコマンドを実行すると、指定した AWS アカウント が所有する AMI が一覧表示されます。

```
aws ec2 describe-images --owners 123456789012
```

**フィルタを使用して AMI をスコープする方法**  
表示される AMI の数を減らすには、フィルタを使用して、興味のある種類の AMI に限定して表示します。例えば、次のフィルタを使用すると、EBS-backed AMI のみが表示されます。

```
--filters "Name=root-device-type,Values=ebs"
```

------
#### [ PowerShell ]

AMI を一覧表示するには、[Get-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Image.html) コマンドレット (Tools for Windows PowerShell) を使用します。次の例のように、興味のある種類の AMI に絞って一覧表示できます。

**すべてのパブリック AMI を一覧表示する方法**  
次のコマンドは、所有しているパブリック AMI を含むすべてのパブリック AMI を一覧表示します。

```
Get-EC2Image -ExecutableUser all
```

**明示的な起動許可を持つ AMI を一覧表示する方法**  
次のコマンドを使用すると、お客様が明示的な起動許可を持つ AMI が一覧表示されます。このリストには、お客様が所有する AMI は含まれていません。

```
Get-EC2Image -ExecutableUser self
```

**検証済みプロバイダーが所有する AMI を一覧表示する方法**  
次のコマンドにより、「[検証済みプロバイダー](sharing-amis.md#verified-ami-provider)」が所有する AMI が一覧表示されます。検証済みプロバイダー (Amazon または検証済みパートナーのいずれか) が所有するパブリック AMI には、アカウントフィールドで `amazon`、`aws-backup-vault`、`aws-marketplace` として表示されるエイリアス付き所有者が存在します。これは、検証済みプロバイダーからの AMI を簡単に見つけるのに役立ちます。他のユーザーは、AMI にエイリアスを設定できません。

```
Get-EC2Image -Owner amazon aws-marketplace
```

**アカウントが所有する AMI を一覧表示する方法**  
次のコマンドを実行すると、指定した AWS アカウント が所有する AMI が一覧表示されます。

```
Get-EC2Image -Owner 123456789012
```

**フィルタを使用して AMI をスコープする方法**  
表示される AMI の数を減らすには、フィルタを使用して、興味のある種類の AMI に限定して表示します。例えば、次のフィルタを使用すると、EBS-backed AMI のみが表示されます。

```
-Filter @{Name="root-device-type"; Values="ebs"}
```

------

# Linux 用の共有 AMI を使用する準備をする
<a name="usingsharedamis-confirm"></a>

Linux で共有 AMI を使用する前に、次の手順を実行して、インスタンスへの好ましくないアクセスを許可する認証情報が第三者により事前にインストールされていないことと、機密データを第三者に送信する可能性があるリモートロギングが事前設定されていないことを確認します。システムセキュリティ改善についての詳細は、AMI で使用される Linux ディストリビューションの文書を確認してください。

インスタンスへのアクセスを誤って失わないように、SSH セッションを 2 つ開始して、見覚えのない認証情報を削除し、その後も SSH を使用してインスタンスにログインできることが確認されるまで、2 つ目のセッションを開いておくことをお勧めします。

1. 未許可のパブリック SSH キーを特定し、無効にします。ファイル内の唯一のキーは、AMI の起動に使用したキーである必要があります。次のコマンドを使用すると、`authorized_keys` ファイルが見つかります。

   ```
   [ec2-user ~]$ sudo find / -name "authorized_keys" -print -exec cat {} \;
   ```

1. ルートユーザーにはパスワードベースの認証を無効にします。`sshd_config` ファイルを開き、次のように `PermitRootLogin` 行を編集します。

   ```
   PermitRootLogin without-password
   ```

   または、ルートユーザーとしてインスタンスにログインする機能を無効にできます。

   ```
   PermitRootLogin No
   ```

   sshd サービスを再起動します。

1. インスタンスにログインできるユーザーが他にないか確認します。スーパーユーザー権限を持つユーザーが特に危険です。不明のアカウントがあれば、そのパスワードを削除するか、ロックします。

1. 開いていても使用していないポートと、着信接続をリスニングしている実行中のネットワークサービスをチェックします。

1. 事前設定されているリモートロギングを防ぐには、既存の設定ファイルを削除し、`rsyslog` サービスを再起動してください。例:

   ```
   [ec2-user ~]$ sudo rm /etc/rsyslog.conf
   [ec2-user ~]$ sudo service rsyslog restart
   ```

1. すべての cron ジョブが正当であることを確認します。

セキュリティ上のリスクとして考えられるパブリック AMI を発見した際には、AWS セキュリティチームにご連絡ください。詳細については、「[AWS セキュリティセンター](https://aws.amazon.com/security/)」を参照してください。

# 許可された AMI を使用して Amazon EC2 で AMI の検出と使用を制御する
<a name="ec2-allowed-amis"></a>

AWS アカウント での Amazon マシンイメージ (AMI) の検出と使用を制御するには、*許可された AMI* の機能を使用できます。アカウント内で AMI を表示して使用するために満たす必要がある基準を指定します。条件を有効にすると、インスタンスを起動するユーザーは、指定された条件に準拠する AMI のみを表示し、アクセスできます。例えば、信頼された AMI プロバイダーのリストを条件として指定できます。これらのプロバイダーからの AMI のみが表示され、使用できます。

許可された AMI 設定を有効にする前に、*監査モード*を有効にして、どの AMI を表示および使用不可にするかをプレビューできます。これにより、必要に応じて条件を絞り込み、目的の AMI のみがアカウント内のユーザーに表示されるようにすることができます。さらに、[describe-instance-image-metadata](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instance-image-metadata.html) コマンドを実行し、指定した条件を満たしていない AMI で起動されたインスタンスを特定します。この情報は、準拠した AMI を使用するように起動設定を更新する (起動テンプレートで別の AMI を指定するなど) か、これらの AMI を許可するように条件を調整するかどうかを決定するのに役立ちます。

許可された AMI 設定は、アカウントレベルで直接指定するか、宣言ポリシーを使用して指定します。これらの設定は、AMI の使用を制御する各 AWS リージョンで設定する必要があります。宣言型ポリシーを使用すると、複数の リージョンと複数の アカウントで同時に設定を適用できます。宣言ポリシーが使用されている場合、アカウント内で直接設定を変更することはできません。このトピックでは、アカウント内で設定を直接設定する方法について説明します。宣言ポリシーの使用の詳細については、「*AWS Organizations ユーザーガイド*」の「[宣言ポリシー](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_declarative.html)」を参照してください。

**注記**  
許可された AMI 機能は、アカウントと共有されている AMI とパブリック AMI の検出と使用のみを制御します。アカウントが所有する AMI は制限されません。設定した条件にかかわらず、特定のアカウントで作成した AMI は、常にそのアカウントのユーザーが検出、使用することができます。

**許可された AMI の主な利点**
+ **コンプライアンスとセキュリティ**: ユーザーは、指定された基準を満たす AMI のみを検出して使用できるため、準拠されていない AMI を使用するリスクが軽減されます。
+ **効率的な管理**: 許可される AMI の数を減らすことで、残りの AMI の管理が簡単になり、効率が向上します。
+ **アカウントレベルの一元化された実装**: アカウント内で直接、または宣言ポリシーを使用して、アカウントレベルで許可された AMI 設定を構成します。これにより、アカウント全体で AMI の使用を一元的かつ効率的に制御できます。

**Topics**
+ [許可された AMI の仕組み](#how-allowed-amis-works)
+ [許可された AMI を実装するためのベストプラクティス](#best-practice-for-implementing-allowed-amis)
+ [必要な IAM 許可](#iam-permissions-for-allowed-amis)
+ [許可された AMI の設定を管理する](manage-settings-allowed-amis.md)

## 許可された AMI の仕組み
<a name="how-allowed-amis-works"></a>

お使いのアカウントで、どの AMI を検出して使用できるかを制御するには、AMI を評価するための一連の基準を定義します。次の図に示すように、基準は 1 つまたは複数の `ImageCriterion` で構成されます。説明は図の後に続きます。

![\[許可された AMI の ImageCriteria 設定階層。\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/images/ami_allowed-amis-imagecriteria.png)


設定には 3 つのレベルがあります。
+ **1** – パラメータ値
  + 複数値パラメータ:
    + `ImageProviders`
    + `ImageNames`
    + `MarketplaceProductCodes`

      AMI は、パラメータ内の*任意の*値と一致した場合に許可されます。

      例: `ImageProviders` = `amazon` **または**アカウント `111122223333` **または** アカウント `444455556666` (パラメータ値の評価ロジックは図に示されていません。)
  + 単一値パラメータ:
    + `CreationDateCondition`
    + `DeprecationTimeCondition`
+ **2** – `ImageCriterion`
  + 複数のパラメータを **AND** ロジックでグループ化します。
  + AMI が許可されるには、`ImageCriterion` 内の*すべての*パラメータと一致する必要があります。
  + 例: `ImageProviders` = `amazon` **AND** `CreationDateCondition` = 300 日以下
+ **3** – `ImageCriteria`
  + 複数の `ImageCriterion` を **OR** ロジックでグループ化します。
  + AMI は、*任意の* `ImageCriterion` と一致した場合に許可されます。
  + AMI を評価するための完全な設定を形成します。

**Topics**
+ [許可された AMI のパラメータ](#allowed-amis-criteria)
+ [許可された AMI の設定](#allowed-amis-json-configuration)
+ [基準の評価方法](#how-allowed-amis-criteria-are-evaluated)
+ [制限](#allowed-amis-json-configuration-limits)
+ [許可されている操作](#allowed-amis-operations)

### 許可された AMI のパラメータ
<a name="allowed-amis-criteria"></a>

次のパラメータを設定すると `ImageCriterion` を作成できます。

`ImageProviders`  
AMI が許可されている AMI プロバイダーです。  
有効な値は、次のように AWS、および AWS アカウント ID で定義されたエイリアスであり、次のようなものがあります。  
+ `amazon` – Amazon または検証済みのプロバイダーによって作成された AMI を識別するエイリアス
+ `aws-marketplace` – AWS Marketplace で検証済みプロバイダーによって作成された AMI を識別するエイリアス 
+ `aws-backup-vault` – 論理エアギャップバックアップボールトアカウントに存在する AWS バックアップ AMI を識別するエイリアス。AWS バックアップの論理エアギャップボールト機能を使用する場合は、このエイリアスが AMI プロバイダーとして含まれていることを確認してください。
+ AWS アカウント ID – 1 つ以上の 12 桁の AWS アカウント ID
+ `none` – アカウントによって作成された AMI のみを検出して使用できることを示します。パブリックまたは共有 AMI を検出して使用することはできません。これを指定すると、他の条件は指定できなくなります。

`ImageNames`  
完全一致またはワイルドカード (`?` または `*`) を使用した、許可された AMI の名前。

`MarketplaceProductCodes`  
許可された AMI の AWS Marketplace 製品コード。

`CreationDateCondition`  
許可された AMI の最大有効期間。

`DeprecationTimeCondition`  
許可された AMI が非推奨になってからの最大経過期間。

各条件の有効な値と制約については、「*Amazon EC2 API リファレンス*」の「[ImageCriterionRequest](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ImageCriterionRequest.html)」を参照してください。

### 許可された AMI の設定
<a name="allowed-amis-json-configuration"></a>

許可された AMI のコア設定は、許可された AMI の基準を定義する `ImageCriteria` 設定です。次の JSON 構造は、指定できるパラメータを示しています。

```
{
    "State": "enabled" | "disabled" | "audit-mode",  
    "ImageCriteria" : [
        {
            "ImageProviders": ["string",...],
            "MarketplaceProductCodes": ["string",...],           
            "ImageNames":["string",...],
            "CreationDateCondition" : {
                "MaximumDaysSinceCreated": integer
            },
            "DeprecationTimeCondition" : {
                "MaximumDaysSinceDeprecated": integer
            }
         },
         ...
}
```

#### ImageCriteria の例
<a name="allowed-amis-json-configuration-example"></a>

以下の `ImageCriteria` の例では 4 つの `ImageCriterion` を設定します。AMI は、これらの `ImageCriterion` のいずれかと一致する場合に許可されます。条件の評価方法に関する詳細は、「[基準の評価方法](#how-allowed-amis-criteria-are-evaluated)」を参照してください。

```
{
    "ImageCriteria": [
        // ImageCriterion 1: Allow AWS Marketplace AMIs with product code "abcdefg1234567890"
        {
            "MarketplaceProductCodes": [
                "abcdefg1234567890"
            ]
        },
        // ImageCriterion 2: Allow AMIs from providers whose accounts are
        // "123456789012" OR "123456789013" AND AMI age is less than 300 days
        {
            "ImageProviders": [
                "123456789012",
                "123456789013"
            ],
            "CreationDateCondition": {
                "MaximumDaysSinceCreated": 300
            }
        },
        // ImageCriterion 3: Allow AMIs from provider whose account is "123456789014" 
        // AND with names following the pattern "golden-ami-*"
        {
            "ImageProviders": [
                "123456789014"
            ],
            "ImageNames": [
                "golden-ami-*"
            ]
        },
        // ImageCriterion 4: Allow AMIs from Amazon or verified providers 
        // AND which aren't deprecated
        {
            "ImageProviders": [
                "amazon"
            ],
            "DeprecationTimeCondition": {
                "MaximumDaysSinceDeprecated": 0
            }
        }
    ]
}
```

### 基準の評価方法
<a name="how-allowed-amis-criteria-are-evaluated"></a>

以下の表は、AMI が許可されるかどうかを判断する評価ルールを説明し、各レベルで `AND` 演算子または `OR` 演算子がどのように適用されるかを示しています。


| 評価レベル | オペレーター | 許可された AMI になるための要件 | 
| --- | --- | --- | 
| ImageProviders、ImageNames、および MarketplaceProductCodes のパラメータ値 | OR | AMI は、各パラメータリストの少なくとも 1 つの値と一致する必要があります。 | 
| ImageCriterion | AND | AMI は、各 ImageCriterion のすべてのパラメータと一致する必要があります。 | 
| ImageCriteria | OR | AMI は、ImageCriterion のいずれかと一致する必要があります。 | 

上記の評価ルールを使用して、それらを [ImageCriteria の例](#allowed-amis-json-configuration-example) に適用する方法を見てみましょう。
+ `ImageCriterion` 1: AWS Marketplace 製品コード `abcdefg1234567890` を持つ AMI を許可する

  `OR`
+ `ImageCriterion` 2: 次の両方の基準を満たす AMI を許可する
  + `123456789012` `OR` `123456789013` のいずれかのアカウントが所有している
    + `AND`
  + 過去 300 日以内に作成された

  `OR`
+ `ImageCriterion` 3: 次の両方の条件を満たす AMI を許可する:
  + `123456789014` アカウントが所有している
    + `AND`
  + `golden-ami-*` パターンで命名されている

  `OR`
+ `ImageCriterion` 4: 次の両方の条件を満たす AMI を許可する:
  + Amazon か検証済みのプロバイダーが公開している (`amazon` エイリアスで指定)
    + `AND`
  + 非推奨 (非推奨になってからの最大日数が `0`)

### 制限
<a name="allowed-amis-json-configuration-limits"></a>

`ImageCriteria` には以下までを含めることができます:
+ 10 `ImageCriterion`

各 `ImageCriterion` には以下までを含めることができます:
+ `ImageProviders` の 200 個の値
+ `ImageNames` の 50 個の値 
+ `MarketplaceProductCodes` の 50 個の値 

**制限の例**

前述の [ImageCriteria の例](#allowed-amis-json-configuration-example) の使用:
+ 4 つの `ImageCriterion` があります。上限の 10 に達するまで、最大 6 個を追加できます。
+ 最初の `ImageCriterion` には、`MarketplaceProductCodes` に 1 つの値があります。この `ImageCriterion` には、上限の 50 に達するまで、最大 49 個を追加できます。
+ 2 番目の `ImageCriterion` には、`ImageProviders` に 2 つの値があります。この `ImageCriterion` には、上限の 200 に達するまで、最大 198 個を追加できます。
+ 3 番目の `ImageCriterion` には、`ImageNames` に 1 つの値があります。この `ImageCriterion` には、上限の 50 に達するまで、最大 49 個を追加できます。

### 許可されている操作
<a name="allowed-amis-operations"></a>

許可された AMI 機能には、イメージ条件を管理するための 3 つのオペレーション状態 (**有効**、**無効**、**監査モード**) があります。これにより、イメージ条件を有効または無効にしたり、必要に応じて確認したりできます。

**有効**

許可された AMI が有効になっている場合: 
+ `ImageCriteria` が適用されます。
+ 許可された AMI のみが EC2 コンソールとイメージを使用する API (イメージを使用する他のアクションを記述、コピー、保存、実行するなど) で検出できます。
+ インスタンスは、許可された AMI を使用してのみ起動できます。

**Disabled**

許可された AMI が無効になっている場合: 
+ `ImageCriteria` は適用されません。
+ AMI の検出可能性や使用に制限はありません。

**オーディオモード**

 監査モードの場合:
+ `ImageCriteria` は適用されますが、AMI の検出可能性や使用に制限はありません。
+ EC2 コンソールでは、AMI ごとに、**許可されたイメージ**フィールドには、許可された AMI が有効になっているときに、AMI を検出してアカウント内のユーザーが利用可能であるかを示す **[はい]** または **[いいえ]** が表示されます。
+ コマンドラインでは、`describe-image` オペレーションのレスポンスに `"ImageAllowed": true` または `"ImageAllowed": false` が含まれ、許可された AMI が有効になっている場合に、AMI が検出可能になり、アカウント内のユーザーが利用可能であるかを示します。
+ EC2 コンソールでは、許可された AMI が有効になっている場合に、アカウント内のユーザーが検出または使用できない AMI の横には **[許可されていません]** と表示されます。

## 許可された AMI を実装するためのベストプラクティス
<a name="best-practice-for-implementing-allowed-amis"></a>

許可された AMI、スムーズな移行を確保し、AWS 環境への潜在的な中断を最小限に抑えるために、これらのベストプラクティスを検討してください。

1. **監査モードを有効にする**

   まず、監査モードで許可された AMI を有効にします。この状態では、実際にアクセスを制限することなく、どの AMI が基準の影響を受けるかを確認し、リスクのない評価期間を提供できます。

1. **許可された AMI 基準を設定する**

   組織のセキュリティポリシー、コンプライアンス要件、運用ニーズに合った AMI プロバイダーを慎重に確立します。
**注記**  
Amazon ECS、Amazon EKS、AWS Lambda マネージドインスタンスなどの AWS マネージドサービスを使用する場合は、AWS が作成した AMI を許可するために `amazon` エイリアスを指定することが推奨されます。これらのサービスは、Amazon が公開した AMI に依存してインスタンスを起動します。  
AMI `CreationDateCondition` に制限を設定するときは注意が必要です。過度に制限された日付条件 (AMI は作成から 5 日未満でなければならないなど) を設定すると、AMI が、AWS か他のプロバイダーのいずれのものかにかかわらず、指定された期間内に更新されなかった場合にインスタンスの起動が失敗する可能性があります。  
コントロールと特異度を向上させるために、`ImageNames` と `ImageProviders` を組み合わせることが推奨されます。`ImageNames` のみを使用すると、AMI を一意に識別できない可能性があります。

1. **期待されるビジネスプロセスへの影響を確認する**

   コンソールまたは CLI を使用して、指定した基準を満たさない AMI で起動されたインスタンスを特定できます。この情報は、準拠した AMI を使用するように起動設定を更新する (起動テンプレートで別の AMI を指定するなど) か、これらの AMI を許可するように条件を調整するかどうかを決定するのに役立ちます。

   コンソール: [ec2-instance-launched-with-allowed-ami](https://docs.aws.amazon.com/config/latest/developerguide/ec2-instance-launched-with-allowed-ami.html) AWS Config ルールを使用し、実行中または停止中のインスタンスが、許可された AMI 基準を満たす AMI で起動されたかどうかを確認します。ルールは、許可された AMI 基準を AMI が満たしていない場合は **[NON\$1COMPLIANT]**、満たしている場合は **[COMPLIANT]** です。ルールは、許可された AMI 設定が **有効** または **監査モード** に設定されている場合にのみ機能します。

   CLI: [describe-instance-image-metadata](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instance-image-metadata.html) コマンドを実行し、レスポンスをフィルタリングして、指定した条件を満たさない AMI で起動されたインスタンスを特定します。

   コンソールと CLI での手順については、「[許可されていない AMI から起動したインスタンスを見つける](manage-settings-allowed-amis.md#identify-instances-with-allowed-AMIs)」を参照してください。

1. **許可された AMI を有効にする**

   基準が期待されるビジネスプロセスに悪影響を及ぼさないことを確認したら、許可された AMI を有効にします。

1. **インスタンスの起動をモニタリングする**

   Amazon EMR、Amazon ECR、Amazon EKS、AWS Elastic Beanstalk など、アプリケーションおよび使用する AWS マネージドサービス全体で AMI からのインスタンス起動を引き続きモニタリングします。予期しない問題がないか確認し、許可された AMI 基準に必要な調整を行います。

1. **新しい AMI のパイロット**

   現在の許可されている AMI 設定に準拠していないサードパーティ AMI をテストするために、AWS は次のアプローチを推奨します。
   + 別の AWS アカウント を使用する: ビジネスクリティカルなリソースにアクセスできないアカウントを作成します。このアカウントで許可された AMI 設定が有効になっていない、またはテストする AMI が明示的に許可されていることを確認し、テストできるようにします。
   + 別の AWS リージョン でテストする: サードパーティー AMI は使用できるが、許可された AMI 設定をまだ有効にしていないリージョンを使用します。

   こうすることで、新しいAMIのテスト中でも、ビジネスクリティカルなリソースの安全性を確保することができます。

## 必要な IAM 許可
<a name="iam-permissions-for-allowed-amis"></a>

許可された AMI 機能を使用するには、次の IAM アクセス許可が必要です:
+ `GetAllowedImagesSettings`
+ `EnableAllowedImagesSettings`
+ `DisableAllowedImagesSettings`
+ `ReplaceImageCriteriaInAllowedImagesSettings`

# 許可された AMI の設定を管理する
<a name="manage-settings-allowed-amis"></a>

許可された AMI の設定を管理できます。これらの設定は、アカウントごとに、リージョン別で行われます。

**Topics**
+ [許可されたAMIを有効にする](#enable-allowed-amis-criteria)
+ [許可された AMI 基準を設定する](#update-allowed-amis-criteria)
+ [許可されたAMIを無効にする](#disable-allowed-amis-criteria)
+ [許可された AMI 基準を取得する](#identify-allowed-amis-state-and-criteria)
+ [許可されている AMI を見つける](#identify-amis-that-meet-allowed-amis-criteria)
+ [許可されていない AMI から起動したインスタンスを見つける](#identify-instances-with-allowed-AMIs)

## 許可されたAMIを有効にする
<a name="enable-allowed-amis-criteria"></a>

許可された AMI を有効にし、その基準を指定することができます。監査モードから開始することをお勧めします。監査モードでは、その基準の影響を受ける AMI を、アクセスを実際に制限することなく確認できます。

------
#### [ Console ]

**許可されたAMIを有効にするには**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. ナビゲーションペインで、**ダッシュボード**を選択してください。

1. **[アカウント属性]** カードの **[設定]** で、**[許可されている AMI]** を選択します。

1. **[許可された AMI]** タブで、**[管理]** を選択します。

1. **[許可された AMI 設定]** で、**[監査モード]** または **[有効]** を選択します。監査モードで開始し、基準をテストした後に、このステップに戻って許可された AMI を有効にするのがお勧めです。

1. (オプション) **[AMI 基準]** には、JSON 形式の基準を入力します。

1. **[Update]** (更新) を選択してください。

------
#### [ AWS CLI ]

**許可されたAMIを有効にするには**  
[enable-allowed-images-settings](https://docs.aws.amazon.com/cli/latest/reference/ec2/enable-allowed-images-settings.html) コマンドを使用します。

```
aws ec2 enable-allowed-images-settings --allowed-images-settings-state enabled
```

代わりに監査モードを有効にする場合は、`enabled` ではなく `audit-mode` を指定します。

```
aws ec2 enable-allowed-images-settings --allowed-images-settings-state audit-mode
```

------
#### [ PowerShell ]

**許可されたAMIを有効にするには**  
[Enable-EC2AllowedImagesSetting](https://docs.aws.amazon.com/powershell/latest/reference/items/Enable-EC2AllowedImagesSetting.html) コマンドレットを使用します。

```
Enable-EC2AllowedImagesSetting -AllowedImagesSettingsState enabled
```

代わりに監査モードを有効にする場合は、`enabled` ではなく `audit-mode` を指定します。

```
Enable-EC2AllowedImagesSetting -AllowedImagesSettingsState audit-mode
```

------

## 許可された AMI 基準を設定する
<a name="update-allowed-amis-criteria"></a>

許可された AMI を有効にすると、許可された AMI 基準の設定または置き換えが可能になります。

正しい設定と有効な値については、「[許可された AMI の設定](ec2-allowed-amis.md#allowed-amis-json-configuration)」と「[許可された AMI のパラメータ](ec2-allowed-amis.md#allowed-amis-criteria)」を参照してください。

------
#### [ Console ]

**許可された AMI 基準を設定するには**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. ナビゲーションペインで、**ダッシュボード**を選択してください。

1. **[アカウント属性]** カードの **[設定]** で、**[許可されている AMI]** を選択します。

1. **[許可された AMI]** タブで、**[管理]** を選択します。

1. **[AMI 基準]** に、基準を JSON 形式で入力します。

1. **[Update]** (更新) を選択してください。

------
#### [ AWS CLI ]

**許可された AMI 基準を設定するには**  
[replace-image-criteria-in-allowed-images-settings](https://docs.aws.amazon.com/cli/latest/reference/ec2/replace-image-criteria-in-allowed-images-settings.html) コマンドを使用して、許可された AMI の条件を含む JSON ファイルを指定します。

```
aws ec2 replace-image-criteria-in-allowed-images-settings --cli-input-json file://file_name.json
```

------
#### [ PowerShell ]

**許可された AMI 基準を設定するには**  
[Set-EC2ImageCriteriaInAllowedImagesSetting](https://docs.aws.amazon.com/powershell/latest/reference/items/Set-EC2ImageCriteriaInAllowedImagesSetting.html) コマンドレットを使用して、許可された AMI の条件を含む JSON ファイルを指定します。

```
$imageCriteria = Get-Content -Path .\file_name.json | ConvertFrom-Json
Set-EC2ImageCriteriaInAllowedImagesSetting -ImageCriterion $imageCriteria
```

------

## 許可されたAMIを無効にする
<a name="disable-allowed-amis-criteria"></a>

許可された AMI は、次の手順で無効にすることができます。

------
#### [ Console ]

**許可されたAMIを無効にするには**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. ナビゲーションペインで、**ダッシュボード**を選択してください。

1. **[アカウント属性]** カードの **[設定]** で、**[許可されている AMI]** を選択します。

1. **[許可された AMI]** タブで、**[管理]** を選択します。

1. **許可された AMI設定で**、**無効**を選択してください。

1. **[Update]** (更新) を選択してください。

------
#### [ AWS CLI ]

**許可されたAMIを無効にするには**  
[disable-allowed-images-settings](https://docs.aws.amazon.com/cli/latest/reference/ec2/disable-allowed-images-settings.html) コマンドを使用します。

```
aws ec2 disable-allowed-images-settings
```

------
#### [ PowerShell ]

**許可されたAMIを無効にするには**  
[Disable-EC2AllowedImagesSetting](https://docs.aws.amazon.com/powershell/latest/reference/items/Disable-EC2AllowedImagesSetting.html) コマンドレットを使用します。

```
Disable-EC2AllowedImagesSetting
```

------

## 許可された AMI 基準を取得する
<a name="identify-allowed-amis-state-and-criteria"></a>

許可された AMI 設定と、許可された AMI 基準の現在の状態を取得できます。

------
#### [ Console ]

**許可された AMI の状態と基準を取得するには**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. ナビゲーションペインで、**ダッシュボード**を選択してください。

1. **[アカウント属性]** カードの **[設定]** で、**[許可されている AMI]** を選択します。

1. **[許可された AMI]** タブでは、**[許可された AMI 設定]** が **[有効]**、**[無効]**、**[監査モード]** のいずれかに設定されています。

1. 許可された AMI の状態が **[有効]** または **[監査モード]** である場合、**[AMI 基準]** に、AMI 基準が JSON 形式で表示されます。

------
#### [ AWS CLI ]

**許可された AMI の状態と基準を取得するには**  
[get-allowed-images-settings](https://docs.aws.amazon.com/cli/latest/reference/ec2/get-allowed-images-settings.html) コマンドを使用します。

```
aws ec2 get-allowed-images-settings
```

次の出力例では、状態は `audit-mode` で、イメージの条件がアカウントで設定されています。

```
{
    "State": "audit-mode",
    "ImageCriteria": [
        {
            "MarketplaceProductCodes": [
                "abcdefg1234567890"
            ]
        },
        {
            "ImageProviders": [
                "123456789012",
                "123456789013"
            ],
            "CreationDateCondition": {
                "MaximumDaysSinceCreated": 300
            }
        },
        {
            "ImageProviders": [
                "123456789014"
            ],
            "ImageNames": [
                "golden-ami-*"
            ]
        },
        {
            "ImageProviders": [
                "amazon"
            ],
            "DeprecationTimeCondition": {
                "MaximumDaysSinceDeprecated": 0
            }
        }
    ],
    "ManagedBy": "account"
}
```

------
#### [ PowerShell ]

**許可された AMI の状態と基準を取得するには**  
[Get-EC2AllowedImagesSetting](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2AllowedImagesSetting.html) コマンドレットを使用します。

```
Get-EC2AllowedImagesSetting | Select-Object `
    State, `
    ManagedBy, `
    @{Name='ImageProviders'; Expression={($_.ImageCriteria.ImageProviders)}}, `
    @{Name='MarketplaceProductCodes'; Expression={($_.ImageCriteria.MarketplaceProductCodes)}}, `
    @{Name='ImageNames'; Expression={($_.ImageCriteria.ImageNames)}}, `
    @{Name='MaximumDaysSinceCreated'; Expression={($_.ImageCriteria.CreationDateCondition.MaximumDaysSinceCreated)}}, `
    @{Name='MaximumDaysSinceDeprecated'; Expression={($_.ImageCriteria.DeprecationTimeCondition.MaximumDaysSinceDeprecated)}}
```

次の出力例では、状態は `audit-mode` で、イメージの条件がアカウントで設定されています。

```
State      : audit-mode
ManagedBy  : account
ImageProviders            : {123456789012, 123456789013, 123456789014, amazon}
MarketplaceProductCodes   : {abcdefg1234567890}
ImageNames                : {golden-ami-*}
MaximumDaysSinceCreated  : 300
MaximumDaysSinceDeprecated: 0
```

------

## 許可されている AMI を見つける
<a name="identify-amis-that-meet-allowed-amis-criteria"></a>

現在の許可された AMI 基準で許可されている、または許可されていない AMI を見つけることができます。

**注記**  
許可された AMI は監査モードになっている必要があります。

------
#### [ Console ]

**AMI が許可された AMI 基準を満たしているかどうかを確認するには**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. ナビゲーションペインで **[AMI]** を選択してください。

1. AMI を選択します。

1. **詳細**タブ (チェックボックスを選択した場合) または概要エリア (AMI ID を選択した場合) で**、許可されたイメージ**フィールドを見つけます。
   + **[はい]** – AMI は許可された AMI 基準を満たしています。この AMI は、ユーザーが許可された AMI を有効にした後に、そのユーザーのアカウントに含まれるユーザーが使用できます。
   + **[いいえ]** – AMI は許可された AMI 基準を満たしていません。

1. ナビゲーションペインで **[AMI カタログ]** を選択してください。

   未 **許可** とマークされた AMI は、許可された AMI の基準を満たしていない AMI を示します。許可された AMI が有効になっている場合、この AMI はアカウント内のユーザーには表示または使用できなくなります。

------
#### [ AWS CLI ]

**AMI が許可された AMI 基準を満たしているかどうかを確認するには**  
[describe-images](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) コマンドを使用します。

```
aws ec2 describe-images \
    --image-id ami-0abcdef1234567890 \
    --query Images[].ImageAllowed \
    --output text
```

出力例を次に示します。

```
True
```

**許可された AMI 基準を満たす AMI を見つけるには**  
[describe-images](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) コマンドを使用します。

```
aws ec2 describe-images \
    --filters "Name=image-allowed,Values=true" \
    --max-items 10 \
    --query Images[].ImageId
```

出力例を次に示します。

```
ami-000eaaa8be2fd162a
ami-000f82db25e50de8e
ami-000fc21eb34c7a9a6
ami-0010b876f1287d7be
ami-0010b929226fe8eba
ami-0010957836340aead
ami-00112c992a47ba871
ami-00111759e194abcc1
ami-001112565ffcafa5e
ami-0011e45aaee9fba88
```

------
#### [ PowerShell ]

**AMI が許可された AMI 基準を満たしているかどうかを確認するには**  
[Get-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Image.html) コマンドレットを使用します。

```
(Get-EC2Image -ImageId ami-0abcdef1234567890).ImageAllowed
```

出力例を次に示します。

```
True
```

**許可された AMI 基準を満たす AMI を見つけるには**  
[Get-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Image.html) コマンドレットを使用します。

```
Get-EC2Image `
    -Filter @{Name="image-allows";Values="true"} `
    -MaxResult 10 | `
    Select ImageId
```

出力例を次に示します。

```
ami-000eaaa8be2fd162a
ami-000f82db25e50de8e
ami-000fc21eb34c7a9a6
ami-0010b876f1287d7be
ami-0010b929226fe8eba
ami-0010957836340aead
ami-00112c992a47ba871
ami-00111759e194abcc1
ami-001112565ffcafa5e
ami-0011e45aaee9fba88
```

------

## 許可されていない AMI から起動したインスタンスを見つける
<a name="identify-instances-with-allowed-AMIs"></a>

許可された AMI 基準を満たしていない AMI を使って起動したインスタンスを、特定することができます。

------
#### [ Console ]

**インスタンスが、許可されていない AMI を使って起動したかどうかを確認するには**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. ナビゲーションペインで、[**インスタンス**] を選択してください。

1. インスタンスを選択します。

1. **[詳細]** タブの **[インスタンスの詳細]** で、**[許可されたイメージ]** 見つけます。
   + **はい** – AMI は許可された AMI 基準を満たしています。
   + **いいえ** – AMI は許可された AMI 基準を満たしていません。

------
#### [ AWS CLI ]

**許可されていない AMI を使って起動したインスタンスを見つけるには**  
[describe-instance-image-metadata](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instance-image-metadata.html) コマンドを `image-allowed` フィルターと共に使用します。

```
aws ec2 describe-instance-image-metadata \
    --filters "Name=image-allowed,Values=false" \
    --query "InstanceImageMetadata[*].[InstanceId,ImageMetadata.ImageId]" \
    --output table
```

出力例を次に示します。

```
--------------------------------------------------
|          DescribeInstanceImageMetadata         |
+----------------------+-------------------------+
|  i-08fd74f3f1595fdbd |  ami-09245d5773578a1d6  |
|  i-0b1bf24fd4f297ab9 |  ami-07cccf2bd80ed467f  |
|  i-026a2eb590b4f7234 |  ami-0c0ec0a3a3a4c34c0  |
|  i-006a6a4e8870c828f |  ami-0a70b9d193ae8a799  |
|  i-0781e91cfeca3179d |  ami-00c257e12d6828491  |
|  i-02b631e2a6ae7c2d9 |  ami-0bfddf4206f1fa7b9  |
+----------------------+-------------------------+
```

------
#### [ PowerShell ]

**許可されていない AMI を使って起動したインスタンスを見つけるには**  
[Get-EC2InstanceImageMetadata](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2InstanceImageMetadata.html) コマンドレットを使用します。

```
Get-EC2InstanceImageMetadata `
    -Filter @{Name="image-allowed";Values="false"} | `
    Select InstanceId, @{Name='ImageId'; Expression={($_.ImageMetadata.ImageId)}}
```

出力例を次に示します。

```
InstanceId          ImageId
----------          -------
i-08fd74f3f1595fdbd ami-09245d5773578a1d6
i-0b1bf24fd4f297ab9 ami-07cccf2bd80ed467f
i-026a2eb590b4f7234 ami-0c0ec0a3a3a4c34c0
i-006a6a4e8870c828f ami-0a70b9d193ae8a799
i-0781e91cfeca3179d ami-00c257e12d6828491
i-02b631e2a6ae7c2d9 ami-0bfddf4206f1fa7b9
```

------
#### [ AWS Config ]

**ec2-instance-launched-with-allowed-ami** AWS Config ルールを追加し、それを要件に合わせて設定してから、それを使用してインスタンスを評価します。

詳細については、「*AWS Config デベロッパーガイド*」の「[Adding AWS Config Rules](https://docs.aws.amazon.com/config/latest/developerguide/evaluate-config_add-rules.html)」および「[ec2-instance-launched-with-allowed-ami](https://docs.aws.amazon.com/config/latest/developerguide/ec2-instance-launched-with-allowed-ami.html)」を参照してください。

------

# Amazon EC2 で使用するために AMI を公開する
<a name="sharingamis-intro"></a>

AMI をすべての AWS アカウント と共有することで公開できます。

AMI がパブリックに共有されないようにしたい場合は、*AMI のパブリックアクセスをブロックできます*。これにより、AMI を公開しようとするあらゆる試みがブロックされ、不正アクセスや AMI データの悪用を防ぐのに役立ちます。パブリックアクセスのブロックを有効にしても、既に公開されている AMI には影響しないことに注意してください。AMI は引き続き公開されています。詳細については「[AMI のパブリックアクセスのブロックについて](block-public-access-to-amis.md)」を参照してください。

特定のアカウントのみが AMI を使用してインスタンスを起動可能にする方法については、「[特定の AWS アカウントとの AMI の共有](sharingamis-explicit.md)」を参照してください。

**Topics**
+ [考慮事項](#considerations-for-sharing-public-AMIs)
+ [すべての AWS アカウントで AMI を共有 (パブリックに共有)](#share-an-ami-publicly)

## 考慮事項
<a name="considerations-for-sharing-public-AMIs"></a>

AMI を公開する前に、以下の点を検討してください。
+ **所有権** — AMI を公開するには、お客様の AWS アカウント がその AMI を所有している必要があります。
+ **リージョン** – AMI はリージョンのリソースです。共有した AMI は、共有したリージョンでのみ使用できます。AMI を他のリージョンで利用できるようにするには、AMI をそのリージョンにコピーし、共有します。詳細については「[Amazon EC2 AMI のコピー](CopyingAMIs.md)」を参照してください。
+ **パブリックアクセスをブロック** – AMI をパブリックに共有するには、AMI をパブリックに共有する各リージョンで [AMI のパブリックアクセスのブロック](block-public-access-to-amis.md)を無効にする必要があります。AMI をパブリックに共有した後で、AMI のパブリックアクセスのブロックを再度有効にして、AMI がそれ以上パブリックに共有されないようにできます。
+ **公開できない AMI** - 次のコンポーネントが含まれる AMI は公開できません (ただし、[AMI を特定の AWS アカウント と共有する](sharingamis-explicit.md)ことはできます)。
  + 暗号化されたボリューム
  + 暗号化されたボリュームのスナップショット
  + 製品コード
+ **機密データが公開されないようにする** - AMI を共有するときに機密データが公開されないようにするには、「[共有 Linux AMI の作成に関する推奨事項](building-shared-amis.md)」のセキュリティ考慮事項を読み、推奨アクションに従います。
+ **使用** — AMI を共有する場合、ユーザーは AMI からのインスタンスのみを起動できます。AMI はそれを削除、共有、または変更することはできません。ただし、AMI を使用してインスタンスを起動した後は、起動したインスタンスから AMI を作成できます。
+ **自動非推奨** – すべてのパブリック AMI を非推奨にする日はデフォルトで AMI 作成日の 2 年後になっています。非推奨にする日は 2 年より前の日付に設定できます。非推奨にする日を取り消す場合や、非推奨にする日をもっと先の日付に変える場合は、AMI を[特定の AWS アカウント とのみ共有する](sharingamis-explicit.md)ようにして、AMI を非公開にする必要があります。
+ **旧型の AMI の削除** — パブリック AMI の廃止日が過ぎ、その AMI で新しいインスタンスが 6 か月以上起動されなかった場合、AWS はそのパブリック共有プロパティを削除し、古くなった AMI がパブリック AMI リストに表示されないようにします。
+ **請求** — 他の AWS アカウント がお客様の AMI を使用してインスタンスを起動しても、お客様には請求されません。AMI を使用してインスタンスを起動するアカウントには、起動するインスタンスに対して請求されます。

## すべての AWS アカウントで AMI を共有 (パブリックに共有)
<a name="share-an-ami-publicly"></a>

AMI を公開すると、コンソールの **[コミュニティ AMI]** で使用できるようになります。これには、EC2 コンソールの左側のナビゲーターにある **[AMI カタログ]** から、またはコンソールを使用してインスタンスを起動するときにアクセスできます。AMI は、公開してから [**Community AMI**] に表示されるまでに、しばらく時間がかかることもあります。

------
#### [ Console ]

**[To make an AMI public]**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)を開いてください。

1. ナビゲーションペインで **[AMI]** を選択してください。

1. リストから AMI を選択し、**[アクション]** から **[AMI 権限の編集]** を選択してください。

1. **[AMI の可用性]** で、**[パブリック]** を選択してください。

1. [**変更の保存**] をクリックしてください。

------
#### [ AWS CLI ]

各 AMI には、所有者以外でその AMI を使用してインスタンスを起動できる AWS アカウント を制御する `launchPermission` プロパティがあります。AMI の `launchPermission` プロパティを変更することで、AMI を公開したり (この場合、すべての AWS アカウント に起動許可が与えられます) 、指定した AWS アカウント とのみ AMI を共有したりすることができます。

AMI の起動許可を持っているアカウントの一覧に対してアカウント ID の追加または削除ができます。AMI を公開するには、`all` グループを指定します。パブリック起動許可と明示的起動許可の両方を指定できます。

**[To make an AMI public]**

1. 次のように、[https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-image-attribute.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-image-attribute.html) コマンドを使用して、指定した AMI の `launchPermission` リストに `all` グループを追加します。

   ```
   aws ec2 modify-image-attribute \
       --image-id ami-0abcdef1234567890 \
       --launch-permission "Add=[{Group=all}]"
   ```

1. AMI の起動許可を確認するには、[https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-image-attribute.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-image-attribute.html) コマンドを使用します。

   ```
   aws ec2 describe-image-attribute \
       --image-id ami-0abcdef1234567890 \
       --attribute launchPermission
   ```

1. (オプション) AMI をプライベートに戻すには、その起動許可から `all` グループを削除します。AMI の所有者には常に起動許可が与えられるため、このコマンドの影響を受けないことにご注意ください。

   ```
   aws ec2 modify-image-attribute \
       --image-id ami-0abcdef1234567890 \
       --launch-permission "Remove=[{Group=all}]"
   ```

------
#### [ PowerShell ]

各 AMI には、所有者以外でその AMI を使用してインスタンスを起動できる AWS アカウント を制御する `launchPermission` プロパティがあります。AMI の `launchPermission` プロパティを変更することで、AMI を公開したり (この場合、すべての AWS アカウント に起動許可が与えられます) 、指定した AWS アカウント とのみ AMI を共有したりすることができます。

AMI の起動許可を持っているアカウントの一覧に対してアカウント ID の追加または削除ができます。AMI を公開するには、`all` グループを指定します。パブリック起動許可と明示的起動許可の両方を指定できます。

**[To make an AMI public]**

1. 次のように、[https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2ImageAttribute.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2ImageAttribute.html) コマンドを使用して、指定した AMI の `launchPermission` リストに `all` グループを追加します。

   ```
   Edit-EC2ImageAttribute `
       -ImageId ami-0abcdef1234567890 `
       -Attribute launchPermission `
       -OperationType add `
       -UserGroup all
   ```

1. AMI の起動許可を確認するには、次の [https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2ImageAttribute.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2ImageAttribute.html) コマンドを使用します。

   ```
   Get-EC2ImageAttribute `
       -ImageId ami-0abcdef1234567890 `
       -Attribute launchPermission
   ```

1. (オプション) AMI をプライベートに戻すには、その起動許可から `all` グループを削除します。AMI の所有者には常に起動許可が与えられるため、このコマンドの影響を受けないことにご注意ください。

   ```
   Edit-EC2ImageAttribute `
       -ImageId ami-0abcdef1234567890 `
       -Attribute launchPermission `
       -OperationType remove `
       -UserGroup all
   ```

------

# AMI のパブリックアクセスのブロックについて
<a name="block-public-access-to-amis"></a>

AMI がパブリックに共有されないようにするには、AMI *のパブリックアクセスのブロ* ックを有効にします。

パブリックアクセスのブロックを有効にすると、AMI を公開しようとする試みは自動的にブロックされます。ただし、既にパブリック AMI がある場合は、公開されたままになります。

AMI をパブリックに共有するには、パブリックアクセスのブロックを無効にする必要があります。共有が完了したら、AMI が意図せずパブリックに共有されないように、パブリックアクセスのブロックを再度有効にするのがベストプラクティスです。

**注記**  
この設定は、アカウントレベルで直接、または宣言ポリシーを使用して設定されます。AMI のパブリック共有を防止する各 AWS リージョンで設定する必要があります。宣言型ポリシーを使用すると、複数のリージョンと複数のアカウントで同時に設定を適用できます。宣言ポリシーが使用されている場合、アカウント内で直接設定を変更することはできません。このトピックでは、アカウント内で設定を直接設定する方法について説明します。宣言ポリシーの使用の詳細については、「*AWS Organizations ユーザーガイド*」‭の‬「[宣言ポリシー](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_declarative.html)」‬を参照してください。

管理者ユーザーのみが AMI のパブリックアクセスのブロックを有効または無効にできるように、IAM アクセス許可を管理者ユーザーに制限できます。

**Topics**
+ [デフォルト設定](#block-public-access-to-amis-default-settings)
+ [AMI のパブリックアクセスのブロック設定を管理する](manage-block-public-access-for-amis.md)

## デフォルト設定
<a name="block-public-access-to-amis-default-settings"></a>

**[AMI のパブリックアクセスをブロック]** 設定は、アカウントが新規か既存か、およびパブリック AMI の有無に応じて、デフォルトで有効または無効になります。次のテーブルは、デフォルト設定の一覧です。


| AWS アカウント | AMI のデフォルト設定ではパブリックアクセスをブロックします。 | 
| --- | --- | 
| 新しいアカウント | 有効 | 
|  パブリック AMI のない既存のアカウント ¹  | 有効 | 
|  1 つ以上のパブリック AMI がある既存のアカウント  | Disabled | 

¹ 2023 年 7 月 15 日以降のアカウントに 1 つ以上のパブリック AMI があった場合、その後すべての AMI を非公開にしたとしても、**[AMI のパブリックアクセスをブロック]** はデフォルトで無効になっています。

# AMI のパブリックアクセスのブロック設定を管理する
<a name="manage-block-public-access-for-amis"></a>

AMI を公開して共有できるかどうかを制御する AMI 用のパブリックアクセスのブロック設定を管理できます。Amazon EC2 コンソールまたは AWS CLI を使用して、AMI の現在のパブリックアクセスのブロック状態を有効化、無効化、または表示できます。

## AMI のパブリックアクセスのブロック状態を表示する
<a name="get-block-public-access-state-for-amis"></a>

AMI のパブリックアクセスのブロック状態を表示すると、AMI のパブリック共有がアカウントでブロックされているかどうかを確認できます。AMI のパブリック共有がブロックされているかどうかを確認するには、それぞれの AWS リージョン で状態を確認する必要があります。

**必要なアクセス許可**  
AMI の現在のパブリックアクセスのブロック設定を取得するには、`GetImageBlockPublicAccessState` IAM アクセス許可が必要です。

------
#### [ Console ]

**指定したリージョンで AMI のパブリックアクセスのブロック状態を表示するには**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)を開いてください。

1. 画面上部のナビゲーションバーで、AMI のパブリックアクセスのブロック状態を表示するリージョンを選択してください。

1. ナビゲーションペインで、**ダッシュボード**を選択してください。

1. **[アカウント属性]** カードの **[設定]** で、**[データ保護とセキュリティ]** を選択します。

1. **[AMI のパブリックアクセスをブロック]** で **[パブリックアクセス]** フィールドを確認します。値は **[新しいパブリック共有をブロック中]** または **[新しいパブリック共有が可能]** です。

------
#### [ AWS CLI ]

**AMI のパブリックアクセスのブロック状態を取得するには**  
[get-image-block-public-access-state](https://docs.aws.amazon.com/cli/latest/reference/ec2/get-image-block-public-access-state.html) コマンドを使用します。この値は `block-new-sharing` または `unblocked` のどちらかです。

**例: 特定のリージョンの場合**

```
aws ec2 get-image-block-public-access-state --region us-east-1
```

`ManagedBy` フィールドは、設定を構成したエンティティを示します。この例では、`account` は設定がアカウントで直接設定されたことを示します。`declarative-policy` という値は、その設定が宣言的ポリシーによって構成されたことを意味します。詳細については「*AWS OrganizationsIAM ユーザーガイド*」の「[ マネージドポリシー](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_declarative.html)」を参照してください。

```
{
    "ImageBlockPublicAccessState": "block-new-sharing",
    "ManagedBy": "account"
}
```

**例: アカウントの全リージョンの場合**

```
echo -e "Region   \t Public Access State" ; \
echo -e "-------------- \t ----------------------" ; \
for region in $(
    aws ec2 describe-regions \
        --region us-east-1 \
        --query "Regions[*].[RegionName]" \
        --output text
    ); 
    do (output=$(
        aws ec2 get-image-block-public-access-state \
            --region $region \
            --output text)
        echo -e "$region \t $output" 
    );
done
```

出力例を次に示します。

```
Region           Public Access State
--------------   ----------------------
ap-south-1       block-new-sharing
eu-north-1       unblocked
eu-west-3        block-new-sharing
...
```

------
#### [ PowerShell ]

**AMI のパブリックアクセスのブロック状態を取得するには**  
[Get-EC2ImageBlockPublicAccessState](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2ImageBlockPublicAccessState.html) コマンドレットを使用します。この値は `block-new-sharing` または `unblocked` のどちらかです。

**例: 特定のリージョンの場合**

```
Get-EC2ImageBlockPublicAccessState -Region us-east-1
```

出力例を次に示します。

```
block-new-sharing
```

**例: アカウントの全リージョンの場合**

```
(Get-EC2Region).RegionName | `
    ForEach-Object {
        [PSCustomObject]@{
            Region   = $_
            PublicAccessState = (Get-EC2ImageBlockPublicAccessState -Region $_)
        }
} | `
Format-Table -AutoSize
```

出力例を次に示します。

```
Region         PublicAccessState
------         -----------------
ap-south-1     block-new-sharing
eu-north-1     block-new-sharing
eu-west-3      block-new-sharing
...
```

------

## AMI のパブリックアクセスのブロックを有効にする
<a name="enable-block-public-access-for-amis"></a>

AMI がパブリックに共有されないようにするには、AMI のパブリックアクセスのブロックを有効にします。AMI がパブリックに共有されないようにする AWS リージョン ごとに、AMI のパブリックアクセスのブロックを有効にする必要があります。既にパブリック AMI がある場合は、引き続き公開されます。

**必要なアクセス許可**  
AMI のパブリックアクセスのブロック設定を有効にするには、`EnableImageBlockPublicAccess` IAM アクセス許可が必要です。

**考慮事項**
+ この設定を行うには、最大 10 分かかる場合があります。この間、パブリックアクセス状態を記述すると、レスポンスは `unblocked` になります。設定が完了すると、レスポンスは `block-new-sharing` になります。

------
#### [ Console ]

**指定したリージョンで AMI のパブリックアクセスのブロックを有効にするには**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)を開いてください。

1. 画面上部のナビゲーションバーで、AMI のパブリックアクセスをブロックするリージョンを選択してください。

1. ナビゲーションペインで、**ダッシュボード**を選択してください。

1. **[アカウント属性]** カードの **[設定]** で、**[データ保護とセキュリティ]** を選択します。

1. **[AMI のパブリックアクセスをブロック]** で **[管理]** を選択してください。

1. **[新しいパブリック共有をブロック]** のチェックボックスをオンにしたら、**[更新]** を選択してください。

------
#### [ AWS CLI ]

**AMI のパブリックアクセスのブロックを有効にするには**  
[enable-image-block-public-access](https://docs.aws.amazon.com/cli/latest/reference/ec2/enable-image-block-public-access.html) コマンドを使用します。

**例: 特定のリージョンの場合**

```
aws ec2 enable-image-block-public-access \
--region us-east-1 \
--image-block-public-access-state block-new-sharing
```

出力例を次に示します。

```
{ 
    "ImageBlockPublicAccessState": "block-new-sharing"
}
```

**例: アカウントの全リージョンの場合**

```
echo -e "Region   \t Public Access State" ; \
echo -e "-------------- \t ----------------------" ; \
for region in $(
    aws ec2 describe-regions \
        --region us-east-1 \
        --query "Regions[*].[RegionName]" \
        --output text
    ); 
    do (output=$(
        aws ec2 enable-image-block-public-access \
            --region $region \
            --image-block-public-access-state block-new-sharing \
            --output text)
        echo -e "$region \t $output" 
    );
done
```

出力例を次に示します。

```
Region           Public Access State
--------------   ----------------------
ap-south-1       block-new-sharing
eu-north-1       block-new-sharing
eu-west-3        block-new-sharing
...
```

------
#### [ PowerShell ]

**AMI のパブリックアクセスのブロックを有効にするには**  
[Enable-EC2ImageBlockPublicAccess](https://docs.aws.amazon.com/powershell/latest/reference/items/Enable-EC2ImageBlockPublicAccess.html) コマンドを使用します。

**例: 特定のリージョンの場合**

```
Enable-EC2ImageBlockPublicAccess `
    -Region us-east-1 `
    -ImageBlockPublicAccessState block-new-sharing
```

出力例を次に示します。

```
Value
-----
block-new-sharing
```

**例: アカウントの全リージョンの場合**

```
(Get-EC2Region).RegionName | `
    ForEach-Object {
    [PSCustomObject]@{
        Region            = $_
        PublicAccessState = (
        Enable-EC2ImageBlockPublicAccess `
         -Region $_ `
         -ImageBlockPublicAccessState block-new-sharing)
    }
} | `
Format-Table -AutoSize
```

出力例を次に示します。

```
Region         PublicAccessState
------         -----------------
ap-south-1     block-new-sharing
eu-north-1     block-new-sharing
eu-west-3      block-new-sharing
...
```

------

## AMI のパブリックアクセスのブロックを無効にする
<a name="disable-block-public-access-for-amis"></a>

アカウント内のユーザーが AMI をパブリックに共有できるようにするには、アカウントレベルでパブリックアクセスのブロックを無効にします。AMI がパブリックに共有できるようにする AWS リージョン ごとに、AMI のパブリックアクセスのブロックを無効にする必要があります。

**必要なアクセス許可**  
AMI のパブリックアクセスのブロック設定を無効にするには、`DisableImageBlockPublicAccess` IAM アクセス許可が必要です。

**考慮事項**
+ この設定を行うには、最大 10 分かかる場合があります。この間、パブリックアクセス状態を記述すると、レスポンスは `block-new-sharing` になります。設定が完了すると、レスポンスは `unblocked` になります。

------
#### [ Console ]

**指定したリージョンで AMI のパブリックアクセスのブロックを無効にするには**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)を開いてください。

1. 画面上部のナビゲーションバーで、AMI のパブリックアクセスのブロックを無効にするリージョンを選択してください。

1. ナビゲーションペインで、**ダッシュボード**を選択してください。

1. **[アカウント属性]** カードの **[設定]** で、**[データ保護とセキュリティ]** を選択します。

1. **[AMI のパブリックアクセスをブロック]** で **[管理]** を選択してください。

1. **[新しいパブリック共有のブロック]** のチェックボックスをオフにしたら、**[更新]** を選択してください。

1. 確認を求められたら、「**confirm**」と入力してから、**[パブリック共有の許可]** を選択してください。

------
#### [ AWS CLI ]

**AMI のパブリックアクセスのブロックを無効にするには**  
[disable-image-block-public-access](https://docs.aws.amazon.com/cli/latest/reference/ec2/disable-image-block-public-access.html) コマンドを使用します。

**例: 特定のリージョンの場合**

```
aws ec2 disable-image-block-public-access --region us-east-1
```

出力例を次に示します。

```
{
   "ImageBlockPublicAccessState": "unblocked"
}
```

**例: アカウントの全リージョンの場合**

```
echo -e "Region   \t Public Access State" ; \
echo -e "-------------- \t ----------------------" ; \
for region in $(
    aws ec2 describe-regions \
        --region us-east-1 \
        --query "Regions[*].[RegionName]" \
        --output text
    ); 
    do (output=$(
        aws ec2 disable-image-block-public-access \
            --region $region \
            --output text)
        echo -e "$region \t $output" 
    );
done
```

出力例を次に示します。

```
Region           Public Access State
--------------   ----------------------
ap-south-1       unblocked
eu-north-1       unblocked
eu-west-3        unblocked
...
```

------
#### [ PowerShell ]

**AMI のパブリックアクセスのブロックを無効にするには**  
[Disable-EC2ImageBlockPublicAccess](https://docs.aws.amazon.com/powershell/latest/reference/items/Disable-EC2ImageBlockPublicAccess.html) コマンドレットを使用します。

**例: 特定のリージョンの場合**

```
Disable-EC2ImageBlockPublicAccess -Region us-east-1
```

出力例を次に示します。

```
Value
-----
unblocked
```

**例: アカウントの全リージョンの場合**

```
(Get-EC2Region).RegionName | `
    ForEach-Object {
    [PSCustomObject]@{
        Region            = $_
        PublicAccessState = (Disable-EC2ImageBlockPublicAccess -Region $_)
    }
} | `
Format-Table -AutoSize
```

出力例を次に示します。

```
Region         PublicAccessState
------         -----------------
ap-south-1     unblocked
eu-north-1     unblocked
eu-west-3      unblocked
...
```

------

# 組織および組織単位での共有 AMI の使用
<a name="share-amis-with-organizations-and-OUs"></a>

 [AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_integrate_services_list.html) は、作成し一元管理する組織に、複数の AWS アカウント を統合するためのアカウント管理サービスです。AMI は、[特定のアカウントと共有する](sharingamis-explicit.md)だけでなく、組織または組織単位 (OU) と共有することもできます。

組織とは、AWS アカウント を統合して一元管理するために作成するエンティティのことです。アカウントを階層ツリーのような構造に編成して、[ルート](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html#root)を最上部に置いて[組織単位](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html#organizationalunit)をその組織ルート下にネストすることができます。各アカウントは、ルートに直接追加するか、階層内の OU のいずれかに配置することができます。詳細については、「AWS Organizations ユーザーガイド**」の[「AWS 組織の用語およびコンセプト](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html)」を参照してください。

AMI を組織または OU と共有すると、すべての子アカウントが AMI にアクセスできます。例えば、次の図では、AMI は最上位レベルの OU と共有されています (**1** の数字の矢印で示されます)。その最上位レベルの OU の下にネストされているすべての OU やアカウント (**2** の数字の点線で示したもの) も AMI にアクセスできます。点線の外側にある組織や OU (数字の** 3 **で示されている) のアカウントは、AMI が共有されている OU の子供ではないため、AMI へのアクセス権はありません。

![\[AMI は OU と共有され、すべての子 OU とアカウントが AMI にアクセスできます。\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/images/ami-share-with-orgs-and-ous.png)


**Topics**
+ [考慮事項](#considerations-org-ou)
+ [組織または組織単位の ARN を取得する](get-org-ou-ARN.md)
+ [組織と OU に KMS キーの使用を許可する](allow-org-ou-to-use-key.md)
+ [組織または OU の AMI 共有を管理する](share-amis-org-ou-manage.md)

## 考慮事項
<a name="considerations-org-ou"></a>

特定の組織または組織単位で AMI を共有する場合は、以下について検討してください。
+ **所有権** — AMI を共有するには、お客様の AWS アカウント がその AMI を所有している必要があります。
+ **共有制限** — AMI の所有者は、メンバーではない組織や OU を含め、任意の組織または OU と AMI を共有できます。

  リージョン内で AMI を共有できるエンティティの最大数については、「[Amazon EC2 Service Quotas](https://docs.aws.amazon.com//general/latest/gr/ec2-service.html#limits_ec2)」をご覧ください。
+ **タグ** - ユーザー定義タグ (AMI にアタッチするタグ) は共有できません。AMI を共有する場合、ユーザー定義タグは AMI が共有されている組織または OU のどの AWS アカウント にも使用できません。
+ **ARN 形式** — コマンドで組織または OU を指定する場合は、正しい ARN 形式を必ず使用してください。ID のみを指定するとエラーになります。例えば、`o-123example` や `ou-1234-5example` を指定するとエラーになります。

  正しい ARN 形式:
  + 組織の ARN: `arn:aws:organizations::111122223333:organization/organization-id`
  + OU ARN: `arn:aws:organizations::111122223333:ou/organization-id/ou-id`

  コードの説明は以下のとおりです。
  + *`111122223333`* は、管理アカウントの 12 桁アカウント ID の例です。管理アカウント番号がわからない場合は、管理アカウント番号を含む ARN を取得するための組織または組織単位を記述できます。詳細については、[組織または組織単位の ARN を取得する](get-org-ou-ARN.md) を参照してください。
  + *`organization-id`* は組織 ID であり、例えば、`o-123example` となります。
  + *`ou-id`* は組織単位 ID であり、例えば、`ou-1234-5example` となります。

  ARN の形式の詳細については、「*IAM ユーザーガイド*」の「[Amazon リソースネーム (ARN)](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html)」を参照してください。
+ **暗号化とキー** — 暗号化されていないスナップショットと暗号化されたスナップショットによってバックアップされた AMI を共有できます。
  + 暗号化されたスナップショットは、カスタマー管理された型キーを使用して暗号化する必要があります。デフォルトの AWS 管理キーで暗号化されたスナップショットでバックアップされた AMI を共有することはできません。
  + 暗号化されたスナップショットによってバックアップされた AMI を共有する場合、スナップショットの暗号化に使用されたカスタマー管理されたキーの使用を組織または OU に許可する必要があります。詳細については、[組織と OU に KMS キーの使用を許可する](allow-org-ou-to-use-key.md) を参照してください。
+ **リージョン** – AMI はリージョンのリソースです。共有した AMI は、共有したリージョンでのみ使用できます。AMI を他のリージョンで利用できるようにするには、AMI をそのリージョンにコピーし、共有します。詳細については、[Amazon EC2 AMI のコピー](CopyingAMIs.md) を参照してください。
+ **使用** — AMI を共有する場合、ユーザーは AMI からのインスタンスのみを起動できます。AMI はそれを削除、共有、または変更することはできません。ただし、AMI を使用してインスタンスを起動した後は、起動したインスタンスから AMI を作成できます。
+ **請求** — 他の AWS アカウント がお客様の AMI を使用してインスタンスを起動しても、お客様には請求されません。AMI を使用してインスタンスを起動するアカウントには、起動するインスタンスに対して請求されます。

# 組織または組織単位の ARN を取得する
<a name="get-org-ou-ARN"></a>

組織と組織単位 ARN には、12 桁の管理アカウント番号が含まれています。管理アカウント番号がわからない場合は、組織と組織単位を記述して、それぞれの ARN を取得できます。以下の例では、`123456789012` が管理アカウントのアカウント ID です。

**必要なアクセス許可**  
ARN を取得する前に、組織と組織単位を記述する権限が必要です。次のポリシーで、これらの権限が付与されます。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "organizations:Describe*"
            ],
            "Resource": "*"
        }
    ]
}
```

------

------
#### [ AWS CLI ]

**組織の ARN を取得するには**  
[https://docs.aws.amazon.com/cli/latest/reference/organizations/describe-organization.html](https://docs.aws.amazon.com/cli/latest/reference/organizations/describe-organization.html) コマンドを使用します。組織 ARN のみを返す `--query` オプションを追加します。

```
aws organizations describe-organization --query 'Organization.Arn'
```

出力例を次に示します。

```
"arn:aws:organizations::123456789012:organization/o-1234567abc"
```

**組織単位の ARN を取得するには**  
[https://docs.aws.amazon.com/cli/latest/reference/organizations/describe-organizational-unit.html](https://docs.aws.amazon.com/cli/latest/reference/organizations/describe-organizational-unit.html) コマンドを使用します。`--query` パラメータを使用して、組織単位の ARN のみを返します。

```
aws organizations describe-organizational-unit \
    --organizational-unit-id ou-a123-b4567890 \
    --query 'OrganizationalUnit.Arn'
```

出力例を次に示します。

```
"arn:aws:organizations::123456789012:ou/o-1234567abc/ou-a123-b4567890"
```

------
#### [ PowerShell ]

**組織の ARN を取得するには**  
[Get-ORGOrganization](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-ORGOrganization.html) コマンドレットを使用します。

```
(Get-ORGOrganization).Arn
```

出力例を次に示します。

```
arn:aws:organizations::123456789012:organization/o-1234567abc
```

**組織単位の ARN を取得するには**  
[Get-ORGOrganizationalUnit](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-ORGOrganizationalUnit.html) コマンドレットを使用します。

```
(Get-ORGOrganizationalUnit -OrganizationalUnitId "ou-a123-b4567890").Arn
```

出力例を次に示します。

```
arn:aws:organizations::123456789012:ou/o-1234567abc/ou-a123-b4567890
```

------

# 組織と OU に KMS キーの使用を許可する
<a name="allow-org-ou-to-use-key"></a>

暗号化されたスナップショットによってバックアップされた AMI を共有する場合、組織または OU がスナップショットの暗号化に使用されの使用を許可する必要もあります。

**注記**  
暗号化されたスナップショットは、カスタマー *管理された型キーを使用して暗号化す* る必要があります。デフォルトの AWS 管理キーで暗号化されたスナップショットでバックアップされた AMI を共有することはできません。

KMS キーへのアクセスを制御するには、[キーポリシー](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html)で [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principalorgid](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principalorgid) および [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principalorgpaths](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principalorgpaths) 条件キーを使用して、指定したアクションに対する許可を特定のプリンシパルにのみ許可します。そのプリンシパルは、ユーザー、IAM ロール、フェデレーションユーザー、または AWS アカウント ルートユーザーです。

条件キーは次のように使用されます。
+ `aws:PrincipalOrgID` – 指定された ID で表される組織に属するプリンシパルを許可します。
+ `aws:PrincipalOrgPaths` – 指定されたパスで表される OU に属するプリンシパルを許可します。

組織または OU に KMS キーを使用するアクセス権限を付与するには、次のステートメントをキーポリシーに追加します。

```
{
    "Sid": "Allow access for organization root",
    "Effect": "Allow",
    "Principal": "*",
    "Action": [
        "kms:Describe*",
        "kms:List*",
        "kms:Get*",
        "kms:Encrypt",
        "kms:Decrypt",
        "kms:ReEncrypt*",
        "kms:GenerateDataKey*",
        "kms:CreateGrant"
    ],
    "Resource": "*",
    "Condition": {
        "StringEquals": {
            "aws:PrincipalOrgID": "o-123example"
        }
    }
}
```

特定の OU (およびその OU に属するアカウント) に KMS キーを使用するアクセス許可を付与するには、次の例のようなポリシーを使用できます。

```
{
        "Sid": "Allow access for specific OUs and their descendants",
        "Effect": "Allow",
        "Principal": "*",
        "Action": [
            "kms:Describe*",
            "kms:List*",
            "kms:Get*",
            "kms:Encrypt",
            "kms:Decrypt",
            "kms:ReEncrypt*",
            "kms:GenerateDataKey*",
            "kms:CreateGrant"
        ],
        "Resource": "*",
        "Condition": {
            "StringEquals": {
                "aws:PrincipalOrgID": "o-123example"
            },
            "ForAnyValue:StringLike": {
                "aws:PrincipalOrgPaths": [
                    "o-123example/r-ab12/ou-ab12-33333333/*",
                    "o-123example/r-ab12/ou-ab12-22222222/*"
                ]
            }
        }
}
```

その他の条件ステートメントの例については、「*IAM ユーザーガイド*」の「[https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principalorgid](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principalorgid)」と「[https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principalorgpaths](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principalorgpaths)」を参照してください。

クロスアカウントアクセス権限の付与の詳細については、「*AWS Key Management Service Developer Guide*」の「[Allowing users in other accounts to use a KMS key](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-modifying-external-accounts.html)」を参照してください。

# 組織または OU の AMI 共有を管理する
<a name="share-amis-org-ou-manage"></a>

組織および組織単位 (OU) との AMI の共有を管理することで、組織および OU が Amazon EC2 インスタンスを起動できるかどうかを制御できます。

## AMI が共有されている組織と OU を表示する
<a name="decribe-ami-launch-permissions"></a>

AMI を共有した組織と OU を見つけることができます。

------
#### [ Console ]

**を使用して AMI を共有した組織およびOUを確認するには**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)を開いてください。

1. ナビゲーションペインで **[AMI]** を選択してください。

1. リストで AMI を選択し、**[アクセス許可]** タブをクリックし、**[共有組織/OU]** までスクロールします。

   共有されている AMI を見つけるには､「[Amazon EC2 インスタンスで使用する共有 AMI を検索する](usingsharedamis-finding.md)」を参照してください。

------
#### [ AWS CLI ]

**を使用して AMI を共有した組織およびOUを確認するには**  
[https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-image-attribute.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-image-attribute.html) コマンドを `launchPermission` 属性と共に使用します。

```
aws ec2 describe-image-attribute \
    --image-id ami-0abcdef1234567890 \
    --attribute launchPermission
```

以下に、応答の例を示します。

```
{
    "ImageId": "ami-0abcdef1234567890",
    "LaunchPermissions": [
        {
            "OrganizationalUnitArn": "arn:aws:organizations::111122223333:ou/o-123example/ou-1234-5example"
        }
    ]
}
```

------
#### [ PowerShell ]

**を使用して AMI を共有した組織およびOUを確認するには**  
[Get-EC2ImageAttribute](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2ImageAttribute.html) コマンドレットを使用します。

```
Get-EC2ImageAttribute `
    -ImageId ami-0abcdef1234567890 `
    -Attribute launchPermission
```

------

## 組織または OU で AMI を共有する
<a name="share-amis-org-ou"></a>

組織または OU で AMI を共有できます。

**注記**  
AMI を共有するために、AMI の参照先の Amazon EBS スナップショットを共有する必要はありません。共有する必要があるのは AMI 自体だけです。起動の際に、参照先の EBS スナップショットへのインスタンスアクセスが自動的に提供されます。ただし、AMI が参照するスナップショットを暗号化するために使用した KMS キーは共有する必要があります。詳細については、[組織と OU に KMS キーの使用を許可する](allow-org-ou-to-use-key.md) を参照してください。

------
#### [ Console ]

**AMI を組織または OU と共有するには**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)を開いてください。

1. ナビゲーションペインで **[AMI]** を選択してください。

1. リストで AMI を選択し、**[アクション]** から **[AMI 権限の編集]** を選択してください。

1. **[AMI の利用状況]** で、**[プライベート]** を選択してください。

1. **[共有組織/OU]** の隣で、**[組織/OU ARN 追加]** を選択してください。

1. **[組織/OU ARN]** で、AMI を共有する組織 ARN または OU ARN を入力し、**[AMI の共有]** を選択してください。ID だけでなく、完全な ARN を指定する必要があることに注意してください。

   この AMI を複数の組織または OU と共有するには、この手順を繰り返して、必要なすべての組織または OU を追加します。

1. 完了したら、**[変更保存]** を選択してください。

1. (オプション) AMI を共有した組織または OU を表示するには、リストから AMI を選択し、**[アクセス許可]** タブをクリックし、**[共有組織/OU]** までスクロールします。共有されている AMI を見つけるには､「[Amazon EC2 インスタンスで使用する共有 AMI を検索する](usingsharedamis-finding.md)」を参照してください。

------
#### [ AWS CLI ]

**AMI を組織または OU と共有するには**  
[https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-image-attribute.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-image-attribute.html) コマンドを使用すると、指定した組織に対し、指定した AMI の起動許可が与えられます。

```
aws ec2 modify-image-attribute \
    --image-id ami-0abcdef1234567890 \
    --launch-permission "Add=[{OrganizationArn=arn:aws:organizations::123456789012:organization/o-123example}]"
```

**を使用して AMI を OUと共有するには**  
[[modify-image-attribute]](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-image-attribute.html) コマンドを使用すると、指定した OU に対し、指定した AMI の起動許可が与えられます。ID だけでなく、完全な ARN を指定する必要があることに注意してください。

```
aws ec2 modify-image-attribute \
    --image-id ami-0abcdef1234567890 \
    --launch-permission "Add=[{OrganizationalUnitArn=arn:aws:organizations::123456789012:ou/o-123example/ou-1234-5example}]"
```

------
#### [ PowerShell ]

AMI を共有するには、次の例のように [https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2ImageAttribute.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2ImageAttribute.html) コマンド (Windows PowerShell用ツール) を使用します。

**AMI を組織または OU と共有するには**  
次のコマンドを使用すると、指定した組織に対し、指定した AMI の起動許可が与えられます。

```
Edit-EC2ImageAttribute `
    -ImageId ami-0abcdef1234567890 `
    -Attribute launchPermission `
    -OperationType add `
    -OrganizationArn "arn:aws:organizations::123456789012:organization/o-123example"
```

**組織または OU と AMI の共有を停止するには**  
次のコマンドを使用すると、指定した組織から指定した AMI の起動許可が削除されます。

```
Edit-EC2ImageAttribute `
    -ImageId ami-0abcdef1234567890 `
    -Attribute launchPermission `
    -OperationType remove `
    -OrganizationArn "arn:aws:organizations::123456789012:organization/o-123example"
```

**すべての組織、OU、および AWS アカウント と AMI の共有を停止するには**  
次のコマンドを使用すると、指定した AMI からパブリック起動許可と明示的起動許可がすべて削除されます。AMI の所有者には常に起動許可が与えられるため、このコマンドの影響を受けないことにご注意ください。

```
Reset-EC2ImageAttribute `
    -ImageId ami-0abcdef1234567890 `
    -Attribute launchPermission
```

------

## 組織または OU での AMI 共有を停止する
<a name="stop-sharing-amis-org-ou"></a>

組織または OU での AMI 共有を停止できます。

**注記**  
AMI が共有されている組織または OU 内にある場合、特定のアカウントと AMI の共有を停止することはできません。アカウントの起動権限を削除して AMI の共有を停止しようとすると、Amazon EC2 は成功メッセージを返します。ただし、AMI は引き続きアカウントと共有されます。

------
#### [ Console ]

**組織または OU と AMI の共有を停止するには**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)) を開いてください。

1. ナビゲーションペインで **[AMI]** を選択してください。

1. リストで AMI を選択し、**[アクション]** から **[AMI 権限の編集]** を選択してください。

1. **[共有組織/OU]** で、AMI の共有を停止する組織または OU を選択し、**[選択を削除]** を選択してください。

1. 完了したら、**[変更保存]** を選択してください。

1. (オプション) AMI の組織または OU との共有の停止を確認するには、リストから AMI を選択し、**[アクセス許可]** タブをクリックし、**[共有組織/OU]** までスクロールします。

------
#### [ AWS CLI ]

**組織または OU と AMI の共有を停止するには**  
[modify-image-attribute](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-image-attribute.html) コマンドを使用します。この例では、指定した組織から指定した AMI の起動許可が削除されます。

```
aws ec2 modify-image-attribute \
    --image-id ami-0abcdef1234567890 \
    --launch-permission "Remove=[{OrganizationArn=arn:aws:organizations::123456789012:organization/o-123example}]"
```

**すべての組織、OU、および AWS アカウント と AMI の共有を停止するには**  
[https://docs.aws.amazon.com/cli/latest/reference/ec2/reset-image-attribute.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/reset-image-attribute.html) コマンドを使用します。この例では、指定した AMI からパブリック起動許可と明示的起動許可がすべて削除されます。AMI の所有者には常に起動許可が与えられるため、このコマンドの影響を受けないことにご注意ください。

```
aws ec2 reset-image-attribute \
    --image-id ami-0abcdef1234567890 \
    --attribute launchPermission
```

------
#### [ PowerShell ]

**組織または OU と AMI の共有を停止するには**  
[Edit-EC2ImageAttribute](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2ImageAttribute.html) コマンドレットを使用します。この例では、指定した組織から指定した AMI の起動許可が削除されます。

```
Edit-EC2ImageAttribute `
    -ImageId ami-0abcdef1234567890 `
    -Attribute launchPermission `
    -OperationType remove `
    -OrganizationArn "arn:aws:organizations::123456789012:organization/o-123example"
```

**すべての組織、OU、および AWS アカウント と AMI の共有を停止するには**  
[Reset-EC2ImageAttribute](https://docs.aws.amazon.com/powershell/latest/reference/items/Reset-EC2ImageAttribute.html) コマンドレットを使用します。この例では、指定した AMI からパブリック起動許可と明示的起動許可がすべて削除されます。AMI の所有者には常に起動許可が与えられるため、このコマンドの影響を受けないことにご注意ください。

```
Reset-EC2ImageAttribute `
    -ImageId ami-0abcdef1234567890 `
    -Attribute LaunchPermission
```

------

# 特定の AWS アカウントとの AMI の共有
<a name="sharingamis-explicit"></a>

AMI を公開せず、特定の AWS アカウント とだけ共有することもできます。これに必要なものは AWS アカウント ID のみです。

AWS アカウント ID は、AWS アカウント を一意に識別する 12 桁の数値です (`012345678901` など)。詳細については、「*AWS アカウント管理 リファレンスガイド*」の「[AWS アカウント 識別子の表示](https://docs.aws.amazon.com/accounts/latest/reference/manage-acct-identifiers.html)」を参照してください。



## 考慮事項
<a name="considerations-for-sharing-AMI-with-accounts"></a>

特定の AWS アカウント で AMI を共有する場合は、以下について検討してください。
+ **所有権** — AMI を共有するには、お客様の AWS アカウント がその AMI を所有している必要があります。
+ **共有制限** – リージョン内で AMI を共有できるエンティティの最大数については、「[Amazon EC2 Service Quotas](https://docs.aws.amazon.com//general/latest/gr/ec2-service.html#limits_ec2)」をご覧ください。
+ **タグ** - ユーザー定義タグ (AMI にアタッチするタグ) は共有できません。AMI を共有する場合、ユーザー定義タグは AMI が共有されている AWS アカウント では使用できません。
+ **スナップショット** –AMI を共有するために、AMI の参照先の Amazon EBS スナップショットを共有する必要はありません。共有できるのは AMI 自体のみです。システムは起動時に参照される EBS スナップショットへのインスタンス アクセスを提供します。ただし、AMI が参照するスナップショットを暗号化するために使用した KMS キー は共有する必要があります。詳細については、「*Amazon EBS ユーザーガイド*」の「[Amazon EBS スナップショットの共有](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-modifying-snapshot-permissions.html)」を参照してください。
+ **暗号化とキー** — 暗号化されていないスナップショットと暗号化されたスナップショットによってバックアップされた AMI を共有できます。
  + 暗号化されたスナップショットは、KMS キーを使用して暗号化する必要があります。デフォルトの AWS 管理キーで暗号化されたスナップショットでバックアップされた AMI を共有することはできません。
  + 暗号化されたスナップショットによってバックアップされた AMI を共有する場合、スナップショットの暗号化に使用された KMS キーの使用を AWS アカウント に許可する必要があります。詳細については、[組織と OU に KMS キーの使用を許可する](allow-org-ou-to-use-key.md) を参照してください。暗号化にカスタマー管理されたキーを使用する際に、Auto Scaling インスタンスの起動に必要となるキーポリシーを設定するには、「*Amazon EC2 Auto Scaling ユーザーガイド*」の「[暗号化ボリュームで使用するために必要な AWS KMS key ポリシー](https://docs.aws.amazon.com/autoscaling/ec2/userguide/key-policy-requirements-EBS-encryption.html)」を参照してください。
+ **リージョン** – AMI はリージョンのリソースです。共有した AMI は、そのリージョンでのみ使用できます。AMI を他のリージョンで利用できるようにするには、AMI をそのリージョンにコピーし、共有します。詳細については、[Amazon EC2 AMI のコピー](CopyingAMIs.md) を参照してください。
+ **使用** — AMI を共有する場合、ユーザーは AMI からのインスタンスのみを起動できます。AMI はそれを削除、共有、または変更することはできません。ただし、AMI を使用してインスタンスを起動した後は、インスタンスから AMI を作成できます。
+ **共有 AMI のコピー** — 別のアカウントのユーザーが共有 AMI をコピーする場合は、AMI をバックアップするストレージに対する読み取り権限をそのユーザーに付与する必要があります。詳細については、[アカウント間のコピー](how-ami-copy-works.md#copy-ami-across-accounts) を参照してください。
+ **請求** — 他の AWS アカウント がお客様の AMI を使用してインスタンスを起動しても、お客様には請求されません。AMI を使用してインスタンスを起動するアカウントには、起動するインスタンスに対して請求されます。

------
#### [ Console ]

**明示的な起動許可を与えるには**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)) を開いてください。

1. ナビゲーションペインで **[AMI]** を選択してください。

1. リストで AMI を選択し、**[アクション]** から **[AMI 権限の編集]** を選択してください。

1. **[プライベート]** を選択してください。

1. **[共有アカウント]** で、**[アカウント ID の追加]** () を選択してください。

1. **AWS アカウント ID** には、AMI を共有したい AWS アカウント ID を入力し、**[AMI の共有]** を選択してください。

   この AMI を複数のアカウントで共有するには、必要なアカウント ID がすべて追加されるまでステップ 5 と 6 を繰り返します。

1. 完了したら、**変更を保存** を選択してください。

1. (オプション) AMI を共有した AWS アカウント ID を表示するには、リストから AMI を選択し、**[アクセス許可]** タブを開いてください。共有されている AMI を見つけるには､「[Amazon EC2 インスタンスで使用する共有 AMI を検索する](usingsharedamis-finding.md)」を参照してください。

------
#### [ AWS CLI ]

AMI を共有するには、次の例のように [https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-image-attribute.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-image-attribute.html) マンド () を使用します。

**明示的な起動許可を与えるには**  
次の例では、指定した AWS アカウントに対し、指定した AMI の起動許可が与えられます。

```
aws ec2 modify-image-attribute \
    --image-id ami-0abcdef1234567890 \
    --launch-permission "Add=[{UserId=123456789012}]"
```

**アカウントに与えた起動許可を取り消すには**  
次の例では、指定した AWS アカウントから指定した AMI の起動許可が削除されます。

```
aws ec2 modify-image-attribute \
    --image-id ami-0abcdef1234567890 \
    --launch-permission "Remove=[{UserId=123456789012}]"
```

**すべての起動許可を取り消すには**  
次の例では、指定した AMI からパブリック起動許可と明示的起動許可がすべて削除されます。AMI の所有者には常に起動許可が与えられるため、このコマンドの影響を受けないことにご注意ください。

```
aws ec2 reset-image-attribute \
    --image-id ami-0abcdef1234567890 \
    --attribute launchPermission
```

------
#### [ PowerShell ]

AMI を共有するには、次の例のように [https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2ImageAttribute.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2ImageAttribute.html) コマンド (Windows PowerShell用ツール) を使用します。

**明示的な起動許可を与えるには**  
次の例では、指定した AWS アカウントに対し、指定した AMI の起動許可が与えられます。

```
Edit-EC2ImageAttribute `
    -ImageId ami-0abcdef1234567890 ` 
    -Attribute launchPermission `
    -OperationType add `
    -UserId "123456789012"
```

**アカウントに与えた起動許可を取り消すには**  
次の例では、指定した AWS アカウントから指定した AMI の起動許可が削除されます。

```
Edit-EC2ImageAttribute `
    -ImageId ami-0abcdef1234567890 `
    -Attribute launchPermission -OperationType remove `
    -UserId "123456789012"
```

**すべての起動許可を取り消すには**  
次の例では、指定した AMI からパブリック起動許可と明示的起動許可がすべて削除されます。AMI の所有者には常に起動許可が与えられるため、このコマンドの影響を受けないことにご注意ください。

```
Reset-EC2ImageAttribute `
    -ImageId ami-0abcdef1234567890 `
    -Attribute launchPermission
```

------

# お客様の AWS アカウント と AMI の共有をキャンセルする
<a name="cancel-sharing-an-AMI"></a>

AMI の起動許可にアカウントを追加することで、Amazon マシンイメージ (AMI) を[特定の AWS アカウント と共有](sharingamis-explicit.md)できます。AMI が AWS アカウント と共有されていて、そのアカウントとの共有が不要になった場合は、AMI の起動許可からアカウントを削除できます。この操作は、`cancel-image-launch-permission` AWS CLI コマンドを実行して行うことができます。このコマンドを実行すると、指定した AMI の起動許可から AWS アカウント が削除されます。お客様の AWS アカウント と共有されている AMI を見つけるには､「[Amazon EC2 インスタンスで使用する共有 AMI を検索する](usingsharedamis-finding.md)」を参照してください。

例えば、共有された未使用または廃止予定の AMI を含むインスタンスを起動する可能性を減らすために、AMI をアカウントで共有することをキャンセルする場合があります。AMI をアカウントと共有することをキャンセルすると、[describe-images](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) の出力や EC2 コンソールの AMI リストには表示されなくなります。

**Topics**
+ [制限事項](#cancel-sharing-an-AMI-limitations)
+ [アカウントと AMI の共有をキャンセルする](#cancel-image-launch-permission)

## 制限事項
<a name="cancel-sharing-an-AMI-limitations"></a>
+ AWS アカウント とだけ共有されている AMI の起動許可からアカウントを削除できます。[組織または組織単位 (OU) と共有されている AMI](share-amis-with-organizations-and-OUs.md) の起動許可からアカウントを削除したり、パブリック AMI へのアクセスを削除したりすることに `cancel-image-launch-permission` を使用することはできません。
+ AMI の起動許可からアカウントを完全に削除することはできません。AMI の所有者は、お客様のアカウントと再び AMI を共有できます。
+ AMI はリージョンのリソースです。`cancel-image-launch-permission` の実行時には、AMI が配置されているリージョンを指定する必要があります。コマンドの中でリージョンを指定するか、AWS\$1DEFAULT\$1REGION [環境変数](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-envvars.html)を使用します。
+ AWS CLI および SDK のみが、AMI の起動許可からのアカウントの削除をサポートしています。EC2 コンソールは現在このアクションに対応していません。

## アカウントと AMI の共有をキャンセルする
<a name="cancel-image-launch-permission"></a>

**注記**  
お客様のアカウントと AMI の共有をキャンセルすると、元に戻すことはできません。AMI へのアクセスを回復するには、AMI 所有者がお客様のアカウントと AMI を共有する必要があります。

------
#### [ AWS CLI ]

**アカウントとの AMI の共有をキャンセルするには**  
[https://docs.aws.amazon.com/cli/latest/reference/ec2/cancel-image-launch-permission.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/cancel-image-launch-permission.html) コマンドを使用します。

```
aws ec2 cancel-image-launch-permission \
    --image-id ami-0abcdef1234567890 \
    --region us-east-1
```

------
#### [ PowerShell ]

**アカウントとの AMI の共有をキャンセルするには**  
[https://docs.aws.amazon.com/powershell/latest/reference/index.html](https://docs.aws.amazon.com/powershell/latest/reference/index.html) コマンドレットを使用します。

```
Stop-EC2ImageLaunchPermission `
    -ImageId ami-0abcdef1234567890 `
    -Region us-east-1
```

------

# 共有 Linux AMI の作成に関する推奨事項
<a name="building-shared-amis"></a>

攻撃対象領域を縮小し、作成する AMI の信頼性を向上させるためには、次のガイドラインを使用します。

**重要**  
セキュリティのガイドラインのリストは、いずれも完全ではありません。共有 AMI を注意深く作成し、機密データが漏洩される可能性について十分考慮してください。

**Topics**
+ [ルートユーザーのパスワードベースのリモートログインを無効にする](#public-amis-disable-password-logins-for-root)
+ [ローカルルートアクセスを無効にする](#restrict-root-access)
+ [SSH ホストキーペアの削除](#remove-ssh-host-key-pairs)
+ [パブリックキー認証情報のインストール](#public-amis-install-credentials)
+ [sshd DNS チェックの無効化 (任意)](#public-amis-disable-ssh-dns-lookups)
+ [機密データを削除する](#public-amis-protect-yourself)

AWS Marketplace の AMI を構築する場合は、*AWS Marketplace 販売者ガイド*の「[AMI 構築のベストプラクティス](https://docs.aws.amazon.com/marketplace/latest/userguide/best-practices-for-building-your-amis.html)」で、ガイドライン、ポリシー、ベストプラクティスをご参照ください。

## ルートユーザーのパスワードベースのリモートログインを無効にする
<a name="public-amis-disable-password-logins-for-root"></a>

パブリック AMI に固定のルートパスワードを使用することは、セキュリティの面で危険であり、すぐに知られるおそれがあります。初回ログイン後にパスワードを変更するようにユーザーに依存していますが、変更されるまでの一瞬の間にパスワードが悪用される危険性があります。

この問題を解決するには、ルートユーザーのパスワードベースのリモートログインを無効にします。

**ルートユーザーのパスワードベースのリモートログインを無効にするには**

1. テキストエディタで `/etc/ssh/sshd_config` ファイルを開き、次の行を見つけ出します:

   ```
   #PermitRootLogin yes
   ```

1. 行を次のように変更します:

   ```
   PermitRootLogin without-password
   ```

   この設定ファイルの場所は、ディストリビューションに応じて、または OpenSSH を実行していない場合は、異なることがあります。このような場合は、関連資料を参照してください。

## ローカルルートアクセスを無効にする
<a name="restrict-root-access"></a>

共有 AMI を使用する際のベストプラクティスは、直接ルートログインを無効にすることです。これを行うには、実行中のインスタンスにログインし、次のコマンドを発行します。

```
[ec2-user ~]$ sudo passwd -l root
```

**注記**  
このコマンドが `sudo` の使用に影響を及ぼすことはありません。

## SSH ホストキーペアの削除
<a name="remove-ssh-host-key-pairs"></a>

 パブリック AMI から派生した AMI を共有する場合は、`/etc/ssh` にある既存の SSH ホストキーペアを削除します。これにより、他のユーザーがお客様の AMI を使用してインスタンスを起動したときに、SSH は、新しい固有の SSH キーペアを生成するように強制されるため、セキュリティが強化され、「中間者」攻撃の可能性を減らします。

システムにある次のすべてのキーファイルを削除します。
+  ssh\$1host\$1dsa\$1key 
+  ssh\$1host\$1dsa\$1key.pub 
+  ssh\$1host\$1key 
+  ssh\$1host\$1key.pub 
+  ssh\$1host\$1rsa\$1key 
+  ssh\$1host\$1rsa\$1key.pub 
+ ssh\$1host\$1ecdsa\$1key
+ ssh\$1host\$1ecdsa\$1key.pub
+ ssh\$1host\$1ed25519\$1key
+ ssh\$1host\$1ed25519\$1key.pub

次のコマンドを使用して、これらのファイルをすべて確実に削除できます。

```
[ec2-user ~]$ sudo shred -u /etc/ssh/*_key /etc/ssh/*_key.pub
```

**警告**  
**shred** などの安全な削除ユーティリティでは、ストレージメディアからファイルのすべてのコピーが削除されない場合があります。ファイルの非表示のコピーは、ジャーナルファイルシステム (Amazon Linux のデフォルト ext4 を含む)、スナップショット、バックアップ、RAID、および一時キャッシュによって作成することができます。詳細については、[shred ドキュメント](https://www.gnu.org/software/coreutils/manual/html_node/shred-invocation.html)を参照してください。

**重要**  
パブリック AMI から既存の SSH ホストキーペアを削除することを忘れた場合、ルーチン監査プロセスから、AMI のインスタンスを実行するすべての顧客に向けて、セキュリティ上のリスクがある可能性について通知されます。短い猶予期間の後に、AMI にプライベートのマークが付けられます。

## パブリックキー認証情報のインストール
<a name="public-amis-install-credentials"></a>

パスワードを使用したログインを防ぐように AMI を構成したら、ユーザーが別のメカニズムを使用してログインできるようにしておく必要があります。

ユーザーは、Amazon EC2 を使用すると、インスタンスの起動時にパブリックプライベートキーペア名を指定できます。`RunInstances` API 呼び出し (またはコマンドライン API ツール) で有効なキーペア名を指定すると、パブリックキー (`CreateKeyPair` または `ImportKeyPair` の呼び出し後に Amazon EC2 がサーバー上に保持するキーペアの一部) を、インスタンスメタデータに対する HTTP Query を介してインスタンスで使用できるようになります。

SSH を使用してログインするには、AMI が起動時にキー値を取得し、それを `/root/.ssh/authorized_keys` (または AMI 上のその他のユーザーアカウントの同等項目) に付加する必要があります。ユーザーはキーペアを使用して AMI のインスタンスを起動し、ルートパスワードを入力せずにログインできます。

Amazon Linux や Ubuntu を初めとする多くのディストリビューションでは、`cloud-init` パッケージを使用して、設定されたユーザーのパブリックキー認証情報を挿入します。`cloud-init` をサポートしていないディストリビューションの場合は、システムスタートアップスクリプト (例: `/etc/rc.local`) に次のコードを追加して、起動時にルートユーザーに対して指定したパブリックキーを取り込みます。

**注記**  
次の例では、IP アドレス http://169.254.169.254/ はリンクローカルアドレスであり、インスタンスからのみ有効です。

------
#### [ IMDSv2 ]

```
if [ ! -d /root/.ssh ] ; then
        mkdir -p /root/.ssh
        chmod 700 /root/.ssh
fi
# Fetch public key using HTTP
TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \
&& curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key > /tmp/my-key
if [ $? -eq 0 ] ; then
        cat /tmp/my-key >> /root/.ssh/authorized_keys
        chmod 700 /root/.ssh/authorized_keys
        rm /tmp/my-key
fi
```

------
#### [ IMDSv1 ]

```
if [ ! -d /root/.ssh ] ; then
        mkdir -p /root/.ssh
        chmod 700 /root/.ssh
fi
# Fetch public key using HTTP
curl http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key > /tmp/my-key
if [ $? -eq 0 ] ; then
        cat /tmp/my-key >> /root/.ssh/authorized_keys
        chmod 700 /root/.ssh/authorized_keys
        rm /tmp/my-key
fi
```

------

 この設定は、あらゆるユーザーに適用できます。`root` ユーザーに限定する必要はありません。

**注記**  
この AMI に基づいたインスタンスを再バンドルすると、起動時に使用されたキーが組み込まれます。キーへの組み込みを阻止するには、`authorized_keys` ファイルの を空にする (ファイルを削除する) か、このファイルを再バンドルから除外します。

## sshd DNS チェックの無効化 (任意)
<a name="public-amis-disable-ssh-dns-lookups"></a>

sshd DNS チェックを無効にすると、sshd セキュリティが若干低下します。ただし、DNS の解決策が失敗した場合は、SSH ログインが引き続き機能します。sshd チェックを無効にしなかった場合、DNS の解決策が失敗すると、すべてのログインが阻止されます。

**sshd DNS チェックを無効にするには**

1. テキストエディタで `/etc/ssh/sshd_config` ファイルを開き、次の行を見つけ出します:

   ```
   #UseDNS yes
   ```

1. 行を次のように変更します: 

   ```
   UseDNS no
   ```

**注記**  
この設定ファイルの場所は、ディストリビューションに応じて、または OpenSSH を実行していない場合は、異なることがあります。このような場合は、関連資料を参照してください。

## 機密データを削除する
<a name="public-amis-protect-yourself"></a>

共有する AMI に、機密性のあるデータやソフトウェアは保管しないことをお勧めします。共有 AMI を起動するユーザーは、それを再バンドルしたり、自分のものとして登録したりできる可能性があります。以下のガイドラインに従って、見落としやすいセキュリティ上のリスクを回避してください: 
+ `--exclude directory` で `ec2-bundle-vol` オプションを使用して、バンドル操作に含めたくない機密情報が入っているディレクトリおよびサブディレクトリをスキップすることをお勧めします。特に、イメージをバンドルするときに、すべてのユーザー所有の SSH パブリックキー/プライベートキーペアおよび SSH `authorized_keys` ファイルを除外します。Amazon パブリック AMI で、これらのファイルは、ルートユーザーの場合は `/root/.ssh`、通常のユーザーの場合は `/home/user_name/.ssh/` に配置されています。詳細については、[ec2-bundle-vol](ami-tools-commands.md#ami-bundle-vol) を参照してください。
+ バンドルの前に必ずシェル履歴を削除してください。同じ AMI で複数のバンドルのアップロードを試行すると、シェル履歴にアクセスキーが含まれます。次の例は、インスタンス内からのバンドルの前に実行される最後のコマンドとなる必要があります。

  ```
  [ec2-user ~]$ shred -u ~/.*history
  ```
**警告**  
上記の警告で示した **shred** の制限は、ここにも適用されます。  
bash は、終了時に現在のセッション履歴をディスクに書き込むことに注意してください。`~/.bash_history` を削除後にインスタンスをログアウトし、再度ログインすると、`~/.bash_history` が再作成され、前のセッション中に実行されたすべてのコマンドが含まれています。  
bash 以外の他のプログラムもディスクに履歴を書き込むため、注意して不要な dot ファイルと dot ディレクトリを削除または除外します。
+ 実行中のインスタンスをバンドルするには、プライベートキーと X.509 証明書が必要です。これらの証明書およびその他の証明書を、バンドルされていない場所 (インスタンスストアなど) に書き込みます。

# Amazon EventBridge を使用して AMI イベントをモニタリングする
<a name="monitor-ami-events"></a>

Amazon マシンイメージ (AMI) の状態に変更があった場合、Amazon EC2 はイベントを生成し、それを Amazon EventBridge (旧 Amazon CloudWatch Events) に送信します。イベントは、EventBridge のデフォルトのイベントバスに、JSON 形式で送信されます。Amazon EventBridge を使用することで、これらのイベントの検出と対応が行えるようになります。EventBridge では、イベントに応答してアクションをトリガーするためのルールを作成します。例えば、AMI 作成プロセスが完了したことを検出し、Amazon SNS トピックを呼び出して E メール通知をユーザーに送信する、EventBridge ルールを作成できます。

AMI が以下のいずれかの状態に遷移すると、Amazon EC2 は `EC2 AMI State Change` イベントを生成します。
+ `available`
+ `failed`
+ `deregistered`
+ `disabled`

イベントは、ベストエフォートベースで生成されます。

次のテーブルは、AMI の操作と AMI が入力できる状態を示しています。テーブルの **[はい]** は、対応する操作が実行されたときに AMI が入力できる状態を示しています。


| AMI オペレーション | available | failed | deregistered | disabled | 
| --- | --- | --- | --- | --- | 
| CopyImage | 可能 | はい |  |  | 
|  CreateImage  |  はい  |  はい  |  |  | 
|  CreateRestoreImageTask  | はい | はい |  |  | 
| DeregisterImage |  |  |  はい  |  | 
|  DisableImage  |  |  |  |  はい  | 
|  EnableImage  |  はい  |  |  |  | 
| RegisterImage | はい | あり |  |  | 

**EC2 AMI State Change のイベント**
+ [イベントの詳細](#ami-events)
+ [available のイベント](#ami-event-available)
+ [failed のイベント](#ami-event-failed)
+ [deregistered のイベント](#ami-event-deregistered)
+ [disabled のイベント](#ami-event-disabled)

## イベントの詳細
<a name="ami-events"></a>

イベント内の以下のフィールドを使用すると、アクションをトリガーするルールを作成できます。

`"source": "aws.ec2"`  
イベントが Amazon EC2 からのものであるかを特定します。

`"detail-type": "EC2 AMI State Change"`  
イベント名を特定します。

`"detail": { "ImageId": "ami-0abcdef1234567890", "State": "available", }`  
AMI ID と AMI の状態 (`available`、`failed`、`deregistered`、または `disabled`) を指定します。

詳細については、「Amazon EventBridge ユーザーガイド」で以下のトピックを参照してください。
+ [Amazon EventBridge イベント](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-events.html)
+ [Amazon EventBridge のイベントパターン](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-patterns.html)
+ [Amazon EventBridge ルール](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-rules.html)

Lambda 関数を作成する方法と、その Lambda 関数を実行する EventBridge ルールのチュートリアルについては、「*AWS Lambda デベロッパーガイド*」の「[チュートリアル: EventBridge を使用して Amazon EC2 インスタンスの状態をログに記録する](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-log-ec2-instance-state.html)」を参照してください。

## available のイベント
<a name="ami-event-available"></a>

以下に、`CreateImage`、`CopyImage`、`RegisterImage`、`CreateRestoreImageTask`、または `EnableImage` が正常に処理された後、AMI が `available` 状態に遷移する際に Amazon EC2 が生成するイベントの例を示します。

`"State": "available"` は、 のオペレーションが正常に処理されたことを示します。

```
{
    "version": "0",
    "id": "example-9f07-51db-246b-d8b8441bcdf0",
    "detail-type": "EC2 AMI State Change",
    "source": "aws.ec2",
    "account": "012345678901",
    "time": "yyyy-mm-ddThh:mm:ssZ",
    "region": "us-east-1",
    "resources": ["arn:aws:ec2:us-east-1::image/ami-0abcdef1234567890"],
    "detail": {
        "RequestId": "example-9dcc-40a6-aa77-7ce457d5442b",
        "ImageId": "ami-0abcdef1234567890",
        "State": "available",
        "ErrorMessage": ""
    }
}
```

## failed のイベント
<a name="ami-event-failed"></a>

以下に、`CreateImage`、`CopyImage`、`RegisterImage`、または `CreateRestoreImageTask` が正常に処理された後、AMI が `failed` 状態に遷移する際に Amazon EC2 が生成するイベントの例を示します。

以下のフィールドにより、関連する情報が提供されます。
+ `"State": "failed"` – オペレーションが失敗したことを示します。
+ `"ErrorMessage": ""` – オペレーション失敗の理由を示します。

```
{
    "version": "0",
    "id": "example-9f07-51db-246b-d8b8441bcdf0",
    "detail-type": "EC2 AMI State Change",
    "source": "aws.ec2",
    "account": "012345678901",
    "time": "yyyy-mm-ddThh:mm:ssZ",
    "region": "us-east-1",
    "resources": ["arn:aws:ec2:us-east-1::image/ami-0abcdef1234567890"],
    "detail": {
        "RequestId": "example-9dcc-40a6-aa77-7ce457d5442b",
        "ImageId": "ami-0abcdef1234567890",
        "State": "failed",
        "ErrorMessage": "Description of failure"
    }
}
```

## deregistered のイベント
<a name="ami-event-deregistered"></a>

以下に、`DeregisterImage` が正常に処理された後、AMI が `deregistered` 状態に遷移する際に Amazon EC2 が生成するイベントの例を示します。オペレーションが失敗した場合、イベントの生成は行われません。`DeregisterImage` は同期オペレーションであるため、処理が失敗した場合は直ちに認識されます。

`"State": "deregistered"` は、`DeregisterImage` のオペレーションが正常に処理されたことを示します。

```
{
    "version": "0",
    "id": "example-9f07-51db-246b-d8b8441bcdf0",
    "detail-type": "EC2 AMI State Change",
    "source": "aws.ec2",
    "account": "012345678901",
    "time": "yyyy-mm-ddThh:mm:ssZ",
    "region": "us-east-1",
    "resources": ["arn:aws:ec2:us-east-1::image/ami-0abcdef1234567890"],
    "detail": {
        "RequestId": "example-9dcc-40a6-aa77-7ce457d5442b",
        "ImageId": "ami-0abcdef1234567890",
        "State": "deregistered",
        "ErrorMessage": ""
    }
}
```

## disabled のイベント
<a name="ami-event-disabled"></a>

以下に、`DisableImage` が正常に処理された後、AMI が `disabled` 状態に遷移する際に Amazon EC2 が生成するイベントの例を示します。オペレーションが失敗した場合、イベントの生成は行われません。`DisableImage` は同期オペレーションであるため、処理が失敗した場合は直ちに認識されます。

`"State": "disabled"` は、`DisableImage` のオペレーションが正常に処理されたことを示します。

```
{
    "version": "0",
    "id": "example-9f07-51db-246b-d8b8441bcdf0",
    "detail-type": "EC2 AMI State Change",
    "source": "aws.ec2",
    "account": "012345678901",
    "time": "yyyy-mm-ddThh:mm:ssZ",
    "region": "us-east-1",
    "resources": ["arn:aws:ec2:us-east-1::image/ami-0abcdef1234567890"],
    "detail": {
        "RequestId": "example-9dcc-40a6-aa77-7ce457d5442b",
        "ImageId": "ami-0abcdef1234567890",
        "State": "disabled",
        "ErrorMessage": ""
    }
}
```

# AMI の請求情報について
<a name="ami-billing-info"></a>

インスタンスの起動時に選択できる Amazon マシンイメージ (AMI) は多数あり、さまざまなオペレーティングシステムプラットフォームと機能をサポートしています。AWS からの最終的な請求金額に対し、インスタンスの起動時に選択した AMI がどのように影響するかは、関連するオペレーティングシステムプラットフォームと請求情報を調べることで知ることができます。オンデマンドまたは スポットインスタンス を起動するか、リザーブドインスタンス を購入する前に、この操作を行ってください。

以下、どのように AMI を事前調査することで、ニーズに最も適した AMI を選択できるかを示した例を 2 つ紹介します。
+ スポットインスタンス では、AMI **プラットフォームの詳細**を使用して、AMI が スポットインスタンス でサポートされていることが確認できます。
+ リザーブドインスタンス を購入する際、AMI **プラットフォームの詳細**にマップするオペレーティングシステムプラットフォーム (**プラットフォーム**) を選択するようにできます。

インスタンスの料金の詳細については、「[Amazon EC2 料金表](https://aws.amazon.com/ec2/pricing/)」を参照してください。

**Topics**
+ [AMI 請求情報フィールド](billing-info-fields.md)
+ [AMI の請求と使用状況の詳細の検索](view-billing-info.md)
+ [請求書に記載されている AMI の請求を確認します](verify-ami-charges.md)

# AMI 請求情報フィールド
<a name="billing-info-fields"></a>

次のフィールドは、AMI に関連付けられた請求情報を提供します。

プラットフォームの詳細  
 AMI の請求コードに関連付けられたプラットフォームの詳細。例えば、`Red Hat Enterprise Linux`。

使用オペレーション  
Amazon EC2 インスタンスのオペレーション、および AMI に関連付けられている請求コード。例えば、`RunInstances:0010`。[**使用オペレーション**] は、AWS のコストと使用状況レポート (CUR) の [明細項目/オペレーション](https://docs.aws.amazon.com/cur/latest/userguide/Lineitem-columns.html#Lineitem-details-O-Operation)列と、[AWS API 価格表](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/price-changes.html) に対応しています。

これらのフィールドは、Amazon EC2 コンソールの 「**インスタンス**」ページまたは「**AMI**」ページ、あるいは [[describe-images]](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) コマンドまたは [[Get-EC2Image]](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Image.html) コマンドによって返されるレスポンスで表示できます。

## サンプルデータ: プラットフォーム別の使用オペレーション
<a name="billing-info"></a>

次の表は、Amazon EC2 コンソールの 「**インスタンス**」ページまたは「**AMI**」ページ、あるいは [[describe-images]](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) コマンドまたは [[Get-EC2Image]](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Image.html) コマンドによって返されるレスポンスに表示される、プラットフォームの詳細と使用オペレーションの値の一部を一覧表示しています。


| プラットフォームの詳細 | 使用オペレーション 2 | 
| --- | --- | 
|  Linux/UNIX  |  RunInstances  | 
|  Red Hat BYOL Linux  |  RunInstances:00g0 3  | 
|  Red Hat Enterprise Linux  |  RunInstances:0010  | 
|  Red Hat Enterprise Linux with HA  |  RunInstances:1010  | 
|  Red Hat Enterprise Linux with SQL Server Standard and HA  |  RunInstances:1014  | 
|  Red Hat Enterprise Linux with SQL Server Enterprise and HA  |  RunInstances:1110  | 
|  Red Hat Enterprise Linux with SQL Server Standard  |  RunInstances:0014  | 
|  Red Hat Enterprise Linux with SQL Server Web  |  RunInstances:0210  | 
|  Red Hat Enterprise Linux with SQL Server Enterprise  |  RunInstances:0110  | 
|  SQL Server Enterprise  |  RunInstances:0100  | 
|  SQL Server Standard  |  RunInstances:0004  | 
|  SQL Server Web  |  RunInstances:0200  | 
|  SUSE Linux  |  RunInstances:000g  | 
| Ubuntu Pro |  RunInstances:0g00  | 
|  Windows  |  RunInstances:0002  | 
|  Windows BYOL  |  RunInstances:0800  | 
|  Windows with SQL Server Enterprise 1  |  RunInstances:0102  | 
|  Windows with SQL Server Standard 1  |  RunInstances:0006  | 
|  Windows with SQL Server Web 1  |  RunInstances:0202  | 

1 2 つのソフトウェアライセンスが 1 つの AMI に関連付けられている場合、**[プラットフォームの詳細]** フィールドには両方が表示されます。

2 スポットインスタンス を実行している場合、[AWS のコストと使用状況レポート] の [https://docs.aws.amazon.com/cur/latest/userguide/Lineitem-columns.html#Lineitem-details-O-Operation](https://docs.aws.amazon.com/cur/latest/userguide/Lineitem-columns.html#Lineitem-details-O-Operation) は、ここに記載されている **[使用オペレーション]** の値と異なる場合があります。例えば、`[lineitem/Operation](https://docs.aws.amazon.com/cur/latest/userguide/Lineitem-columns.html#Lineitem-details-O-Operation)` に `RunInstances:0010:SV006` が表示されている場合は、Amazon EC2 が、ゾーン 6 の米国東部 (バージニア北部) で Red Hat Enterprise Linux スポットインスタンス時間を実行していることを示します。

3 こちらは、使用状況レポートに RunInstances (Linux/UNIX) のように表示されます。

# AMI の請求と使用状況の詳細の検索
<a name="view-billing-info"></a>

請求書の AMI 料金を確認するには、次のプロパティが役立ちます。
+ **プラットフォームの詳細**
+ **使用操作**
+ **AMI ID**

------
#### [ Console ]

**AMI の AMI 請求情報を見つけるには**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. ナビゲーションペインで [**AMI**] を選択してください。

1. AMI を選択します。

1. **[詳細]** タブで、**[プラットフォーム詳細]** と **[使用オペレーション]** を見つけます。

**インスタンスの AMI 請求情報を見つけるには**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. ナビゲーションペインで、[**インスタンス**] を選択してください。

1. インスタンスを選択します。

1. **[詳細]** タブで、**[インスタンスの詳細]** を展開し、**[プラットフォーム詳細]** と **[使用オペレーション]** を見つけます。

------
#### [ AWS CLI ]

**AMI の AMI 請求情報を見つけるには**  
[describe-images](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) コマンドを使用します。

```
aws ec2 describe-images \
    --image-ids ami-0abcdef1234567890 \
    --query "Images[].{PlatformDetails:PlatformDetails,UsageOperation:UsageOperation}"
```

Linux AMI の出力例を次に示します。

```
[
    {
        "PlatformDetails": "Linux/UNIX",
        "UsageOperation": "RunInstances"
    }
]
```

**インスタンスの AMI 請求情報を見つけるには**  
[describe-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instances.html) コマンドを使用します。

```
aws ec2 describe-instances \
    --instance-ids i-1234567890abcdef0 \
    --query "Reservations[].Instances[].{PlatformDetails:PlatformDetails,UsageOperation:UsageOperation}"
```

Windows インスタンスの出力例を次に示します。

```
[
    {
        "PlatformDetails": "Windows",
        "UsageOperation": "RunInstances:0002"
    }
]
```

------
#### [ PowerShell ]

**AMI の AMI 請求情報を見つけるには**  
[Get-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Image.html) コマンドレットを使用します。

```
Get-EC2Image `
    -ImageId ami-0abcdef1234567890 | `
    Format-List PlatformDetails, UsageOperation
```

Linux AMI の出力例を次に示します。

```
PlatformDetails : Linux/UNIX
UsageOperation  : RunInstances
```

**インスタンスの AMI 請求情報を見つけるには**  
[Get-EC2Instance](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Instance.html) コマンドレットを使用します。

```
(Get-EC2Instance `
    -InstanceId i-1234567890abcdef0).Instances | `
    Format-List PlatformDetails, UsageOperation
```

Windows インスタンスの出力例を次に示します。

```
PlatformDetails : Windows
UsageOperation  : RunInstances:0002
```

------

# 請求書に記載されている AMI の請求を確認します
<a name="verify-ami-charges"></a>

AWS のコストと使用状況レポート (CUR) で示されたインスタンスの請求情報が、そのインスタンスの起動に使用した AMI に関連付けられた請求情報と一致していることを確認することで、予定外のコストの発生を防ぐことができます。

請求情報を確認するには、CUR でインスタンス ID を見つけ、`[lineitem/Operation](https://docs.aws.amazon.com/cur/latest/userguide/Lineitem-columns.html#Lineitem-details-O-Operation)` 列で対応する値を確認します。値は、AMI に関連付けられた [**使用オペレーション**] の値と一致する必要があります。

例えば、AMI `ami-0123456789EXAMPLE`には次の請求情報があります。
+ **プラットフォームの詳細** = `Red Hat Enterprise Linux`
+ **使用オペレーション** = `RunInstances:0010`

この AMI を使用してインスタンスを起動した場合は、CUR でインスタンス ID を検索し、`[lineitem/Operation](https://docs.aws.amazon.com/cur/latest/userguide/Lineitem-columns.html#Lineitem-details-O-Operation)` 列で対応する値が確認できます。この例では、値は `RunInstances:0010` であることが必要です。

# Amazon EC2 の AMI クォータ
<a name="ami-quotas"></a>

AMI を作成および共有する際には、以下のクォータが適用されます。AWS リージョン ごとにクォータが適用されます。


****  

| クォータ名 | 説明 | リージョンあたりのデフォルトのクォータ | 
| --- | --- | --- | 
| AMI | リージョンごとに許可されているパブリック AMI およびプライベート AMI の最大数。これらには、利用可能な AMI と保留中の AMI、およびごみ箱にある AMI が含まれます。 | 50,000 | 
| パブリック AMI | リージョンごとに許可されているパブリック AMI の最大数 (ごみ箱内のパブリック AMI を含む)。 | 5 | 
| AMI 共有 | リージョン内で AMI を共有できるエンティティ (組織、組織単位 (OU)、アカウント) の最大数。AMI を組織または OU と共有する場合、組織内のアカウント数や OU 数はクォータにカウントされません。 | 1,000 | 

クォータを超えて AMI をさらに作成または共有したい場合は、以下を実行できます。
+ AMI またはパブリック AMI のクォータの合計を超える場合は、未使用のイメージの登録を解除することを検討してください。
+ パブリック AMI のクォータを超える場合は、1 つ以上のパブリック AMI をプライベートにすることを検討してください。
+ AMI の共有クォータを超える場合は、個別のアカウントではなく、組織または OU と AMI を共有することを検討してください。
+ AMI のクォータの引き上げをリクエストします。

## AMI のクォータの引き上げをリクエストする
<a name="request-ami-quota-increase"></a>

AMI のデフォルトクォータを超える容量が必要な場合は、クォータの引き上げをリクエストできます。

**AMI のクォータの引き上げをリクエストするには**

1. [https://console.aws.amazon.com/servicequotas/](https://console.aws.amazon.com/servicequotas/) で Service Quotas コンソールを開きます。

1. ナビゲーションペインで、**[AWS サービス]** を選択します。

1. リストから **[Amazon Elastic Compute Cloud (Amazon EC2)]** を選択するか、検索ボックスにサービスの名前を入力します。

1. 引き上げをリクエストするには、AMI クォータを選択します。選択できる AMI クォータは次のとおりです:
   + AMI
   + パブリック AMI
   + AMI 共有

1. **[Request quota increase]** (クォータの引き上げのリクエスト) を選択します。

1. **[Change quota value]** (クォータ値の変更) に新しいクォータ値を入力し、**[Request]** (リクエスト) を選択します。

保留中または最近解決されたリクエストを表示するには、ナビゲーションペインから [**ダッシュボード**] を選択します。保留中のリクエストの場合は、リクエストのステータスを選択してリクエストの受信をオープンします。リクエストの初期ステータスは **[Pending]** (保留中) です。ステータスが **[Quota requested]** (クォータをリクエスト済み) に変わると、**[Support Center case number]** (サポートセンターのケース番号) にケース番号が表示されます。リクエストのチケットを開くには、ケース番号を選択します。

リクエストが解決されると、クォータの [**適用されたクォータ値**] が新しい値に設定されます。

詳細については、[Service Quotas ユーザーガイド](https://docs.aws.amazon.com/servicequotas/latest/userguide/request-quota-increase.html)を参照してください。