[re:Invent2019] EC2 Image Builderを使ってPowerShell Coreをインストールしてみた #reinvent
しばたです。
先日のキーノートで発表され既に弊社社員により多くの記事が書かれているEC2 Image Builderですが、Build ComponentにPowerShell Coreが用意されていることを知ったためPowerShellおじさんとしては重複上等でブログを書かずにはいられませんでした。
(上記の「関連記事」でその他の試してみた記事にもアクセスできます)
前準備
EC2 Image Bbuilder(以後Image Builder)ではEC2インスタンスでパイプラインを実行するにあたり所定のIAMロールを必要とします。
必要なロールはパイプラインの種類によって適宜適切に設定する必要がありますが、単純にPowerShell CoreをインストールするだけであればEC2InstanceProfileForImageBuilder
とAmazonSSMManagedInstanceCore
ポリシーを割り当ておけばよいです。
IAMロールの作成は様々な方法で可能ですが本記事では適当なCloudFormatin Templateから作成しておきます。
AWSTemplateFormatVersion: 2010-09-09
Parameters:
RoleName:
Description: "Input role name."
Type: String
Default: "EC2RoleForImageBuilder"
Resources:
# IAM Role
ImageBuilderRole:
Type: AWS::IAM::Role
Properties:
RoleName:
Fn::Sub: "${RoleName}"
AssumeRolePolicyDocument:
Version: "2012-10-17"
Statement:
- Effect: "Allow"
Principal:
Service:
- "ec2.amazonaws.com"
Action:
- "sts:AssumeRole"
Path: "/"
ManagedPolicyArns:
- "arn:aws:iam::aws:policy/EC2InstanceProfileForImageBuilder"
- "arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore"
# Instance Profile
ImageBuilderRoleInstanceProfile:
Type: "AWS::IAM::InstanceProfile"
Properties:
InstanceProfileName:
Fn::Sub: "${RoleName}"
Path: "/"
Roles:
- Ref: ImageBuilderRole
WindowsにおけるPowerShell Coreのインストール手順
まずはWindows ServerにPowerShell Coreをインストールしてみます。
サーバーはWindows Server 2019、手順自体は既に他の社員がブログを書きまくってますので要点だけ解説する形ですすめます。
1-1. Define recipi : Source Image
Image Builderの作成ウィザードから最新のWindows Server 2019 Base
イメージを選択します。
1-2. Define recipi : Build components
検索欄に「powershell」と打てばPowerShellのコンポーネントが表示されるので選択します。
1-3. Define recipi : その他
その他項目は特に指定せず次へ進みます。
2. Pipeline
Pipeline設定はIAM Roleに前項で作成したロールを割り当てる以外は環境に応じた設定にします。
今回は名前以外全てデフォルトのままにしています。
3. additional settings - optional
追加の設定も環境に応じて行います。
今回は全てデフォルトです。
4. 以降の作業
あとは設定内容の確認だけですのでそのままイメージの作成を進めればOKです。
特にエラー無く無事パイプラインが作成できました。
あとはよしなにイメージを作成すればOkです。
Amazon LinuxにおけるPowerShell Coreのインストール手順
Linuxの場合でもWindowsとほとんど同じです。
Source ImageのOSがLinuxなのとBuild componentsの名称がすこし違うくらいです。
Build componentの実装について
一度イメージを作るとそのイメージのレシピからbuild componentの中身を見ることができました。
Windows版の実装
Windows版の実装はGitHubのリポジトリからMSIインストーラーをダウンロードしてサイレントインストール、PowerShellコマンドでPATH環境変数を更新というあるあるの実装でした。
現在のバージョンではMSIインストーラーのオプションで環境変数の更新までできる様になっているのでどうにかしてフィードバックしたいです...
Linux版の実装
Linux版の実装はRHELの手順と同様のものをBashから実行する形となっていました。
余談なのですが、表立ってドキュメント化されてないもののAmazon Linux 2でもPowerShell CoreはRHELと同じ手順でインストール可能で、GitHubに以下のインストールスクリプトも用意されていたりしてます。
最後に
ざっとこんな感じです。
現実にはPowerShell Coreをインストールした後に各種ビルドタスクを実行することになると思います。
ビルドタスク向けのPowerShell Coreのインストールには.NET Core Global ToolsによるインストールもありますがAWS統合を重視する場合はImage Builderを選択すると良いでしょう。