📦

AWS CLI で静的ウェブサイトホスティングが有効化されている S3 バケットをコピーする

2024/07/11に公開

はじめに

静的ウェブサイトホスティングが有効化されている S3 バケットをコピーすることがあったので覚書。

手順

1. シェルスクリプトを作成

コピー対象が複数あったのでシェルスクリプトを作成して対応。
静的ウェブホスティングやポリシーなど不特定多数の設定があるものは、一度書き出して読み込ませると設定が簡単。

copy-bucket.sh
#!/usr/bin/env.md bash
set -CEeuo pipefail

SRC_BUCKET=$1
TARGET_BUCKET=$2
REGION="${3:-ap-northeast-1}"

rm -f website.json
rm -f policy.json

# バケットの作成
aws s3api create-bucket \
  --bucket "${TARGET_BUCKET}" \
  --region "${REGION}" \
  --create-bucket-configuration LocationConstraint="${REGION}" 

# パブリックアクセスブロック無効
aws s3api put-public-access-block \
  --bucket "${TARGET_BUCKET}" \
  --public-access-block-configuration BlockPublicAcls=false,IgnorePublicAcls=false,BlockPublicPolicy=false,RestrictPublicBuckets=false

# デフォルトの暗号化を有効化する(SSE-S3)
aws s3api put-bucket-encryption \
  --bucket "${TARGET_BUCKET}" \
  --server-side-encryption-configuration '{"Rules": [{"ApplyServerSideEncryptionByDefault": {"SSEAlgorithm": "AES256"}}]}'

# 静的ウェブサイトホスティングを有効化
aws s3api get-bucket-website \
  --bucket "${SRC_BUCKET}" > website.json
aws s3api put-bucket-website \
  --bucket "${TARGET_BUCKET}" \
  --website-configuration file://website.json

# ポリシーを設定
aws s3api get-bucket-policy \
  --bucket "${SRC_BUCKET}" \
  --query Policy \
  --output text > policy.json
sed -i -e s/"${SRC_BUCKET}"/"${TARGET_BUCKET}"/ policy.json
aws s3api put-bucket-policy \
  --bucket "${TARGET_BUCKET}" \
  --policy file://policy.json

# コピー
aws s3 sync --region "${REGION}" \
  "s3://${SRC_BUCKET}" "s3://${TARGET_BUCKET}" 

2. 実行

hoge を moge にコピーする。

$ chmod +x copy-bucket.sh
$ ./copy-bucket.sh hoge moge

参考サイト

環境

$ aws --version
aws-cli/2.18.11 Python/3.12.6 Linux/6.1.112-122.189.amzn2023.x86_64 exec-env/CloudShell exe/x86_64.amzn.2023

Discussion