【2022年3月追記】
2022年3月に現職の会社ブログでAWS Tools for PowerShellの入門記事を書きました。
最新の情報は上記記事をご覧ください。
【追記ここまで】
ただいまAWSを勉強中でせっかくなのでAWS Tools for PowerShellを試してみることにしました。
基本的には公式ドキュメントと先人の資料を参考にして試しています。
- AWS Tools for Windows PowerShell | AWS
- AWS Tools for Windows PowerShellを使ってみた | DevelopersIO
- startAWSPowerShell/readme.md at master · senkousya/startAWSPowerShell · GitHub
本エントリは私の備忘録としての側面が強く、詳細な情報は上記参考元を見て頂くのが良いでしょう。
モジュールのインストール
AWS Tools for PowerShellはPowerShellモジュールとして提供されています。
古いPowerShellやオフライン環境向けにMSIインストーラーもありますが、今であればPowerShell Galleryからインストールするのが良いでしょう。
# Windows PowerShell Install-Module -Name AWSPowerShell -Scope CurrentUser -Force
AWS Tools for PowerShellはAzure PowerShellとは異なり一つのモジュールにAWSの各種サービスを管理するためのコマンドがまとめられています。
このため、インストール後のモジュール全体のサイズで90MB程度と大容量であり、インストールには時間が結構かかります。
PowerShell Coreの場合はモジュール名が異なるためこちらとなります。
# PowerShell Core Install-Module -Name AWSPowerShell.NetCore -Scope CurrentUser -Force
サポートされるサービス
公式の手順によると以下のコマンドで管理できるAWSサービスの一覧を取得できるそうです。
Get-AWSPowerShellVersion -ListServiceVersionInfo
ただ、このコマンドの結果は最初の説明文がstring
型、そのあとにPSCutomObject
でサービス情報が出力されるちょっとイケてない感じです。
このため利用できるサービスを純粋に取得するには、
Get-AWSPowerShellVersion -ListServiceVersionInfo | Select-Object -Skip 1
とすると良いでしょう。
認証
AWS Tools for PowerShellの認証はIAMユーザーで発行するアクセスキーを指定する形で行われます。
公式の手順は以下にドキュメント化されています。
アクセスキーの生成
IAMユーザーの設定画面から以下の様な感じで作成しました。
UIはコロコロ変わるでしょうし細かい説明は端折ります。
アクセスキーIDとシークレットアクセスキーを記録しておいてください。
認証情報の設定
先人の資料によるとInitialize-AWSDefaultConfiguration(= Initialize-AWSDefaults)
*1を使い認証情報などの既定値を保存する様ですが、公式ドキュメントを見ると、
Initialize-AWSDefaultConfiguration は実行しないようお勧めします。ただし、PowerShell を実行している EC2 インスタンスの起動にインスタンスプロファイルを使用していなくて、認証情報プロファイルを手動で設定する場合は除きます。この場合は、認証情報プロファイルに認証情報が含まれないことに注意してください。
とあり、基本的にはSet-AWSCredential
を使い認証情報を プロファイル として保存しておくのが良さそうです。
Set-AWSCredential -AccessKey [アクセスキーID] -SecretKey [シークレットアクセスキー] -StoreAs [プロファイル名]
設定した認証情報は
Get-AWSCredential -ListProfileDetail
で参照できます。
また、デフォルトのリージョンはSet-DefaultAWSRegion
で設定できます。
(ただし永続化されません。永続化したい場合はInitialize-AWSDefaultConfiguration
を使うしかない様です)
Set-DefaultAWSRegion -Region ap-northeast-1
リージョン一覧はGet-AWSRegion
で取得できます。
Get-AWSRegion | Where-Object { $_.Name -like "*tokyo*" }
認証情報の保存先
ちなみに、認証情報はデフォルトでWindowsの場合だと
C:\Users\[username]\AppData\Local\AWSToolkit\RegisteredAccounts.json
(AWS SDKストア)
に保存されます。
このAWS SDKストアはAWS SDK for .NETやToolkit for Visual Studioとも共用らしいのですが、細かいことはまだよくわかりませんので正確な情報は公式ドキュメントを見てください。
AWS Tools for PowerShellにおいてはWindows PowerShellとPowerShell Coreで共用されていました。
ただ、AWS CLIで使われる認証情報ファイル
(C:\Users\[username]\.aws\credentials
)とは別物だそうです。
defaultプロファイル
先述のプロファイルですが、名前がdefault
のものを特別視しており、この名前のプロファイルの内容は自動で検索対象になるそうです。
そしてInitialize-AWSDefaultConfiguration
で設定した内容はこのプロファイルに保存されます。
試してみる
とりあえずお試しとしてEC2の情報を取得してみます。
EC2インスタンスはGet-EC2Instance
で取得できる様ですが、こいつの戻り値はAmazon.EC2.Model.Reservation
型であり、実際にはReservationを返します。
「Reservationとは?」という点で理解できてない点はあるのですが、
にあるEC2インスタンスに対するアクションを指しているものと思われます。
このためEC2インスタンス情報を取得するには以下の様にInstances
プロパティを拾ってやる必要があります。
認証情報は-ProfileName
パラメーターで指定してあります。
Get-EC2Instance -ProfileName MyProfile | Select-Object -ExpandProperty Instances | Format-List
とりあえずそれっぽい情報が取得できたので良しとします。
最後に
とりあえずこんな感じです。
わからないことはまだまだ多いのですが、随時内容を更新していければと思います。
*1:Initialize-AWSDefaultsはInitialize-AWSDefaultConfigurationのエイリアスです。