AWS Tools for Windows PowerShellを使ってみた

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

こんにちは。
PowerShellツールを使っていますか? 私はほとんど使った事がありませんでした。
調べてもあまり情報が出てこない!という事で、ご紹介したいと思います。

インストール

お手元のPCにインストールします。インストールには以下の環境が必要です。

  • Microsoft Windows XP またはそれ以降
  • Windows PowerShell 2.0 またはそれ以降

http://aws.amazon.com/powershell/にアクセスし、 [AWS Tools for Windows]を選択します。

1

msiファイルがダウンロードされますので、実行しインストールします。
AWS提供のWindowsAMIにはプリインストールされています。

使ってみる

PowerShell ISEを起動

PowerShell ISEを起動します。 2

補完が効いて便利です。
3

初期セットアップ

アクセスキー、シークレットキー、リージョンを指定します。
以下の例では、ap-northeast-1(Tokyoリージョン)を指定しています。

> Initialize-AWSDefaults -AccessKey ****** -SecretKey ****** -Region ap-northeast-1

EC2インスタンスの開始

EC2インスタンスを開始してみます。

> Start-EC2Instance -InstanceId i-******
CurrentState                            InstanceId                              PreviousState
------------                            ----------                              -------------
Amazon.EC2.Model.InstanceState          i-******                              Amazon.EC2.Model.InstanceState
>

EC2インスタンスのステート確認

起動したことを確認します。が、私はこの出力がわかりませんでした。。。

> Get-EC2Instance
GroupNames    : {}
Groups        : {}
Instances     : {key名}
OwnerId       : *************
RequesterId   : 
ReservationId : r-******

GroupNames    : {}
Groups        : {}
Instances     : {key名}
OwnerId       : *************
RequesterId   : 
ReservationId : r-******
(略)
> 

出力を変数に格納し、Get-Memberに渡してみます。
Get-Memberはオブジェクトのプロパティやメソッドを列挙します。
Instancesというプロパティがありますね。

> $result=Get-EC2Instance
> $result | Get-Member
   TypeName: Amazon.EC2.Model.Reservation

Name            MemberType    Definition                                                                         
----            ----------    ----------                                                                         
(略)
Instances       Property      System.Collections.Generic.List[Amazon.EC2.Model.Instance] Instances {get;set;}    
(略)
> 

Instancesプロパティに対して、Get-Memberを実行します。
IntanceIdとStateプロパティが出てきました。

> $result.Instances | Get-Member
   TypeName: Amazon.EC2.Model.Instance
Name                  MemberType    Definition                                                                                                 
----                  ----------    ----------                                                                                                 
(略)   
InstanceId            Property      string InstanceId {get;set;}                                                                               
(略)                                                                         
State                 Property      Amazon.EC2.Model.InstanceState State 
(略)
> 

インスタンスIDを表示します。
添え字をつけてアクセスする事もできますし、長さ(インスタンス数)を確認する事も出来ます。

> $result.Instances.InstanceId
i-*******
i-*******
i-*******
i-*******
i-*******
> $result.Instances.InstanceId[0]
i-******
> $result.Instances.InstanceId.Length
5
>

インスタンスIDとステートのみ表示してみます。
インスタンスの数だけループさせます。インスタンスIDとステートの間にはスペースを入れています。

> $result=Get-EC2Instance
> for($i=0; $i -lt $reslut.Instances.Length; ++$i){$reslut.Instances.InstanceId[$i]+" "+$reslut.Instances.State.Name.Value[$i]}
i-******** running
i-******** stopped
i-******** stopped
i-******** stopped
i-******** running
> 

変数に格納しない場合はこんな形になると思います。
もっと良い方法があれば、教えて下さい。

> Get-EC2Instance | ForEach-Object {Write-Output $("{0} {1} " -f $_.Instances.InstanceId,$_.Instances.State.Name)}
i-******** running
i-******** stopped
i-******** stopped
i-******** stopped
i-******** running
> 

知っていると便利なコマンド

サポートされるサービスの確認

> Get-AWSPowerShellVersion -ListServiceVersionInfo
(略)
Service                                 Noun Prefix                             Version
-------                                 -----------                             -------
Amazon API Gateway                      AG                                      2015-07-09
Auto Scaling                            AS                                      2011-01-01
AWS Support API                         ASA                                     2013-04-15
AWS CodeCommit                          CC                                      2015-04-13
AWS CodeDeploy                          CD                                      2014-10-06

(略)
>

Help表示

初回実行時にHelpデータがダウンロードされました。
商用インスタンスでの実行はご注意ください。

> Get-Help Get-EC2Instance

名前
    Get-EC2Instance
    
概要
    Invokes the DescribeInstances operation against Amazon Elastic Compute Cloud.
        
構文
    Get-EC2Instance [[-Instance] <System.Object[]>] [[-Filter] <Amazon.EC2.Model.Filter[]>] [<CommonParameters>]
(略)
> 

コマンドの検索

EC2が含まれるコマンドレットを表示します。

> Get-Command -Module AWSPowerShell -Name "*EC2*"
CommandType     Name                                               ModuleName                                                                         
-----------     ----                                               ----------                                                                         
Cmdlet          Add-EC2ClassicLinkVpc                              AWSPowerShell                                                                      
Cmdlet          Add-EC2InternetGateway                             AWSPowerShell                                                                      
Cmdlet          Add-EC2NetworkInterface                            AWSPowerShell                                                                      
(略)

AWS CLIとの対応を確認

「aws ec2 describe-instances」に対応するコマンドレットは「Get-EC2Instance」である事がわかります。

> Get-AWSCmdletName -AwsCliCommand "aws ec2 describe-instances"
CmdletName                            ServiceOperation                      ServiceName                           CmdletNounPrefix                    
----------                            ----------------                      -----------                           ----------------                    
Get-EC2Instance                       DescribeInstances                     Amazon Elastic Compute Cloud          EC2                                 
> 

おわりに

AWS CLIでは出力を変数に代入する際、テキストやJSONを整形する必要がありますが、
PowerShellでは出力はオブジェクトに入ってくれるので、文字列を整形する必要がありませんでした。
PowerShellでスクリプトを書いて、処理を自動化していきたいです。

参考

Setting up the AWS Tools for Windows PowerShell
AWS マネジメントコンソールを使用して 1 つ以上の IAM ユーザーを作成するには
AWS Tools for Windows PowerShell Cmdlet Reference
AWS Black Belt Tech シリーズ 2015 AWS CLI & AWS Tools for Windows