■ 背景

AWS Landing Zone Accelerator (LZA) の設定(YAML)を変更した際、構文エラーを確認するには通常CI/CDパイプラインを回す必要があります(Config変えると一回一回S3にアップロードしてパイプラインを動かす必要がある)。しかし、これには時間がかかり、フィードバックループが遅くなる課題がありました。 また、AWS Cloud Shellで動かすにはストレージ容量制限(1GB)により、LZAのソースコードを展開してビルドすることが困難です。

そこで、ローカル環境を汚さず、かつチーム全員が同じ条件で即座にチェックできるDocker環境を構築しました。

【補足】公式のバリデーターについて

自前で構築する前に、AWS公式から提供されているlza-validatorもチェックしてみてください。
提供されていないと思い、今回記事で書いてるものは自分で作ってみました!

■ 準備するもの

  1. LZAのソースコード: landing-zone-accelerator-on-aws
  2. 設定ファイル: aws-accelerator-config (プロジェクトで管理しているLZA設定リポジトリ)
  3. 実行スクリプト: validate.sh

■ 構築ファイル

1. Dockerfile Node.js環境を用意するだけのシンプルな構成です。
このDockerfileを使ってイメージを作成します!

FROM node:20-bullseye-slim
RUN apt-get update && apt-get install -y git bash  
WORKDIR /app
CMD ["/bin/bash"]

2. validate.sh バリデーションの実行ロジック自体は公式のものを利用しつつ、Docker内のパス(/app/source や /app/config)に合わせて動くようにしました!

#!/bin/bash
DIRECTORY_PATH="/app/source"

# node_modulesがなければインストール
if [ ! -d "$DIRECTORY_PATH/node_modules" ]; then
    echo "YARN Install running..."
    pushd ${DIRECTORY_PATH} &>/dev/null
    yarn install
    popd &>/dev/null
fi

export NODE_OPTIONS="--max-old-space-size=7000"

# ビルド済みでなければビルドを実行(約10分)
if [ ! -d "$DIRECTORY_PATH/packages/@aws-accelerator/accelerator/dist" ]; then
    echo "YARN Build running (approx. 10 mins)..."
    pushd ${DIRECTORY_PATH} &>/dev/null
    yarn build
    popd &>/dev/null
fi

# バリデーション実行
yarn --cwd $DIRECTORY_PATH validate-config /app/config

■ 実行コマンド

カレントディレクトリに必要なディレクトリを配置し、以下のコマンドを叩きます。
ここでは aws-vault を使用して認証情報を渡す例を紹介します。

aws-vault exec <profile-name> -- docker run --rm -it \       
  -e AWS_ACCESS_KEY_ID \
  -e AWS_SECRET_ACCESS_KEY \
  -e AWS_SESSION_TOKEN \                                                       
  -v "$(pwd)/landing-zone-accelerator-on-aws-release-v1.13.1/source:/app/source" \
  -v "$(pwd)/aws-accelerator-config:/app/config:ro" \
  -v "$(pwd)/config-creator/validate.sh:/app/validate.sh" \
  lza-validator \
  bash /app/validate.sh

■ 実行結果

実行すると以下のような感じで構文チェックの結果が表示されます!
このように、メールアドレスの形式が正しくないといったミスも、デプロイ前に即座に気づけます!

■ まとめ

LZAの運用において、設定バリデーションの待ち時間は「ちりつも」です。Dockerを活用して手元で即座にエラーを修正できる環境を作ることで、開発体験と安全性が大幅に向上するのではないでしょうか。