LinuxインスタンスのSSM Run CommandでPowerShellスクリプトを実行する

2020.01.27

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

しばたです。

少し前に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も試してみてください。