AWS Tools for PowerShell ことはじめ
想像以上に不人気(記事が少なかった)だったため調べたメモ代わりに置いておきます。
AWS Powershell モジュールを利用すると、aws cliと同様の操作がPowershellの強力なシェル機能を用いて利用できます。
AWS Powershell が強いところ
-
コマンドの補完が完璧なので、ターミナルの入力が高速
コマンド名の補完に加えて、オプションも補完してくれるので手間が少ない -
エディタ「Visual Studio Code」との親和性
Powershellのインテリセンスが充実しているので、ささっと書けるしタイポも少ない -
Powershell特有のオブジェクト操作
Getコマンドの実行結果が基本的にPowershell Objectで返されるので、パイプやフィルター等が利用できる。
こちらに関しては後述します。 -
エラーハンドリングでログファイルを出力したりイベントログを吐かせやすい
コマンドの実行は例外の捕捉が可能なので可読性高いスクリプトが書ける。
AWS Powershell が弱いところ
- Powershell がないと動かない
(不人気の理由)
実行環境
PS > $PSVersionTable
Name Value
---- -----
PSVersion 5.1.17134.228
PSEdition Desktop
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
BuildVersion 10.0.17134.228
CLRVersion 4.0.30319.42000
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
AWS Powershellのインストール&インポート
AWSからインストーラをダウンロードしてインストールする方法もありますが、コンソールからもインストールできます。
PS > Install-Module AWSPowershell
PS > Import-Module AWSPowershell
PS > Get-Module -Name AWSPowershell
ModuleType Version Name ExportedCommands
---------- ------- ---- ----------------
Binary 3.3.343.0 AWSPowerShell {Add-AASScalableTarget, Add-ACMCertificateTag, Add-ADSConfigurationItemsToApplication, Add-AGResourceTag...}
AWS Powershellは基本的にaws cliで使用しているコマンドに対応するコマンドが存在します。
実行ユーザの紐付け
IAMからユーザを作成し、アクセストークンを発行します。
※ユーザに割り当てるロールには操作対象のリソースに対するアクセス権(ポリシー)をアタッチしておきます。
他の記事でたくさん説明されているので、ここでは詳しく取り上げません。
IAMユーザでAWSにアクセスする
AWSに接続するためのCredential情報を保持するプロファイルを作成します。
デフォルトでは以下に存在します。なければ作成して下さい。
C:\Users\<User>\.aws\credentials
[default]
aws_access_key_id = "*********************"
aws_secret_access_key = "*****************************"
プロファイルを指定してAWSに接続します。
PS > Initialize-AWSDefaults -ProfileName "default" -ProfileLocation "C:\Users\<User>\.aws\credentials" -Region "ap-northeast-1"
コマンドの調べ方
詳細なコマンドリファレンスはこちらにあります。これを見たらだいたいのことは分かります。
https://docs.aws.amazon.com/powershell/latest/reference/Index.html
ここではリファレンスを見るのが面倒な人向けにチートコマンドを紹介しておきます。
PS > Get-AWSCmdletName -AwsCliCommand "aws ec2 describe-vpcs"
CmdletName ServiceOperation ServiceName CmdletNounPrefix
---------- ---------------- ----------- ----------------
Get-EC2Vpc DescribeVpcs Amazon Elastic Compute Cloud EC2
上記より、"aws ec2 describe-vpcs" に対応する Powersell コマンドは CmdletName プロパティにある "Get-EC2Vpc" であるとわかります。
コマンド利用例
デフォルトVPCを取得
リソースが持つプロパティを "-Filter" オプションを利用してフィルターすることができます。
フォーマット
-Filter @{Name="[PropertyName]"; Values="[Parametor]"}
PS > $vpc = Get-EC2Vpc -Region "ap-northeast-1" -Filter @{Name="isDefault"; Values="True"}
PS > $vpc
CidrBlock : 172.31.0.0/16
CidrBlockAssociationSet : {vpc-cidr-assoc-xxxxxx}
DhcpOptionsId : dopt-xxxxxxxx
InstanceTenancy : default
Ipv6CidrBlockAssociationSet : {}
IsDefault : True
State : available
Tags : {}
VpcId : vpc-xxxxxxxx
PS > $vpc.VpcId
vpc-xxxxxxxx
この場合、$vpc は System.Object が入っており、各プロパティにアクセスして値を利用できます。
JSONにして操作する部分が不要な分、ライトには扱いやすいと思います。
値を出力する際はJSON、CSV等に変換してあげるとよいかと。
パイプを利用した操作
パイプを利用して取得したインスタンスをそのまま削除します。
PS > Get-EC2-Instance -InstanceId "********" | Remove-EC2-Instance -Force
おそらく一番つまりやすいのは実行ユーザの認証まわりかなーと思います。
また気分次第で追記するかもしれません。