【小ネタ】EBS最適化インスタンスをCLIツールでスペックダウンするときの注意点

2015.07.27

こんにちは。半瀬です。

今回も運用備忘ネタです。コツコツ書きます。

マネジメントコンソールを使用せずに、aws cliやaws tools(windows) などからインスタンスのスペック変更を実行するとき、 EBS最適化インスタンスを、EBS最適化の有効化ができないインスタンスタイプへスペックダウンをした場合、EBS最適化を「無効」とする処理を入れないと起動に失敗します。というお話です(おわり)。

簡単に確認

今回はお問い合わせ頂いた環境がwindowsインスタンスでしたので、「aws tools for windows powershell」 を使用した確認となっています。

以下の2インスタンスを用意します。 ・powershell実行元インスタンス(t2.micro) ・操作対象インスタンス(c4.large+EBS最適化を「有効」として起動)

※ regionはus-west-2(オレゴン)です ※ 実行元インスタンスですが、諸事情によりIAMロールを付与していませんでしたので、AdministratorAccessを持たせたIAMユーザーキーを設定しておきます。

PS C:\Users\Administrator> Set-AWSCredentials -AccessKey xxxxxxxxxxx -SecretKey xxxxxxxxxxx
INFO: Credentials loaded from the supplied key parameters.

起動に失敗するケースを確認します

「Get-EC2InstanceStatus」でインスタンスIDなどを確認します。 powershellインスタンス(操作元)は「i-axxxxxxx」 操作対象インスタンスは「i-bxxxxxxx」 となります。

PS C:\Users\Administrator> Get-EC2InstanceStatus -region us-west-2

AvailabilityZone : us-west-2a
Events           : {}
InstanceId       : i-axxxxxxx
InstanceState    : Amazon.EC2.Model.InstanceState
Status           : Amazon.EC2.Model.InstanceStatusSummary
SystemStatus     : Amazon.EC2.Model.InstanceStatusSummary

AvailabilityZone : us-west-2b
Events           : {}
InstanceId       : i-bxxxxxxx
InstanceState    : Amazon.EC2.Model.InstanceState
Status           : Amazon.EC2.Model.InstanceStatusSummary
SystemStatus     : Amazon.EC2.Model.InstanceStatusSummary

 

スペックダウンのため、停止します

PS C:\Users\Administrator> Stop-EC2Instance -Instance i-bxxxxxxx -Region us-west-2

CurrentState                            InstanceId                              PreviousState
------------                            ----------                              -------------
Amazon.EC2.Model.InstanceState          i-bxxxxxxx                              Amazon.EC2.Model.InstanceState

 

停止したインスタンスのスペックダウン

