📦
AWS CLI で静的ウェブサイトホスティングが有効化されている S3 バケットをコピーする
はじめに
静的ウェブサイトホスティングが有効化されている 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