AWS Tools for Windows PowerShellを使ってみた
はじめに
こんにちは。
PowerShellツールを使っていますか? 私はほとんど使った事がありませんでした。
調べてもあまり情報が出てこない!という事で、ご紹介したいと思います。
インストール
お手元のPCにインストールします。インストールには以下の環境が必要です。
- Microsoft Windows XP またはそれ以降
- Windows PowerShell 2.0 またはそれ以降
http://aws.amazon.com/powershell/にアクセスし、 [AWS Tools for Windows]を選択します。
msiファイルがダウンロードされますので、実行しインストールします。
AWS提供のWindowsAMIにはプリインストールされています。
使ってみる
PowerShell ISEを起動
初期セットアップ
アクセスキー、シークレットキー、リージョンを指定します。
以下の例では、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