はじめに
AWSではEC2インスタンスの起動設定を簡単に管理できるLaunch Templateが提供されています。特に、新しいAMI(Amazon Machine Image)を適用したい場合、既存のLaunch Templateの設定をそのまま引き継ぎつつ、AMI IDのみ変更した新しいバージョンを作成すると便利です。
本記事では、その方法をシンプルなBashスクリプトを用いて解説します。
前提条件
本スクリプトを実行するには、以下の環境が整っている必要があります。
- AWS CLI がインストールされ、適切な認証情報が設定されている
jq
コマンドが利用可能である(JSONデータの加工に使用)- 変更対象となるLaunch Template IDと新しいAMI IDが分かっている
スクリプトの処理概要
以下のステップで新しいLaunch Templateバージョンを作成します。
- 最新バージョン番号の取得
- 現在のLaunch Templateの設定をJSONとして取得
- JSONのImageIdを新しいAMI IDに変更
- 新しいバージョンの作成
Bashスクリプト
#!/bin/bash
# AWS 設定
REGION="ap-northeast-1"
PROFILE="default" # AWS CLIのプロファイル名(適宜変更)
VERSION_DESC="新しいAMIを適用したバージョン"
# 変更対象のLaunch Template ID
LAUNCH_TEMPLATE_ID="lt-xxxxxxxxxxxxxxxxx"
# 新しいAMI ID
NEW_IMAGE_ID="ami-xxxxxxxxxxxxxxxxx"
echo "Launch Template ID: ${LAUNCH_TEMPLATE_ID} の最新バージョンを取得中..."
# 最新バージョンの取得
LATEST_VERSION=$(aws ec2 describe-launch-templates \
--launch-template-id "$LAUNCH_TEMPLATE_ID" \
--query 'LaunchTemplates[0].LatestVersionNumber' \
--output text \
--profile "$PROFILE" \
--region "$REGION")
if [[ -z "$LATEST_VERSION" || "$LATEST_VERSION" == "None" ]]; then
echo "エラー: Launch Templateの最新バージョンが取得できません。"
exit 1
fi
echo "最新バージョン番号: ${LATEST_VERSION}"
# 現在のLaunch Template Dataを取得
aws ec2 describe-launch-template-versions \
--launch-template-id "$LAUNCH_TEMPLATE_ID" \
--versions "$LATEST_VERSION" \
--query 'LaunchTemplateVersions[0].LaunchTemplateData' \
--output json \
--profile "$PROFILE" \
--region "$REGION" > current-template.json
# ImageIdを新しいAMI IDに更新
jq --arg newImageId "$NEW_IMAGE_ID" '.ImageId = $newImageId' current-template.json > new-template.json
# 新しいバージョンの作成
aws ec2 create-launch-template-version \
--launch-template-id "$LAUNCH_TEMPLATE_ID" \
--launch-template-data file://new-template.json \
--version-description "$VERSION_DESC" \
--profile "$PROFILE" \
--region "$REGION"
echo "Launch Templateの新しいバージョンが作成されました。"
まとめ
このスクリプトを使うことで、既存の設定を維持しながら、新しいAMI IDを適用したLaunch Templateのバージョンを作成できます。
メリット
- 設定の一貫性を保つ: 既存の設定を変更せずに、AMI IDだけを更新
- 手動設定ミスを防ぐ: JSONファイルを直接編集することでヒューマンエラーを削減
- 自動化が容易: スクリプト化することでCI/CDにも組み込み可能
AWS環境でLaunch Templateを活用する際に、ぜひ参考にしてみてください!