

# 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/)を参照してください。