📝

[小ネタ] 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