ProxmoxVE メモ
Ceph RadosgwにS3パケットを生やすスクリプト
Section titled “Ceph RadosgwにS3パケットを生やすスクリプト”アプリ用領域を用意するためにradosgw-adminでユーザー作った後にs3互換クライアントを使って別wでバケット生やすのめんどくさいとGeminiに嘆いたらさっと出してくれた奴。
追加でjqコマンドだけ入れれば使える。
ちゃんと動作確認済。
create-s3-app.sh ユーザー名 パケット名(省略OK) クオータ制限(省略OK)
Section titled “create-s3-app.sh ユーザー名 パケット名(省略OK) クオータ制限(省略OK)”#!/bin/bashset -e
# --- ProxmoxのRGW環境に合わせて変更 ---RGW_ENDPOINT="http://localhost:7480"# ------------------------------------
APP_USER=$1BUCKET_NAME=${2:-$APP_USER}MAX_SIZE=$3 # 例: 10G, 500M, 1T (省略時は無制限)
if [ -z "$APP_USER" ]; then echo "使い方: $0 <ユーザー名> [バケット名] [最大容量(例: 50G)]" exit 1fi
echo "1. ユーザー作成中 ($APP_USER)..."USER_JSON=$(radosgw-admin user create --uid="$APP_USER" --display-name="$APP_USER app user")
ACCESS_KEY=$(echo "$USER_JSON" | jq -r '.keys[0].access_key')SECRET_KEY=$(echo "$USER_JSON" | jq -r '.keys[0].secret_key')
# 容量制限(クォータ)の設定if [ -n "$MAX_SIZE" ]; then echo " -> 容量制限を設定中 ($MAX_SIZE)..." radosgw-admin quota set --quota-scope=user --uid="$APP_USER" --max-size="$MAX_SIZE" radosgw-admin quota enable --quota-scope=user --uid="$APP_USER" QUOTA_INFO="$MAX_SIZE"else QUOTA_INFO="無制限"fi
echo "2. バケット作成中 ($BUCKET_NAME)..."
HOST=$(echo "$RGW_ENDPOINT" | sed -e 's|^[^/]*//||' -e 's|/.*$||')
REGION="us-east-1"SERVICE="s3"DATE_STAMP=$(date -u +"%Y%m%d")AMZ_DATE=$(date -u +"%Y%m%dT%H%M%SZ")EMPTY_HASH="e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
CANONICAL_REQUEST="PUT/$BUCKET_NAME
host:$HOSTx-amz-content-sha256:$EMPTY_HASHx-amz-date:$AMZ_DATE
host;x-amz-content-sha256;x-amz-date$EMPTY_HASH"
CANONICAL_HASH=$(printf "%s" "$CANONICAL_REQUEST" | openssl dgst -sha256 -hex | awk '{print $NF}')CREDENTIAL_SCOPE="$DATE_STAMP/$REGION/$SERVICE/aws4_request"
STRING_TO_SIGN="AWS4-HMAC-SHA256$AMZ_DATE$CREDENTIAL_SCOPE$CANONICAL_HASH"
hmac_sha256() { printf "%s" "$2" | openssl dgst -sha256 -mac HMAC -macopt "$1" | awk '{print $NF}'}
K_DATE=$(hmac_sha256 "key:AWS4$SECRET_KEY" "$DATE_STAMP")K_REGION=$(hmac_sha256 "hexkey:$K_DATE" "$REGION")K_SERVICE=$(hmac_sha256 "hexkey:$K_REGION" "$SERVICE")K_SIGNING=$(hmac_sha256 "hexkey:$K_SERVICE" "aws4_request")SIGNATURE=$(hmac_sha256 "hexkey:$K_SIGNING" "$STRING_TO_SIGN")
AUTH_HEADER="AWS4-HMAC-SHA256 Credential=$ACCESS_KEY/$CREDENTIAL_SCOPE, SignedHeaders=host;x-amz-content-sha256;x-amz-date, Signature=$SIGNATURE"
HTTP_STATUS=$(curl -s -o /dev/null -w "%{http_code}" -X PUT "$RGW_ENDPOINT/$BUCKET_NAME" \ -H "Host: $HOST" \ -H "x-amz-date: $AMZ_DATE" \ -H "x-amz-content-sha256: $EMPTY_HASH" \ -H "Authorization: $AUTH_HEADER")
if [ "$HTTP_STATUS" -ne 200 ]; then echo "エラー: バケットの作成に失敗しました (HTTP Status: $HTTP_STATUS)" exit 1fi
echo "=========================================="echo "払い出し完了!アプリの環境変数に設定してください:"echo "S3_ENDPOINT : $RGW_ENDPOINT"echo "S3_BUCKET : $BUCKET_NAME"echo "S3_ACCESS_KEY : $ACCESS_KEY"echo "S3_SECRET_KEY : $SECRET_KEY"echo "QUOTA_LIMIT : $QUOTA_INFO"echo "=========================================="