📝
[小ネタ] CloudFormation StackSets を使用せずにマルチリージョンにデプロイするスクリプトを作ってみた
StackSets を使用したアカウントとリージョン全体でのスタックの管理 - AWS CloudFormation
あえて StackSets を使用しない方法でデプロイしてみました。
前提
- テンプレートファイル名は template.yaml
- スクリプトファイルとテンプレートファイルは同ディレクトリに存在
デプロイスクリプト
#!/bin/bash
# ---------- 設定 ----------
STACK_NAME="MyStack"
TEMPLATE_FILE="template.yaml"
REGIONS=$(aws ec2 describe-regions --query "Regions[].RegionName" --output text)
# 例: 限定する場合 → REGIONS="ap-northeast-1 us-west-2 eu-west-1"
# ---------- デプロイ処理 ----------
for REGION in $REGIONS; do
echo "------------------------------------------"
echo "Deploying to region: $REGION"
echo "------------------------------------------"
aws cloudformation deploy \
--region "$REGION" \
--stack-name "$STACK_NAME" \
--template-file "$TEMPLATE_FILE" \
--capabilities CAPABILITY_NAMED_IAM \
--no-fail-on-empty-changeset
if [ $? -eq 0 ]; then
echo "✅ Successfully deployed to $REGION"
else
echo "❌ Failed to deploy to $REGION"
fi
echo ""
done
削除処理
#!/bin/bash
# ---------- 設定 ----------
STACK_NAME="MyStack"
REGIONS=$(aws ec2 describe-regions --query "Regions[].RegionName" --output text)
# 例: 限定したい場合 → REGIONS="ap-northeast-1 us-west-2"
# ---------- 削除処理 ----------
for REGION in $REGIONS; do
echo "------------------------------------------"
echo "Deleting stack in region: $REGION"
echo "------------------------------------------"
aws cloudformation delete-stack \
--region "$REGION" \
--stack-name "$STACK_NAME"
if [ $? -eq 0 ]; then
echo "⏳ Waiting for deletion to complete in $REGION..."
aws cloudformation wait stack-delete-complete \
--region "$REGION" \
--stack-name "$STACK_NAME"
if [ $? -eq 0 ]; then
echo "✅ Successfully deleted stack in $REGION"
else
echo "❌ Deletion failed or timed out in $REGION"
fi
else
echo "⚠️ Failed to initiate delete in $REGION (maybe it doesn't exist)"
fi
echo ""
done
まとめ
今回は CloudFormation StackSets を使用せずにマルチリージョンにデプロイするスクリプトを作ってみました。
どなたかの参考になれば幸いです。
Discussion