AWS CodeBuildでビルド実行時に使うShellの指定ができるようになりました

AWS運用自動化サービス「Cloud Automator」

2020年6月25日のAWS CodeBuildのアップデートです。

AWS CodeBuildが追加のシェル環境をサポートするようになりました。
AWS CodeBuild Now Supports Additional Shell Environments

AWS CodeBuildを利用すると、ビルド用コンテナが作成され、その中でShellが起動し、buildspec.ymlで定義したコマンドが実行されます。
どのShellが起動するかは、今までは指定できず、Linuxコンテナならsh、WindowsコンテナならPowershellと決まっていましたが、今回のアップデートで他のShellも選択できるようになりました。

For Linux operating systems, supported shell tags are:
• bash
• /bin/sh

For Windows operating systems, supported shell tags are:
• powershell.exe
• cmd.exe

Build specification reference for CodeBuild

以下でShellを指定し、動作確認してみます。

なお、一般的にCodeBuildはアプリケーションをビルドしたり、コンテナイメージを作成したりするのに使われますが、今回は単純にどのShellが動いているのか確認するだけのビルドプロジェクトを作成します。

1.Amazon Linux 2で動作確認

まずはAmazon Linux 2のイメージでShellをbashに指定してみます。

1-1.S3バケットの作成

buildspec.ymlを含むビルドスクリプトを格納するためのS3バケットを作成します。

1-2.ビルドスクリプトの作成

今回は手元のMacBookで操作しました。

作業ディレクトリ作成

buildspec.yml作成

3〜4行目が今回のアップデート部分で、Shellを指定しています。
また、現在動いているプロセスを確認するために、ps -p $$を実行させます。

zipで固める

1-3.S3へビルドスクリプトをアップロード

1-4.CodeBuildプロジェクトの作成

設定項目
プロジェクト名 任意
ソースプロバイダ Amazon S3
バケット 上記作成したS3バケット名
S3 オブジェクトキーまたは S3 フォルダ 上記でアップロードしたzipファイル名
環境イメージ マネージド型イメージ(Amazon Linux 2)
ビルド仕様 buildspecファイルを使用する

1-5.ビルドの実行

プロジェクトを指定し、ビルドの開始をします。

1-6.ビルドログ確認

ビルドが完了すると、ビルドログが表示され、bashが実行されているのがわかります。

ビルドログ抜粋

ビルドログ全行

1-7.POSIXモードを使うかどうか

さて、CodeBuildでbash使えるようになりました。
しかし、Amazon Linux 2に詳しい方は、疑問に思うかもしれません。
なぜなら、実はAmazon Linux 2のshは、bashのシンボリックリンクになっているからです。

それでは、どれを使ってもbashで違いは無いのでは?と思ってしまいますが、意味はあります。
shでbashを呼び出すと、bashがPOSIXモードで動作するようになります。
どのように動作が変わるかは下記リンク先に記載があります。

6.11 Bash POSIX Mode
When invoked as sh, Bash enters POSIX mode after reading the startup files.

結論として、いわゆるBashを使いたい場合は、設定をした方が良いと思います。

2.Ubuntuでのbash利用

Ubuntuのshは、実はshでもなく、bashでもなく、dashです。
したがって、Ubuntuでbashを指定するのは意味があります。

まとめ

今までは、AWS CodeBuildのビルドスクリプトの中で、Amazon Linux 2はsh(POSIX互換のBash)、Ubuntuはdash、WindowsはPowershellが利用可能でした。
今後は、bashやCMDも利用可能となりました。

AWS運用自動化サービス「Cloud Automator」