LinuxインスタンスのSSM Run CommandでPowerShellスクリプトを実行する
しばたです。
少し前にAWSよりRunning PowerShell Scripts on Linux Instancesというドキュメントが公開されたので試してみました。
こちらのドキュメントではAWS Systems Manager(SSM)のAWS-RunPowerShellScript
ドキュメントをLinuxインスタンス(PowerShell Core)上で実行する方法が記載されています。
SSM AgentのPowerShell on Linux対応状況
このドキュメントは今年になって公開されたためSSMのLinuxインスタンス上でPowerShellスクリプトを実行するのは新機能なのかと最初は思ったのですが、調べてみるとどうやら以前から対応していたもののあまり表立って伝えられていなかっただけの様です。
SSM AgentはVer.2.2.160.0(2018年1月15日リリース)から対応しており、AWS-RunPowerShellScript
ドキュメント側も以前からサポートプラットフォームにLinux
がありました。
(上図は本日取得した画像だが以前から変わっていない)
今となってはいつから利用可能だったのかはわかりませんが、まあ、細かいことは気にせずに試していきたいと思います。
事前準備
今回はAmazon Linux 2インスタンスで試してみます。
適当なSSMを利用可能なインスタンス(pwsh-test-linux
)をあらかじめ用意しておきます。
(インスタンスの作成手順は割愛します)
当然Amazon Linux 2にはデフォルトでPowerShell Coreはインストールされていませんので前準備としてPowerShell Coreのインストールが必要となります。
Amazon Linux 2へのPowerShell Coreのインストール方法はRHELと同様ですので以下のコマンドで可能です。
# Register the Microsoft RedHat repository
curl https://packages.microsoft.com/config/rhel/7/prod.repo | sudo tee /etc/yum.repos.d/microsoft.repo
# Install PowerShell
sudo yum install -y powershell
このコマンドを好きな方法で実行すれば良いのですが、今回はSSMを使える環境ですのでAWS-RunShellScript
ドキュメントから実行することにします。
実行結果はこんな感じでエラーが無ければOKです。
一応SSM SessionからもPowerShell Coreが使えることを確認しておきます。
余談
ちなみにPowerShell CoreをインストールせずにAWS-RunPowerShellScript
ドキュメントを実行すると下図の様に
failed to run commands: fork/exec /usr/bin/pwsh: no such file or directory
とpwsh
が無いと怒られます。
LinuxインスタンスのSSM Run CommandでPowerShellスクリプトを実行する
これで準備ができましたのでLinuxインスタンスでAWS-RunShellScript
ドキュメントを実行してみます。
今回は実行環境を取得するごく簡単なスクリプトを実行してみます。
# Show PSVersionTable
Write-Output "Show PSVersionTable :"
$PSVersionTable
# Show platform
Write-Output "IsWindows : $IsWindows"
Write-Output "IsLinux : $IsLinux"
手順としては対Windowsインスタンスの場合と全く同様にAWS-RunShellScript
ドキュメントを設定し実行するだけです。
(当然ですが実行対象がWindows / Linux混在する様な場合はスクリプト側でOSごとの処理分岐をする必要があります)
このスクリプトを実行すると以下の様になり無事LinuxインスタンスでAWS-RunShellScript
ドキュメントが実行できていることがわかります。
最後に
以上となります。
LinuxインスタンスにPowerShell Coreをインストールして運用してる環境はまだまだ少ないとは思いますが、個人的にはクロスプラットフォーム化したPowerShellの非常に良い使いどころだと思っています。
機会があればぜひPowerShell on Linuxも試してみてください。