しばたテックブログ

気分で書いている技術ブログです。

AWS Tools for PowerShellを試してみる

【2022年3月追記】

2022年3月に現職の会社ブログでAWS Tools for PowerShellの入門記事を書きました。

dev.classmethod.jp

最新の情報は上記記事をご覧ください。

【追記ここまで】


ただいまAWSを勉強中でせっかくなのでAWS Tools for PowerShellを試してみることにしました。

基本的には公式ドキュメントと先人の資料を参考にして試しています。

本エントリは私の備忘録としての側面が強く、詳細な情報は上記参考元を見て頂くのが良いでしょう。

モジュールのインストール

AWS Tools for PowerShellはPowerShellモジュールとして提供されています。

f:id:stknohg:20180920183701p:plain

古い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でサービス情報が出力されるちょっとイケてない感じです。

f:id:stknohg:20180920183721p:plain

このため利用できるサービスを純粋に取得するには、

Get-AWSPowerShellVersion -ListServiceVersionInfo | Select-Object -Skip 1

とすると良いでしょう。

認証

AWS Tools for PowerShellの認証はIAMユーザーで発行するアクセスキーを指定する形で行われます。
公式の手順は以下にドキュメント化されています。

docs.aws.amazon.com

アクセスキーの生成

IAMユーザーの設定画面から以下の様な感じで作成しました。
UIはコロコロ変わるでしょうし細かい説明は端折ります。

f:id:stknohg:20180920183806p:plain


f:id:stknohg:20180920183817p:plain


f:id:stknohg:20180920183838p:plain


アクセスキーIDとシークレットアクセスキーを記録しておいてください。

認証情報の設定

先人の資料によるとInitialize-AWSDefaultConfiguration(= Initialize-AWSDefaults)*1を使い認証情報などの既定値を保存する様ですが、公式ドキュメントを見ると、

Initialize-AWSDefaultConfiguration は実行しないようお勧めします。ただし、PowerShell を実行している EC2 インスタンスの起動にインスタンスプロファイルを使用していなくて、認証情報プロファイルを手動で設定する場合は除きます。この場合は、認証情報プロファイルに認証情報が含まれないことに注意してください。

とあり、基本的にはSet-AWSCredentialを使い認証情報を プロファイル として保存しておくのが良さそうです。

Set-AWSCredential -AccessKey [アクセスキーID] -SecretKey [シークレットアクセスキー] -StoreAs [プロファイル名]

設定した認証情報は

Get-AWSCredential -ListProfileDetail

で参照できます。

f:id:stknohg:20180920183936p:plain

また、デフォルトのリージョンはSet-DefaultAWSRegionで設定できます。
(ただし永続化されません。永続化したい場合はInitialize-AWSDefaultConfigurationを使うしかない様です)

Set-DefaultAWSRegion -Region ap-northeast-1

f:id:stknohg:20180920183950p:plain

リージョン一覧はGet-AWSRegionで取得できます。

Get-AWSRegion | Where-Object { $_.Name -like "*tokyo*" }

f:id:stknohg:20180920184008p:plain

認証情報の保存先

ちなみに、認証情報はデフォルトでWindowsの場合だと

  • C:\Users\[username]\AppData\Local\AWSToolkit\RegisteredAccounts.json (AWS SDKストア)

に保存されます。

このAWS SDKストアはAWS SDK for .NETToolkit 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

f:id:stknohg:20180920184111p:plain

とりあえずそれっぽい情報が取得できたので良しとします。

最後に

とりあえずこんな感じです。
わからないことはまだまだ多いのですが、随時内容を更新していければと思います。

*1:Initialize-AWSDefaultsはInitialize-AWSDefaultConfigurationのエイリアスです。