停止したインスタンスの、EBS最適化が有効になっていることを確認 ↓「EbsOptimized」が「true」(※変更前のインスタンスタイプ:c4.largeも確認

PS C:\Users\Administrator> Get-EC2InstanceAttribute -InstanceId i-bxxxxxxx -Region us-west-2 -Attribute instancetype

BlockDeviceMappings               : {}
DisableApiTermination             : False
EbsOptimized                      : True
Groups                            : {}
InstanceId                        : i-bxxxxxxx
InstanceInitiatedShutdownBehavior :
InstanceType                      : c4.large
KernelId                          :
ProductCodes                      : {}
RamdiskId                         :
RootDeviceName                    :
SourceDestCheck                   : False
SriovNetSupport                   :
UserData                          :

 

インスタンスタイプを「c4.large」から「t2.micro」に変更します。

PS C:\Users\Administrator> Edit-EC2InstanceAttribute -InstanceId i-bxxxxxxx -Region us-west-2 -Attribute instanceType -Value t2.micro

 

変更後のインスタンスタイプの確認 ↓「InstanceType」が「t2.micro」に変更

PS C:\Users\Administrator> Get-EC2InstanceAttribute -InstanceId i-bxxxxxxx -Region us-west-2 -Attribute instancetype

BlockDeviceMappings               : {}
DisableApiTermination             : False
EbsOptimized                      : False
Groups                            : {}
InstanceId                        : i-bxxxxxxx
InstanceInitiatedShutdownBehavior :
InstanceType                      : t2.micro
KernelId                          :
ProductCodes                      : {}
RamdiskId                         :
RootDeviceName                    :
SourceDestCheck                   : False
SriovNetSupport                   :
UserData                          :

 

↑ここで、「EbsOptimized」が「False」となっていることが、確認できます。 「t2.micro」はEBS最適化を利用できないインスタンスタイプなので問題なし → このまま起動してみるか、ということで起動してみると、、

PS C:\Users\Administrator> Start-EC2Instance -InstanceId i-bxxxxxxx -Region us-west-2
Start-EC2Instance : EBS-optimized instances are not supported for your requested configuration. Please check the documentation for supported configurations.
At line:1 char:1
+ Start-EC2Instance -InstanceId i-bxxxxxxx -Region us-west-2
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (Amazon.PowerShe...2InstanceCmdlet:StartEC2InstanceCmdlet) [Start-EC2I
   nstance], InvalidOperationException
    + FullyQualifiedErrorId : Amazon.EC2.AmazonEC2Exception,Amazon.PowerShell.Cmdlets.EC2.StartEC2InstanceCmdlet

「Start-EC2Instance : EBS-optimized instances are not supported for your requested configuration」 怒られてしまいます。

EBS最適化を無効化してから起動しましょう

内部的に「EbsOptimized」が「true」となったままとなっている模様です。 ↓明示的に「false」にしてやると、、

PS C:\Users\Administrator> Edit-EC2InstanceAttribute -InstanceId i-bxxxxxxx -Region us-west-2 -Attribute ebsOptimized -Value false

 

↓確認結果に変化はありません。

PS C:\Users\Administrator> Get-EC2InstanceAttribute -InstanceId i-bxxxxxxx -Region us-west-2 -Attribute ebsOptimized

BlockDeviceMappings               : {}
DisableApiTermination             : False
EbsOptimized                      : False
Groups                            : {}
InstanceId                        : i-bxxxxxxx
InstanceInitiatedShutdownBehavior :
InstanceType                      :
KernelId                          :
ProductCodes                      : {}
RamdiskId                         :
RootDeviceName                    :
SourceDestCheck                   : False
SriovNetSupport                   :
UserData                          :

 

↓ですが、起動コマンドが通るようになります。

PS C:\Users\Administrator> Start-EC2Instance -InstanceId i-bxxxxxxx -Region us-west-2

CurrentState                            InstanceId                              PreviousState
------------                            ----------                              -------------
Amazon.EC2.Model.InstanceState          i-bxxxxxxx                              Amazon.EC2.Model.InstanceState

PS C:\Users\Administrator>

無事起動ができます。

もともとEBS最適化を利用していないインスタンスは。。

念のため、最初からEBS最適化を使っていない場合を確認しておきました。 ・powershell実行元インスタンス(t2.micro) ・操作対象インスタンス(c4.large+EBS最適化を「無効」として起動) 同じように ID「i-bxxxxxxx」に対して実行確認します。 ↓はじめから「EbsOptimized」を「false」で用意

PS C:\Users\Administrator> Get-EC2InstanceAttribute -InstanceId i-bxxxxxxx -Region us-west-2 -Attribute instancetype

BlockDeviceMappings               : {}
DisableApiTermination             : False
EbsOptimized                      : False
Groups                            : {}
InstanceId                        : i-bxxxxxxx
InstanceInitiatedShutdownBehavior :
InstanceType                      : c4.large
KernelId                          :
ProductCodes                      : {}
RamdiskId                         :
RootDeviceName                    :
SourceDestCheck                   : False
SriovNetSupport                   :
UserData                          :

 

停止↓

PS C:\Users\Administrator> Stop-EC2Instance -Instance i-bxxxxxxx -Region us-west-2

CurrentState                            InstanceId                              PreviousState
------------                            ----------                              -------------
Amazon.EC2.Model.InstanceState          i-bxxxxxxx                              Amazon.EC2.Model.InstanceState

 

↓スペック変更

PS C:\Users\Administrator> Edit-EC2InstanceAttribute -InstanceId i-bxxxxxxx -Region us-west-2 -Attribute instanceType -Value t2.micro

 

↓変更確認

PS C:\Users\Administrator> Get-EC2InstanceAttribute -InstanceId i-bxxxxxxx -Region us-west-2 -Attribute instancetype

BlockDeviceMappings               : {}
DisableApiTermination             : False
EbsOptimized                      : False
Groups                            : {}
InstanceId                        : i-bxxxxxxx
InstanceInitiatedShutdownBehavior :
InstanceType                      : t2.micro
KernelId                          :
ProductCodes                      : {}
RamdiskId                         :
RootDeviceName                    :
SourceDestCheck                   : False
SriovNetSupport                   :
UserData                          :

 

↓「ebsOptimized」への操作を加えずに起動してみる

PS C:\Users\Administrator> Start-EC2Instance -InstanceId i-bxxxxxxx -Region us-west-2

CurrentState                            InstanceId                              PreviousState
------------                            ----------                              -------------
Amazon.EC2.Model.InstanceState          i-bxxxxxxx                              Amazon.EC2.Model.InstanceState

 

無事通りました。予めEBS最適化を利用していないインスタンスからのスペックダウンの場合は必要がないようです。

さいごに

EBS最適化インスタンスをCLIツールからスペックダウンをする場合に起動失敗するケースをご紹介しました。 "CLIツールで"EBS最適化インスタンスからEBS最適化を有効化できないインスタンスに、スペックダウンをする場合は、スペック変更とあわせて、EBS最適化を「無効」とする処理を忘れないようにしましょう。

それではー。