

# AWS CLI で Amazon EC2 を使用する
<a name="cli-services-ec2"></a>


| Amazon Elastic Compute Cloud のご紹介 | 
| --- | 
|  [![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/TsRBftzZsQo/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/TsRBftzZsQo)  | 

Amazon Elastic Compute Cloud (Amazon EC2) は、高度にスケーラブルで柔軟な仮想コンピューティング環境を提供します。Amazon EC2 を使用すると、Amazon EC2 インスタンスと呼ばれる仮想サーバーをプロビジョニングおよび管理して、さまざまなコンピューティング関連のニーズを満たすことができます。

Amazon EC2 インスタンスは、CPU、メモリ、ストレージ、ネットワーク機能をさまざまな設定でカスタマイズできる仮想マシンです。アプリケーションの要件に応じて、軽量かつ費用対効果の高いオプションから強力で高性能なインスタンスまで、さまざまなインスタンスタイプを選択できます。この柔軟性により、コンピューティング関連のニーズに合わせてパフォーマンスとコスト効率を最適化できます。

さらに、Amazon EC2 には、コンピューティングリソースを効果的に管理できる一連の機能が搭載されています。これには、新しいインスタンスをすばやく起動し、迅速にデプロイするためのカスタムマシンイメージ (AMI) を作成し、必要に応じてコンピューティング容量を増減させる機能が含まれます。

AWS Command Line Interface (AWS CLI) を使用して、Amazon EC2 の機能にアクセスできます。Amazon EC2 用の AWS CLI コマンドを一覧表示するには、次のコマンドを使用します。

```
aws ec2 help
```

コマンドを実行する前に、デフォルトの認証情報を設定します。詳細については、「[Configuring settings for the AWS CLI](cli-chap-configure.md)」を参照してください。

このトピックでは、Amazon EC2 の一般的なタスクを実行する AWS CLI コマンドの省略表記での例について説明します。

完全表記の AWS CLI コマンドの例については、*GitHub* の [AWS CLI code examples repository](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/aws-cli) を参照してください。

**Topics**
+ [Creating, displaying, and deleting Amazon EC2 key pairs in the AWS CLI](cli-services-ec2-keypairs.md)
+ [AWS CLI の Amazon EC2 セキュリティグループの作成、設定、および削除](cli-services-ec2-sg.md)
+ [Launching, listing, and deleting Amazon EC2 instances in the AWS CLI](cli-services-ec2-instances.md)
+ [Change an Amazon EC2 instance type with a bash script in the AWS CLI](cli-services-ec2-instance-type-script.md)

# Creating, displaying, and deleting Amazon EC2 key pairs in the AWS CLI
<a name="cli-services-ec2-keypairs"></a>

AWS Command Line Interface (AWS CLI) を使用して、Amazon Elastic Compute Cloud (Amazon EC2) のキーペアを作成、表示、および削除することができます。キーペアは Amazon EC2 インスタンスに接続するときに使用します。インスタンスの作成時に Amazon EC2 にキーペアを指定し、インスタンスへの接続時にこのキーペアを使用して認証できます。

**注記**  
その他のコマンドの例については、「[AWS CLI リファレンスガイド](https://docs.aws.amazon.com/cli/latest/reference/index.html)」を参照してください。

**Topics**
+ [前提条件](#cli-services-ec2-keypairs-prereqs)
+ [キーペアを作成する](#creating-a-key-pair)
+ [キーペアの表示](#displaying-a-key-pair)
+ [キーペアの削除](#deleting-a-key-pair)
+ [リファレンス](#cli-services-ec2-keypairs-references)

## 前提条件
<a name="cli-services-ec2-keypairs-prereqs"></a>

`ec2` コマンドを実行するには、次のことが必要です。
+ AWS CLI をインストールして設定します。詳細については、「[AWS CLI の最新バージョンのインストールまたは更新](getting-started-install.md)」および「」を参照してください。[Authentication and access credentials for the AWS CLI](cli-chap-authentication.md)
+ Amazon EC2 アクセスできるように IAM アクセス許可を設定します。Amazon EC2 に対する IAM アクセス許可の詳細については、「*Amazon EC2 ユーザーガイド*」の「[Amazon EC2 の IAM ポリシー](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-policies-for-amazon-ec2.html)」を参照してください。

## キーペアを作成する
<a name="creating-a-key-pair"></a>

キーペアを作成するには、`[aws ec2 create-key-pair](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-key-pair.html)` コマンドを `--query` オプションおよび `--output text` オプションと共に使用して、プライベートキーをファイルに直接パイプします。

```
$ aws ec2 create-key-pair --key-name MyKeyPair --query 'KeyMaterial' --output text > MyKeyPair.pem
```

PowerShell では、`> file` リダイレクトはデフォルトで UTF-8 エンコードされます。これは一部の SSH クライアントでは使用できません。そのため、出力を `out-file` コマンドにパイプすることによって変換し、エンコードを `ascii` に明示的に設定する必要があります。

```
PS C:\>aws ec2 create-key-pair --key-name MyKeyPair --query 'KeyMaterial' --output text | out-file -encoding ascii -filepath MyKeyPair.pem
```

出力された `MyKeyPair.pem` ファイルは以下のようになります。

```
-----BEGIN RSA PRIVATE KEY-----
EXAMPLEKEYKCAQEAy7WZhaDsrA1W3mRlQtvhwyORRX8gnxgDAfRt/gx42kWXsT4rXE/b5CpSgie/
vBoU7jLxx92pNHoFnByP+Dc21eyyz6CvjTmWA0JwfWiW5/akH7iO5dSrvC7dQkW2duV5QuUdE0QW
Z/aNxMniGQE6XAgfwlnXVBwrerrQo+ZWQeqiUwwMkuEbLeJFLhMCvYURpUMSC1oehm449ilx9X1F
G50TCFeOzfl8dqqCP6GzbPaIjiU19xX/azOR9V+tpUOzEL+wmXnZt3/nHPQ5xvD2OJH67km6SuPW
oPzev/D8V+x4+bHthfSjR9Y7DvQFjfBVwHXigBdtZcU2/wei8D/HYwIDAQABAoIBAGZ1kaEvnrqu
/uler7vgIn5m7lN5LKw4hJLAIW6tUT/fzvtcHK0SkbQCQXuriHmQ2MQyJX/0kn2NfjLV/ufGxbL1
mb5qwMGUnEpJaZD6QSSs3kICLwWUYUiGfc0uiSbmJoap/GTLU0W5Mfcv36PaBUNy5p53V6G7hXb2
bahyWyJNfjLe4M86yd2YK3V2CmK+X/BOsShnJ36+hjrXPPWmV3N9zEmCdJjA+K15DYmhm/tJWSD9
81oGk9TopEp7CkIfatEATyyZiVqoRq6k64iuM9JkA3OzdXzMQexXVJ1TLZVEH0E7bhlY9d8O1ozR
oQs/FiZNAx2iijCWyv0lpjE73+kCgYEA9mZtyhkHkFDpwrSM1APaL8oNAbbjwEy7Z5Mqfql+lIp1
YkriL0DbLXlvRAH+yHPRit2hHOjtUNZh4Axv+cpg09qbUI3+43eEy24B7G/Uh+GTfbjsXsOxQx/x
p9otyVwc7hsQ5TA5PZb+mvkJ5OBEKzet9XcKwONBYELGhnEPe7cCgYEA06Vgov6YHleHui9kHuws
ayav0elc5zkxjF9nfHFJRry21R1trw2Vdpn+9g481URrpzWVOEihvm+xTtmaZlSp//lkq75XDwnU
WA8gkn6O3QE3fq2yN98BURsAKdJfJ5RL1HvGQvTe10HLYYXpJnEkHv+Unl2ajLivWUt5pbBrKbUC
gYBjbO+OZk0sCcpZ29sbzjYjpIddErySIyRX5gV2uNQwAjLdp9PfN295yQ+BxMBXiIycWVQiw0bH
oMo7yykABY7Ozd5wQewBQ4AdSlWSX4nGDtsiFxWiI5sKuAAeOCbTosy1s8w8fxoJ5Tz1sdoxNeGs
Arq6Wv/G16zQuAE9zK9vvwKBgF+09VI/1wJBirsDGz9whVWfFPrTkJNvJZzYt69qezxlsjgFKshy
WBhd4xHZtmCqpBPlAymEjr/TOlbxyARmXMnIOWIAnNXMGB4KGSyl1mzSVAoQ+fqR+cJ3d0dyPl1j
jjb0Ed/NY8frlNDxAVHE8BSkdsx2f6ELEyBKJSRr9snRAoGAMrTwYneXzvTskF/S5Fyu0iOegLDa
NWUH38v/nDCgEpIXD5Hn3qAEcju1IjmbwlvtW+nY2jVhv7UGd8MjwUTNGItdb6nsYqM2asrnF3qS
VRkAKKKYeGjkpUfVTrW0YFjXkfcrR/V+QFL5OndHAKJXjW7a4ejJLncTzmZSpYzwApc=
-----END RSA PRIVATE KEY-----
```

プライベートキーは AWS に保存されず、作成時に***のみ***取得することができます。後で復元することはできません。代わりに、プライベートキーを紛失した場合は、新しいキーペアを作成する必要があります。

Linux コンピュータからインスタンスに接続している場合は、他のユーザーが読み取れないように、次のコマンドを使用してプライベートキーファイルのアクセス許可を設定することをお勧めします。

```
$ chmod 400 MyKeyPair.pem
```

## キーペアの表示
<a name="displaying-a-key-pair"></a>

「フィンガープリント」はキーペアから生成され、これを使用してローカルマシンのプライベートキーが AWS に保存されたパブリックキーと一致することを確認できます。

フィンガープリントは、DER でエンコードされたプライベートキーのコピーから取得される SHA1 ハッシュです。この値はキーペアの作成時にキャプチャされて、パブリックキーとともに AWS に格納されます。フィンガープリントは、Amazon EC2 コンソールで、または AWS CLI コマンド `[aws ec2 describe-key-pairs](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-key-pairs.html)` を実行することで表示できます。

次の例は、`MyKeyPair` のフィンガープリントを表示します。

```
$ aws ec2 describe-key-pairs --key-name MyKeyPair
{
    "KeyPairs": [
        {
            "KeyName": "MyKeyPair",
            "KeyFingerprint": "1f:51:ae:28:bf:89:e9:d8:1f:25:5d:37:2d:7d:b8:ca:9f:f5:f1:6f"
        }
    ]
}
```

キーとフィンガープリントの詳細については、「*Amazon EC2 ユーザーガイド*」の「[Amazon EC2 キーペア](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html)」を参照してください。

## キーペアの削除
<a name="deleting-a-key-pair"></a>

キーペアを削除するには、*`MyKeyPair`* を削除するペアの名前に置き換えて、`[aws ec2 delete-key-pair](https://docs.aws.amazon.com/cli/latest/reference/ec2/delete-key-pair.html)` コマンドを実行します。

```
$ aws ec2 delete-key-pair --key-name MyKeyPair
```

## リファレンス
<a name="cli-services-ec2-keypairs-references"></a>

**AWS CLI リファレンス:**
+ `[aws ec2](https://docs.aws.amazon.com/cli/latest/reference/ec2/index.html)`
+ `[aws ec2 create-key-pair](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-key-pair.html)`
+ `[aws ec2 delete-key-pair](https://docs.aws.amazon.com/cli/latest/reference/ec2/delete-key-pair.html)`
+ `[aws ec2 describe-key-pairs](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-key-pairs.html)`

**その他のリファレンス:**
+ [Amazon Elastic Compute Cloud のドキュメント](https://docs.aws.amazon.com/ec2/)
+ AWS SDK および AWS CLI のコード例を表示したり、提供したりするには、*GitHub* の [AWS コード例のリポジトリ](https://github.com/awsdocs/aws-doc-sdk-examples/)を参照してください。

# AWS CLI の Amazon EC2 セキュリティグループの作成、設定、および削除
<a name="cli-services-ec2-sg"></a>

本質的にファイアウォールとして動作する Amazon Elastic Compute Cloud (Amazon EC2) インスタンス用のセキュリティグループを作成し、入退出が可能なネットワークトラフィックを決めるルールと共に作成することができます。

AWS Command Line Interface (AWS CLI) を使用して新しいセキュリティグループを作成し、既存のセキュリティグループにルールを追加して、セキュリティグループを削除します。

**注記**  
その他のコマンドの例については、「[AWS CLI リファレンスガイド](https://docs.aws.amazon.com/cli/latest/reference/index.html)」を参照してください。

**Topics**
+ [前提条件](#cli-services-ec2-sg-prereqs)
+ [セキュリティグループの作成](#creating-a-security-group)
+ [ルールをセキュリティグループに追加する](#configuring-a-security-group)
+ [セキュリティグループを削除する](#deleting-a-security-group)
+ [リファレンス](#cli-services-ec2-sg-references)

## 前提条件
<a name="cli-services-ec2-sg-prereqs"></a>

`ec2` コマンドを実行するには、次のことが必要です。
+ AWS CLI をインストールして設定します。詳細については、「[AWS CLI の最新バージョンのインストールまたは更新](getting-started-install.md)」および「」を参照してください。[Authentication and access credentials for the AWS CLI](cli-chap-authentication.md)
+ Amazon EC2 アクセスできるように IAM アクセス許可を設定します。Amazon EC2 に対する IAM アクセス許可の詳細については、「*Amazon EC2 ユーザーガイド*」の「[Amazon EC2 の IAM ポリシー](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-policies-for-amazon-ec2.html)」を参照してください。

## セキュリティグループの作成
<a name="creating-a-security-group"></a>

仮想プライベートクラウド (VPC) に関連するセキュリティグループを作成できます。

次の `[aws ec2 create-security-group](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-security-group.html)` の例は、指定された VPC のセキュリティグループを作成する方法を示しています。

```
$ aws ec2 create-security-group --group-name my-sg --description "My security group" --vpc-id vpc-1a2b3c4d
{
    "GroupId": "sg-903004f8"
}
```

セキュリティグループの初期情報を表示するには、`[aws ec2 describe-security-groups](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-security-groups.html)` コマンドを実行します。EC2-VPC セキュリティグループは、名前ではなく `vpc-id` によってのみ参照することができます。

```
$ aws ec2 describe-security-groups --group-ids sg-903004f8
{
    "SecurityGroups": [
        {
            "IpPermissionsEgress": [
                {
                    "IpProtocol": "-1",
                    "IpRanges": [
                        {
                            "CidrIp": "0.0.0.0/0"
                        }
                    ],
                    "UserIdGroupPairs": []
                }
            ],
            "Description": "My security group"
            "IpPermissions": [],
            "GroupName": "my-sg",
            "VpcId": "vpc-1a2b3c4d",
            "OwnerId": "123456789012",
            "GroupId": "sg-903004f8"
        }
    ]
}
```

## ルールをセキュリティグループに追加する
<a name="configuring-a-security-group"></a>

Amazon EC2 インスタンスを実行するときには、セキュリティグループのルールを有効にして、イメージに接続する手段としての着信ネットワークトラフィックを有効にする必要があります。

例えば、Windows インスタンスを起動する場合、Remote Desktop Protocol (RDP) をサポートするには、一般に TCP ポート 3389 へのインバウンドトラフィックを許可するルールを追加します。Linux インスタンスを起動する場合、SSH 接続をサポートするには、一般に TCP ポート 22 へのインバウンドトラフィックを許可するルールを追加します。

セキュリティグループにルールを追加するには、`[aws ec2 authorize-security-group-ingress](https://docs.aws.amazon.com/cli/latest/reference/ec2/authorize-security-group-ingress.html)` コマンドを使用します。このコマンドの必須パラメータは、コンピュータのパブリック IP アドレス、またはコンピュータが接続しているネットワーク (アドレス範囲の形式で) の [CIDR](https://wikipedia.org/wiki/Classless_Inter-Domain_Routing) 表記です。

**注記**  
当社では、以下のサービス[ https://checkip.global.api.aws/ ](https://checkip.global.api.aws/)を提供し、お客様のパブリック IP アドレスを特定できます。IP アドレスの識別に役立つその他のサービスを見つけるには、ブラウザを使用して「*what is my IP address*」を検索します。ISP 経由、またはファイアウォールの内側から動的な IP アドレスを使用して接続している場合 (プライベートネットワークの NAT ゲートウェイ経由)、アドレスは定期的に変更される場合があります。その場合、クライアントコンピュータによって使用される IP アドレスの範囲を見つける必要があります。

次の例は、IP アドレスを使用して ID `sg-903004f8` を持つ EC2-VPC セキュリティグループに RDP (TCP ポート 3389) のルールを追加する方法を示しています。

まず、あなたの IP アドレスを探してください。

```
$ curl https://checkip.amazonaws.com
x.x.x.x
```

その後、`[aws ec2 authorize-security-group-ingress](https://docs.aws.amazon.com/cli/latest/reference/ec2/authorize-security-group-ingress.html)` コマンドを実行して、セキュリティグループに IP アドレスを追加できます。

```
$ aws ec2 authorize-security-group-ingress --group-id sg-903004f8 --protocol tcp --port 3389 --cidr x.x.x.x/x
```

次のコマンドは、同じセキュリティグループのインスタンスに SSH を有効にする別のルールを追加します。

```
$ aws ec2 authorize-security-group-ingress --group-id sg-903004f8 --protocol tcp --port 22 --cidr x.x.x.x/x
```

セキュリティグループに加えられた変更を表示するには、`[aws ec2 describe-security-groups](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-security-groups.html)` コマンドを実行します。

```
$ aws ec2 describe-security-groups --group-ids sg-903004f8
{
    "SecurityGroups": [
        {
            "IpPermissionsEgress": [
                {
                    "IpProtocol": "-1",
                    "IpRanges": [
                        {
                            "CidrIp": "0.0.0.0/0"
                        }
                    ],
                    "UserIdGroupPairs": []
                }
            ],
            "Description": "My security group"
            "IpPermissions": [
                {
                    "ToPort": 22,
                    "IpProtocol": "tcp",
                    "IpRanges": [
                        {
                            "CidrIp": "x.x.x.x/x"
                        }
                    ]
                    "UserIdGroupPairs": [],
                    "FromPort": 22
                }
            ],
            "GroupName": "my-sg",
            "OwnerId": "123456789012",
            "GroupId": "sg-903004f8"
        }
    ]
}
```

## セキュリティグループを削除する
<a name="deleting-a-security-group"></a>

セキュリティグループを削除するには、`[aws ec2 delete-security-group](https://docs.aws.amazon.com/cli/latest/reference/ec2/delete-security-group.html)` コマンドを実行します。

**注記**  
環境に現在アタッチされているセキュリティグループは削除できません。

次のコマンド例は、EC2-VPC セキュリティグループを削除します。

```
$ aws ec2 delete-security-group --group-id sg-903004f8
```

## リファレンス
<a name="cli-services-ec2-sg-references"></a>

**AWS CLI リファレンス:**
+ `[aws ec2](https://docs.aws.amazon.com/cli/latest/reference/ec2/index.html)`
+ `[aws ec2 authorize-security-group-ingress](https://docs.aws.amazon.com/cli/latest/reference/ec2/authorize-security-group-ingress.html)`
+ `[aws ec2 create-security-group](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-security-group.html)`
+ `[aws ec2 delete-security-group](https://docs.aws.amazon.com/cli/latest/reference/ec2/delete-security-group.html)`
+ `[aws ec2 describe-security-groups](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-security-groups.html)`

**その他のリファレンス:**
+ [Amazon Elastic Compute Cloud のドキュメント](https://docs.aws.amazon.com/ec2/)
+ AWS SDK および AWS CLI のコード例を表示したり、提供したりするには、*GitHub* の [AWS コード例のリポジトリ](https://github.com/awsdocs/aws-doc-sdk-examples/)を参照してください。

# Launching, listing, and deleting Amazon EC2 instances in the AWS CLI
<a name="cli-services-ec2-instances"></a>

AWS Command Line Interface (AWS CLI) を使用して、Amazon Elastic Compute Cloud (Amazon EC2) インスタンスを起動、一覧表示、および削除することができます。AWS 無料利用枠に含まれないインスタンスを起動する場合は、インスタンスを起動すると料金が発生し、そのインスタンスの実行中はアイドル状態であっても料金がかかります。

**注記**  
その他のコマンドの例については、「[AWS CLI リファレンスガイド](https://docs.aws.amazon.com/cli/latest/reference/index.html)」を参照してください。

**Topics**
+ [前提条件](#cli-services-ec2-instances-prereqs)
+ [インスタンスの起動](#launching-instances)
+ [インスタンスへのブロックデバイスの追加](#block-device-mapping)
+ [インスタンスへのタグの追加](#tagging-instances)
+ [インスタンスへの接続](#connecting-to-instances)
+ [インスタンスの一覧表示](#listing-instances)
+ [インスタンスの削除](#terminating-instances)
+ [リファレンス](#cli-services-ec2-instances-references)

## 前提条件
<a name="cli-services-ec2-instances-prereqs"></a>

このトピックの `ec2` コマンドを実行するには、次の操作を行う必要があります。
+ AWS CLI をインストールして設定します。詳細については、「[AWS CLI の最新バージョンのインストールまたは更新](getting-started-install.md)」および「」を参照してください。[Authentication and access credentials for the AWS CLI](cli-chap-authentication.md)
+ Amazon EC2 アクセスできるように IAM アクセス許可を設定します。Amazon EC2 に対する IAM アクセス許可の詳細については、「*Amazon EC2 ユーザーガイド*」の「[Amazon EC2 の IAM ポリシー](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-policies-for-amazon-ec2.html)」を参照してください。
+ [キーペア](cli-services-ec2-keypairs.md)と[セキュリティグループ](cli-services-ec2-sg.md)を作成します。
+ Amazon マシンイメージ (AMI) を選択し、AMI ID をメモします。詳しくは、「*Amazon EC2 ユーザーガイド*」の「[適切な AMI の検索](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/finding-an-ami.html)」を参照してください。

## インスタンスの起動
<a name="launching-instances"></a>

選択した AMI を使用して Amazon EC2 インスタンスを起動するには、`[aws ec2 run-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/run-instances.html)` コマンドを使用します。インスタンスは、仮想プライベートクラウド (VPC) で起動できます。

当初、インスタンスは `pending` 状態で表示されますが、数分後に `running` 状態に変わります。

以下の例は、`t2.micro` インスタンスを指定された VPC のサブネットで起動する方法を示しています。*斜体で示されている*パラメータ値をユーザー自身の値に置き換えてください。

```
$ aws ec2 run-instances --image-id ami-xxxxxxxx --count 1 --instance-type t2.micro --key-name MyKeyPair --security-group-ids sg-903004f8 --subnet-id subnet-6e7f829e
{
    "OwnerId": "123456789012",
    "ReservationId": "r-5875ca20",
    "Groups": [
        {
            "GroupName": "my-sg",
            "GroupId": "sg-903004f8"
        }
    ],
    "Instances": [
        {
            "Monitoring": {
                "State": "disabled"
            },
            "PublicDnsName": null,
            "Platform": "windows",
            "State": {
                "Code": 0,
                "Name": "pending"
            },
            "EbsOptimized": false,
            "LaunchTime": "2013-07-19T02:42:39.000Z",
            "PrivateIpAddress": "10.0.1.114",
            "ProductCodes": [],
            "VpcId": "vpc-1a2b3c4d",
            "InstanceId": "i-5203422c",
            "ImageId": "ami-173d747e",
            "PrivateDnsName": "ip-10-0-1-114.ec2.internal",
            "KeyName": "MyKeyPair",
            "SecurityGroups": [
                {
                    "GroupName": "my-sg",
                    "GroupId": "sg-903004f8"
                }
            ],
            "ClientToken": null,
            "SubnetId": "subnet-6e7f829e",
            "InstanceType": "t2.micro",
            "NetworkInterfaces": [
                {
                    "Status": "in-use",
                    "SourceDestCheck": true,
                    "VpcId": "vpc-1a2b3c4d",
                    "Description": "Primary network interface",
                    "NetworkInterfaceId": "eni-a7edb1c9",
                    "PrivateIpAddresses": [
                        {
                            "PrivateDnsName": "ip-10-0-1-114.ec2.internal",
                            "Primary": true,
                            "PrivateIpAddress": "10.0.1.114"
                        }
                    ],
                    "PrivateDnsName": "ip-10-0-1-114.ec2.internal",
                    "Attachment": {
                        "Status": "attached",
                        "DeviceIndex": 0,
                        "DeleteOnTermination": true,
                        "AttachmentId": "eni-attach-52193138",
                        "AttachTime": "2013-07-19T02:42:39.000Z"
                    },
                    "Groups": [
                        {
                            "GroupName": "my-sg",
                            "GroupId": "sg-903004f8"
                        }
                    ],
                    "SubnetId": "subnet-6e7f829e",
                    "OwnerId": "123456789012",
                    "PrivateIpAddress": "10.0.1.114"
                }              
            ],
            "SourceDestCheck": true,
            "Placement": {
                "Tenancy": "default",
                "GroupName": null,
                "AvailabilityZone": "us-west-2b"
            },
            "Hypervisor": "xen",
            "BlockDeviceMappings": [
                {
                    "DeviceName": "/dev/sda1",
                    "Ebs": {
                        "Status": "attached",
                        "DeleteOnTermination": true,
                        "VolumeId": "vol-877166c8",
                        "AttachTime": "2013-07-19T02:42:39.000Z"
                    }
                }              
            ],
            "Architecture": "x86_64",
            "StateReason": {
                "Message": "pending",
                "Code": "pending"
            },
            "RootDeviceName": "/dev/sda1",
            "VirtualizationType": "hvm",
            "RootDeviceType": "ebs",
            "Tags": [
                {
                    "Value": "MyInstance",
                    "Key": "Name"
                }
            ],
            "AmiLaunchIndex": 0
        }
    ]
}
```

## インスタンスへのブロックデバイスの追加
<a name="block-device-mapping"></a>

起動する各インスタンスにはルートデバイスボリュームが関連付けられています。ブロックデバイスマッピングを使用すると、インスタンスの起動時にインスタンスにアタッチする追加の Amazon Elastic Block Store (Amazon EBS) ボリュームまたはインスタンスストアボリュームを指定できます。

ブロックデバイスをインスタンスに追加するには、`--block-device-mappings` を使用するときに `run-instances` オプションを指定します。

次のパラメータ例では、20 GB のサイズの標準の Amazon EBS ボリュームをプロビジョニングし、識別子 `/dev/sdf` を使用してインスタンスにマッピングします。

```
--block-device-mappings "[{\"DeviceName\":\"/dev/sdf\",\"Ebs\":{\"VolumeSize\":20,\"DeleteOnTermination\":false}}]"
```

次の例では、既存のスナップショットに基づいて `/dev/sdf` にマッピングされる Amazon EBS ボリュームを追加します。スナップショットは、ボリュームに自動的にロードされるイメージを表します。スナップショットを指定するとき、ボリュームサイズを指定する必要はありません。イメージを保持できる十分な大きさになります。ただし、サイズを指定する場合は、スナップショットのサイズ以上である必要があります。

```
--block-device-mappings "[{\"DeviceName\":\"/dev/sdf\",\"Ebs\":{\"SnapshotId\":\"snap-a1b2c3d4\"}}]"
```

次の例は、2 つのボリュームをインスタンスに追加します。インスタンスで使用できるボリュームの数は、インスタンスタイプによって異なります。

```
--block-device-mappings "[{\"DeviceName\":\"/dev/sdf\",\"VirtualName\":\"ephemeral0\"},{\"DeviceName\":\"/dev/sdg\",\"VirtualName\":\"ephemeral1\"}]"
```

次の例では、マッピング (`/dev/sdj`) を作成しますが、インスタンスのボリュームはプロビジョニングされません。

```
--block-device-mappings "[{\"DeviceName\":\"/dev/sdj\",\"NoDevice\":\"\"}]"
```

詳細については、「*Amazon EC2 ユーザーガイド*」の「[ブロックデバイスマッピング](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/block-device-mapping-concepts.html)」を参照してください。

## インスタンスへのタグの追加
<a name="tagging-instances"></a>

タグとは、AWS リソースに付けるラベルです。リソースにメタデータを追加して、さまざまな目的に使用できます。詳細については、「*Amazon EC2 ユーザーガイド*」の「[リソースのタグ付け](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html)」を参照してください。

次の例は、`[aws ec2 create-tags](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-tags.html)` コマンドを使用して、キー名「`Name`」と値「`MyInstance`」を持つタグを指定されたインスタンスに追加する方法を示しています。

```
$ aws ec2 create-tags --resources i-5203422c --tags Key=Name,Value=MyInstance
```

## インスタンスへの接続
<a name="connecting-to-instances"></a>

実行中のインスタンスに接続して、目の前にあるコンピュータと同じように使用することができます。詳細については、「*Amazon EC2 ユーザーガイド*」の「[Amazon EC2 インスタンスに接続する](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connect-to-linux-instance.html)」を参照してください。

## インスタンスの一覧表示
<a name="listing-instances"></a>

AWS CLI を使用して、インスタンスを一覧表示し、それらの情報を表示できます。すべてのインスタンスを一覧表示することも、目的のインスタンスに基づいて結果をフィルタリングすることもできます。

次に、`[aws ec2 describe-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instances.html)` コマンドの使用例を示します。

次のコマンドでは、すべてのインスタンスが一覧表示されます。

```
$ aws ec2 describe-instances
```

次のコマンドは、リストを `t2.micro` インスタンスのみにフィルタリングして、一致した `InstanceId` 値のみを出力します。

```
$ aws ec2 describe-instances --filters "Name=instance-type,Values=t2.micro" --query "Reservations[].Instances[].InstanceId"
[
    "i-05e998023d9c69f9a"
]
```

次のコマンドは、タグ `Name=MyInstance` を持つインスタンスをリストします。

```
$ aws ec2 describe-instances --filters "Name=tag:Name,Values=MyInstance"
```

次のコマンドは、`ami-x0123456`、`ami-y0123456`、および `ami-z0123456` のいずれかの AMI を使用して起動されたインスタンスをリストします。

```
$ aws ec2 describe-instances --filters "Name=image-id,Values=ami-x0123456,ami-y0123456,ami-z0123456"
```

## インスタンスの削除
<a name="terminating-instances"></a>

AWS CLI を使用して、不要になった Amazon EC2 インスタンスを終了 (削除) できます。

**重要**  
**インスタンスの終了は恒久的で、元に戻すことができません。**  
インスタンスを終了すると、そのインスタンスには接続できなくなり、復元することもできません。アタッチされている Amazon EBS ボリュームで、終了時に削除されるように設定されているものも、すべて恒久的に削除され、復元できません。インスタンスストアボリュームに保存されているデータは、すべて恒久的に失われます。詳細については、「[インスタンスの終了方法](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/how-ec2-instance-termination-works.html)」を参照してください。  
インスタンスを終了する前に、終了後も保持する必要があるすべてのデータを永続的ストレージにバックアップしたことを確認してください。

インスタンスの状態が `shutting-down` または `terminated` に変わったら、そのインスタンスへの課金は停止します。後でインスタンスに再接続する必要がある場合は、`terminate-instances` の代わりに [stop-instances](https://docs.aws.amazon.com/cli/v1/reference/ec2/stop-instances.html) を使用します。詳細については、*Amazon EC2 ユーザーガイド* の [インスタンスの終了](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/terminating-instances.html) を参照してください。

次の例は、`[aws ec2 terminate-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/terminate-instances.html)` コマンドを使用してインスタンスを削除する方法を示しています。

```
$ aws ec2 terminate-instances --instance-ids i-5203422c
{
    "TerminatingInstances": [
        {
            "InstanceId": "i-5203422c",
            "CurrentState": {
                "Code": 32,
                "Name": "shutting-down"
            },
            "PreviousState": {
                "Code": 16,
                "Name": "running"
            }
        }
    ]
}
```

## リファレンス
<a name="cli-services-ec2-instances-references"></a>

**AWS CLI リファレンス:**
+ `[aws ec2](https://docs.aws.amazon.com/cli/latest/reference/ec2/index.html)`
+ `[aws ec2 create-tags](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-tags.html)`
+ `[aws ec2 describe-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instances.html)`
+ `[aws ec2 run-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/run-instances.html)`
+ `[aws ec2 terminate-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/terminate-instances.html)`

**その他のリファレンス:**
+ [Amazon Elastic Compute Cloud のドキュメント](https://docs.aws.amazon.com/ec2/)
+ AWS SDK および AWS CLI のコード例を表示したり、提供したりするには、*GitHub* の [AWS コード例のリポジトリ](https://github.com/awsdocs/aws-doc-sdk-examples/)を参照してください。

# Change an Amazon EC2 instance type with a bash script in the AWS CLI
<a name="cli-services-ec2-instance-type-script"></a>

この Amazon EC2 用の bash スクリプト例は、AWS Command Line Interface (AWS CLI) を使用して Amazon EC2 インスタンスのインスタンスタイプを変更します。実行中の場合はインスタンスを停止し、インスタンスタイプを変更してから、リクエストに応じてインスタンスを再起動します。シェルスクリプトは、コマンドラインインターフェイスで実行するように設計されたプログラムです。

**注記**  
その他のコマンドの例については、「[AWS CLI リファレンスガイド](https://docs.aws.amazon.com/cli/latest/reference/index.html)」を参照してください。

**Topics**
+ [開始する前に](#cli-services-ec2-instance-type-script-prereqs)
+ [この例について](#cli-services-ec2-instance-type-script-about)
+ [パラメータ](#cli-services-ec2-instance-type-script-params)
+ [ファイル](#cli-services-ec2-instance-type-script-files.title)
+ [リファレンス](#cli-services-ec2-instance-type-script-references)

## 開始する前に
<a name="cli-services-ec2-instance-type-script-prereqs"></a>

以下の例を実行する前に、次のことを完了する必要があります。
+ AWS CLI をインストールして設定します。詳細については、「[AWS CLI の最新バージョンのインストールまたは更新](getting-started-install.md)」および「」を参照してください。[Authentication and access credentials for the AWS CLI](cli-chap-authentication.md)
+ 使用するプロファイルには、例によって実行される AWS オペレーションに対する許可が必要です。
+ 停止および変更するアクセス許可を持つ、アカウントで実行中の Amazon EC2 インスタンス。テストスクリプトを実行すると、インスタンスが起動し、タイプの変更がテストされてから、インスタンスが終了します。
+ AWS のベストプラクティスとして、このコードには最小権限を付与するか、タスクの実行に必要な許可のみを付与します。詳細については、*AWS Identity and Access Management (IAM) ユーザーガイド*の「[最小限の特権を認める](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege)」を参照してください。
+ このコードは、すべての AWS リージョンでテストされているわけではありません。AWS の一部のサービスは、特定のリージョンでのみ利用可能です。詳細については、*AWS 全般のリファレンスガイド*の「[サービスエンドポイントとクォータ](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html)」を参照してください。
+ このコードを実行すると、AWS アカウントに料金が請求される場合があります。作業が終了したら、このスクリプトによって作成されたすべてのリソースを確実に削除するのはお客様の責任になります。

## この例について
<a name="cli-services-ec2-instance-type-script-about"></a>

この例は、シェルスクリプトファイル `change_ec2_instance_type.sh` 内の関数として記述されており、別のスクリプトまたはコマンドラインから `source` できます。各スクリプトファイルには、各関数について説明するコメントが含まれています。関数がメモリに置かれたら、コマンドラインから呼び出すことができます。例えば、次のコマンドは、指定されたインスタンスのタイプを `t2.nano` に変更します。

```
$ source ./change_ec2_instance_type.sh
$ ./change_ec2_instance_type -i *instance-id* -t new-type
```

完全な例とダウンロード可能なスクリプトファイルについては、*GitHub* の *AWS コード例のリポジトリ*の「[Change Amazon EC2 Instance Type](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/aws-cli/bash-linux/ec2/change-ec2-instance-type)」を参照してください。

## パラメータ
<a name="cli-services-ec2-instance-type-script-params"></a>

**-i** - *(文字列)* 変更するインスタンス ID を指定します。

**-t** - *(文字列)* 切り替え先の Amazon EC2 インスタンスタイプを指定します。

**-r** - *(スイッチ)* デフォルトでは、これは設定されていません。`-r` が設定されている場合、タイプの切り替え後にインスタンスを再起動します。

**-f** - *(スイッチ)* デフォルトでは、スクリプトは切り替えを行う前にインスタンスのシャットダウンを確認するプロンプトを表示します。`-f` が設定されている場合、この関数はインスタンスをシャットダウンしてタイプを切り替える前にユーザーにプロンプトを表示しません。

**-v** - *(スイッチ)* デフォルトでは、スクリプトはサイレントに動作し、エラーが発生した場合のみ出力を表示します。`-v` が設定されている場合、関数はそのオペレーション全体にわたってステータスを表示します。

## ファイル
<a name="cli-services-ec2-instance-type-script-files.title"></a>

**`change_ec2_instance_type.sh`**  
メインスクリプトファイルには、次のタスクを実行する `change_ec2_instance_type()` 関数が含まれています。  
+ 指定された Amazon EC2 インスタンスが存在することを検証する。
+ `-f` が選択されていない限り、インスタンスを停止する前にユーザーに警告を表示します。
+ インスタンスタイプを変更する。
+ `-r` を設定した場合、インスタンスを再起動し、インスタンスが実行中であることを確認します。
`[change\$1ec2\$1instance\$1type.sh](https://github.com/awsdocs/aws-doc-sdk-examples/blob/main/aws-cli/bash-linux/ec2/change-ec2-instance-type/change_ec2_instance_type.sh)` のコードを *GitHub* で表示します。

**`test_change_ec2_instance_type.sh`**  
ファイル `test_change_ec2_instance_type.sh` のスクリプトは、`change_ec2_instance_type` 関数のさまざまなコードパスをテストします。テストスクリプトのすべてのステップが正しく動作する場合、テストスクリプトは作成したすべてのリソースを削除します。  
テストスクリプトは、次のパラメータを使用して実行できます。  
+ **-v** - *(スイッチ)* 各テストは、実行時に合格/失敗ステータスを示します。デフォルトでは、テストはサイレントに実行され、出力には最終的な合格/失敗ステータスのみが含まれます。
+ **-i** - *(スイッチ)* 各テストの後にスクリプトが一時停止し、各ステップの中間結果を参照できるようにします。Amazon EC2 コンソールを使用して、インスタンスの現在のステータスを調べることができます。プロンプトで *Enter* キーを押すと、スクリプトは次のステップに進みます。
`[test\$1change\$1ec2\$1instance\$1type.sh](https://github.com/awsdocs/aws-doc-sdk-examples/blob/main/aws-cli/bash-linux/ec2/change-ec2-instance-type/test_change_ec2_instance_type.sh)` のコードを *GitHub* で表示します。

**`awsdocs_general.sh`**  
スクリプトファイル `awsdocs_general.sh` には、AWS CLI の高度な例全体で使用される汎用関数が格納されています。  
`[awsdocs\$1general.sh](https://github.com/awsdocs/aws-doc-sdk-examples/blob/main/aws-cli/bash-linux/ec2/change-ec2-instance-type/awsdocs_general.sh)` のコードを *GitHub* で表示します。

## リファレンス
<a name="cli-services-ec2-instance-type-script-references"></a>

**AWS CLI リファレンス:**
+ `[aws ec2](https://docs.aws.amazon.com/cli/v1/reference/ec2/index.html)`
+ `[aws ec2 describe-instances](https://docs.aws.amazon.com/cli/v1/reference/ec2/describe-instances.html)`
+ `[aws ec2 modify-instance-attribute](https://docs.aws.amazon.com/cli/v1/reference/ec2/modify-instance-attribute.html)`
+ `[aws ec2 start-instances](https://docs.aws.amazon.com/cli/v1/reference/ec2/start-instances.html)`
+ `[aws ec2 stop-instances](https://docs.aws.amazon.com/cli/v1/reference/ec2/stop-instances.html)`
+ `[aws ec2 wait instance-running](https://docs.aws.amazon.com/cli/v1/reference/ec2/wait/instance-running.html)`
+ `[aws ec2 wait instance-stopped](https://docs.aws.amazon.com/cli/v1/reference/ec2/wait/instance-stopped.html)`

**その他のリファレンス:**
+ [Amazon Elastic Compute Cloud のドキュメント](https://docs.aws.amazon.com/ec2/)
+ AWS SDK および AWS CLI のコード例を表示したり、提供したりするには、*GitHub* の [AWS コード例のリポジトリ](https://github.com/awsdocs/aws-doc-sdk-examples/)を参照してください。