

# Amazon EC2 インスタンスの停止と開始
<a name="Stop_Start"></a>

インスタンスにルートボリュームとして Amazon EBS ボリュームがある場合、そのインスタンスを停止して開始できます。ユーザーがインスタンスを停止すると、インスタンスはシャットダウンされます。インスタンスを開始すると、通常、インスタンスは基盤となる新しいホストコンピュータに移行され、新しいパブリック IPv4 アドレスが割り当てられます。

インスタンスの停止は、ユーザーが開始する (インスタンスを手動で停止する場合) ことも、AWS が開始する (インスタンスの基盤となるホストの回復不可能な障害が AWS によって検出されたときに発生するスケジュールされた停止イベントに応じて) こともできます。

ユーザーが開始する停止の場合は、インスタンスからオペレーティングシステムの停止コマンドを実行するのではなく、Amazon EC2 コンソール、CLI、または API を使用することをお勧めします。Amazon EC2 を使用する場合、インスタンスが数分以内に正常にシャットダウンされない場合、Amazon EC2 はハードシャットダウンを実行します。さらに、AWS CloudTrail はインスタンスが停止したたときの API レコードを作成します。

このトピックでは、ユーザーが開始する停止を実行する方法について説明します。AWS によって実行される停止の詳細については、「[停止またはリタイアがスケジュールされている Amazon EC2 インスタンスを管理する](schedevents_actions_retire.md)」を参照してください。

インスタンスを停止しても、そのインスタンスは削除されません。インスタンスが必要なくなったら、終了することができます。詳細については「[Amazon EC2 インスタンスを終了する](terminating-instances.md)」を参照してください。インスタンスを休止状態にしてインスタンスメモリ (RAM) の内容を保存する場合はを参照してください。[Amazon EC2 インスタンスの休止](Hibernate.md)インスタンスライフサイクルアクションの違いについてはを参照してください。[インスタンスの状態の違い](ec2-instance-lifecycle.md#lifecycle-differences)

**Topics**
+ [仕組み](how-ec2-instance-stop-start-works.md)
+ [インスタンスを停止するメソッド](instance-stop-methods.md)
+ [手動で停止して開始](#starting-stopping-instances)
+ [自動的に停止して開始](#stop-start-ec2-instances-on-a-schedule)
+ [実行中および停止中のインスタンスをすべて検索](#find-running-and-stopped-instances-in-globalview)
+ [初期と最新の起動時間を確認](#find-initial-launch-time)
+ [停止保護を有効にします](ec2-stop-protection.md)

## インスタンスを手動で停止して開始する
<a name="starting-stopping-instances"></a>

ユーザーは Amazon EBS-backed インスタンス (EBS ルートボリュームがあるインスタンス) を停止および開始できます。インスタンスストアルートボリュームがあるインスタンスを停止および開始することはできません。

デフォルトのメソッドを使用してインスタンスを停止すると、正常なオペレーティングシステム (OS) のシャットダウンが試行されます。正常な OS シャットダウンをバイパスすることはできますが、データの整合性がリスクにさらされる可能性があります。

**警告**  
インスタンスを停止すると、インスタンスストアボリューム上のデータは消去されます。インスタンスを停止する前に、必要なデータをインスタンスストアボリュームから永続的ストレージ (Amazon EBS や Amazon S3 など) にコピーしていることを確認します。

[Linux インスタンス] インスタンスから OS **halt** コマンドを使用しても、シャットダウンは開始されません。**halt**コマンドを使用すると、インスタンスは終了せず、代わりに CPU をに配置して `HLT` CPU 操作を一時停止します。インスタンスは実行状態のままです。

OSの **shutdown** コマンドまたは **poweroff** コマンドを使用してシャットダウンを開始できます。OS コマンドを使用すると、インスタンスはデフォルトで停止します。この動作はいつでも変更できます。詳細については、「[インスタンスによるシャットダウン動作を変更する](Using_ChangingInstanceInitiatedShutdownBehavior.md)」を参照してください。

**注記**  
Amazon EBS-Backed インスタンスを停止し、`stopping` 状態に 「stuck」 が表示されている場合、インスタンスを強制終了できます。詳細については、「[Amazon EC2 インスタンスの停止に関する問題のトラブルシューティング](TroubleshootingInstancesStopping.md)」を参照してください。

**Topics**
+ [正常な OS シャットダウンでインスタンスを停止する](#stop-instance-with-graceful-os-shutdown)
+ [インスタンスを停止して正常な OS シャットダウンをバイパスする](#stop-instance-bypass-graceful-os-shutdown)
+ [インスタンスの開始](#start-ec2-instance)

### 正常な OS シャットダウンでインスタンスを停止する
<a name="stop-instance-with-graceful-os-shutdown"></a>

デフォルトの停止メソッドを使用してインスタンスを停止できます。これには正常な OS シャットダウンの試行が含まれます。詳細については、「[デフォルトの停止](instance-stop-methods.md#ec2-instance-default-stop)」を参照してください。

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

**デフォルトの停止メソッドを使用してインスタンスを停止する方法**

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

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

1. [**インスタンスの状態**]、[**インスタンスの停止**] の順に選択してください。このオプションが無効になっている場合はインスタンスが既に停止しているか、またはルートボリュームがインスタンスストアボリュームです。

1. 確認を求められたら、[**Stop**] を選択してください。インスタンスが停止するまで、数分かかる場合があります。

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

**デフォルトの停止メソッドを使用してインスタンスを停止する方法**  
[stop-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/stop-instances.html) コマンドを使用します。

```
aws ec2 stop-instances --instance-ids {{i-1234567890abcdef0}}
```

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

**デフォルトの停止メソッドを使用してインスタンスを停止する方法**  
「[Stop-EC2Instance](https://docs.aws.amazon.com/powershell/latest/reference/items/Stop-EC2Instance.html)」コマンドレットを使用します。

```
Stop-EC2Instance -InstanceId {{i-1234567890abcdef0}}
```

------

### インスタンスを停止して正常な OS シャットダウンをバイパスする
<a name="stop-instance-bypass-graceful-os-shutdown"></a>

インスタンスを停止するとき、正常な OS シャットダウンをバイパスできます。詳細については、「[OS シャットダウンをスキップして停止する](instance-stop-methods.md#ec2-instance-stop-with-skip-os-shutdown)」を参照してください。

**警告**  
正常な OS シャットダウンをバイパスすると、データの損失または破損 (例えば、メモリコンテンツがディスクにフラッシュされなかったり、処理中の IO が失われたりする) や、シャットダウンスクリプトがスキップされる可能性があります。

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

**インスタンスを停止して正常な OS シャットダウンをバイパスする方法**

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

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

1. [**Instance state (インスタンスの状態)**]、[**Stop instance (インスタンスの停止)**] の順に選択します。

1. **[OS シャットダウンをスキップ]** で、**[OS シャットダウンをスキップ]** チェックボックスをオンにします。コンソールにこのオプションが表示されない場合、現在のリージョンのコンソールではまだ利用できません。ただし、AWS CLI または SDK を使用してこの機能にアクセスするか、コンソールで別のリージョンを試すことができます。

1. **[停止]** を選択します。

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

**インスタンスを停止して正常な OS シャットダウンをバイパスする方法**  
`--skip-os-shutdown` で「[stop-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/stop-instances.html)」コマンドを使用します。

```
aws ec2 stop-instances \
    --instance-ids {{i-1234567890abcdef0}} \
    --skip-os-shutdown
```

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

**インスタンスを停止して正常な OS シャットダウンをバイパスする方法**  
`-SkipOsShutdown $true` で「[Stop-EC2Instance](https://docs.aws.amazon.com/powershell/latest/reference/items/Stop-EC2Instance.html)」コマンドレットを使用します。

```
Stop-EC2Instance `
    -InstanceId {{i-1234567890abcdef0}} `
    -SkipOsShutdown $true
```

------

### インスタンスの開始
<a name="start-ec2-instance"></a>

停止したインスタンスを開始できます。

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

**インスタンスを開始するには**

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

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

1. インスタンスを選択したら、**[インスタンスの状態]** および **[インスタンスを開始]** を選択してください。

   インスタンスが `running` 状態になるまで、数分かかる場合があります。

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

**インスタンスを開始するには**  
[start-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/start-instances.html) コマンドを使用します。

```
aws ec2 start-instances --instance-ids {{i-1234567890abcdef0}}
```

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

**インスタンスを開始するには**  
[Start-EC2Instance](https://docs.aws.amazon.com/powershell/latest/reference/items/Start-EC2Instance.html) コマンドレットを使用します。

```
Start-EC2Instance -InstanceId {{i-1234567890abcdef0}}
```

------

## インスタンスを自動的に停止して開始する
<a name="stop-start-ec2-instances-on-a-schedule"></a>

次のサービスを使用して、インスタンスの停止と開始を自動化できます。

**AWS でインスタンススケジューラを使用する**  
インスタンススケジューラを AWS で使用して、EC2 インスタンスの開始と停止を自動化することができます。詳細については「[CloudFormation で Instance Scheduler を使用して EC2 インスタンスをスケジュールするにはどうすればよいですか?](https://repost.aws/knowledge-center/stop-start-instance-scheduler)」を参照してください。[追加料金が適用される](https://docs.aws.amazon.com/solutions/latest/instance-scheduler-on-aws/cost.html)ことに注意してください。

**AWS Lambda および Amazon EventBridge ルールを使用する**  
Lambda と EventBridge ルールを使用して、スケジュール上のインスタンスを停止および開始することができます。詳細については「[Lambda を使用して、Amazon EC2 インスタンスを一定の間隔で停止および開始するにはどうすればよいですか?](https://repost.aws/knowledge-center/start-stop-lambda-eventbridge)」を参照してください。

**Amazon EC2 Auto Scaling**  
アプリケーションの負荷を処理できる Amazon EC2 インスタンスの数が適切であることを確認するにはAuto Scaling グループを作成します。 Amazon EC2 Auto Scalingは、トラフィック需要を処理する適切な容量をアプリケーションで常に確保できるようにし、必要な場合にのみインスタンスを起動することでコストを節約できます。不要なインスタンスを停止するのではなく、Amazon EC2 Auto Scaling終了させることに注意してください。自動スケーリンググループを設定するには「[Amazon EC2 Auto Scalingをはじめる](https://docs.aws.amazon.com/autoscaling/ec2/userguide/get-started-with-ec2-auto-scaling.html)」を参照してください。

## 実行中および停止中のインスタンスをすべて検索
<a name="find-running-and-stopped-instances-in-globalview"></a>

[Amazon EC2 グローバルビュー](https://console.aws.amazon.com/ec2globalview/home)ではすべてにわたって、実行中と停止中のすべての AWS リージョン のインスタンスを 1 つのページで確認できます。これはインベントリを取得し、忘れられたインスタンスを見つけるのに特に有用です。グローバルビューを使用する方法については「[AWS Global View を使用して複数のリージョンにわたるリソースを表示する](global-view.md)」を参照してください。

あるいは、インスタンスがある各リージョンで、コマンドまたはコマンドレットを実行できます。

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

**リージョンにある EC2 インスタンスの数を入手するには**  
次の [describe-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instances.html) コマンドを使用して、現在のリージョンにあるインスタンスの数を数えます。このコマンドは、インスタンスがあるリージョンごとに実行する必要があります。

```
aws ec2 describe-instances \
    --region {{us-east-2}} \
    --query "length(Reservations[].Instances[])"
```

以下は出力の例です。

```
27
```

**リージョン内の EC2 インスタンスに関する概要情報を取得するには**  
次の [describe-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instances.html) コマンドを使用します。このコマンドは、インスタンスがあるリージョンごとに実行する必要があります。

```
aws ec2 describe-instances \
    --region {{us-east-2}} \
    --query "Reservations[].Instances[].[InstanceId,InstanceType,PrivateIpAddress]" \
    --output table
```

以下は出力の例です。

```
---------------------------------------------------------
|                   DescribeInstances                   |
+---------------------+---------------+-----------------+
|  i-0e3e777f4362f1bf7|  t2.micro     |  10.0.12.9      |
|  i-09453945dcf1529e9|  t2.micro     |  10.0.143.213   |
|  i-08fd74f3f1595fdbd|  m7i.4xlarge  |  10.0.1.103     |
+---------------------+---------------+-----------------+
```

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

**リージョンにある EC2 インスタンスの数を入手するには**  
[Get-EC2Instance](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Instance.html) コマンドレットを使用します。

```
(Get-EC2Instance -Region {{us-east-2}}).Instances.Length
```

以下は出力の例です。

```
27
```

**リージョン内の EC2 インスタンスに関する概要情報を取得するには**  
[Get-EC2Instance](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Instance.html) コマンドレットを使用します。このコマンドは、インスタンスがあるリージョンごとに実行する必要があります。

```
(Get-EC2Instance).Instances | Select InstanceId, InstanceType, PrivateIpAddress
```

以下は出力の例です。

```
InstanceId          InstanceType PrivateIpAddress
----------          ------------ ----------------
i-0e3e777f4362f1bf7 t2.micro     10.0.12.9
i-09453945dcf1529e9 t2.micro     10.0.143.213
i-08fd74f3f1595fdbd m7i.4xlarge  10.0.1.103
```

------

## 初期と最新の起動時間を確認
<a name="find-initial-launch-time"></a>

インスタンスを記述するとき、インスタンスの起動時間は最新の起動時間です。インスタンスを停止して開始すると、起動時間に新しいインスタンスの開始時刻が反映されます。インスタンスの初回起動時間を確認するにはインスタンスを停止して開始した後でも、プライマリネットワークインターフェイスがインスタンスにアタッチされた時刻を確認してください。

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

**直近の起動時間を見つけるには**  
インスタンスを選択し、**[詳細]** タブの **[インスタンスの詳細]** から、**[起動時間]** を見つけます。

**最初の起動時刻を見つけるには**  
インスタンスを選択し、**[ネットワーク]** タブの **[ネットワークインターフェイス]** から [プライマリネットワークインターフェイス] (デバイスインデックスは 0) を見つけます。

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

**最初の起動時間と直近の起動時間を見つけるには**  
次の [describe-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instances.html) コマンドを使用して、指定したインスタンスの最初の起動時間と直近の起動時間の両方を表示します。

```
aws ec2 describe-instances \
    --instance-id {{i-1234567890abcdef0}} \
    --query 'Reservations[].Instances[].{InstanceID:InstanceId,InitialLaunch:NetworkInterfaces[0].Attachment.AttachTime,LastLaunch:LaunchTime}'
```

以下は出力の例です。

```
[
    {
        "InstanceID": "i-1234567890abcdef0",
        "InitialLaunch": "2024-04-19T00:47:08+00:00",
        "LastLaunch": "2024-05-27T06:24:06+00:00"
    }
]
```

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

**直近の起動時間を見つけるには**  
[Get-EC2Instance](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Instance.html) コマンドレットを使用します。

```
(Get-EC2Instance -InstanceId {{i-1234567890abcdef0}}).Instances.LaunchTime
```

以下は出力の例です。

```
Monday, May 27, 2024 6:24:06 AM
```

**最初の起動時刻を見つけるには**  
[Get-EC2Instance](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Instance.html) コマンドレットを使用します。

```
(Get-EC2Instance -InstanceId {{i-1234567890abcdef0}}).Instances.NetworkInterfaces.Attachment.AttachTime
```

以下は出力の例です。

```
Friday, April 19, 2024 12:47:08 AM
```

------