spaces について
DigitalOcean App Platform 向けの Spaces オブジェクトストレージスキルです。S3 互換ストレージを扱う開発者向けに、doctl でのキー管理と AWS CLI でのバケット・オブジェクト操作を分け、セットアップスクリプトと手順を提供します。
主な機能
- 01Spaces キーの作成とローテーション
- 02AWS CLI によるバケット管理
- 03オブジェクトのアップロードとダウンロード
- 04バケットの CORS とログ設定
- 05アクセスログの有効化
- 06SDK 設定リファレンス
活用シーン
- 01アプリ用の Spaces バケットを作成
- 02ストレージ認証情報をローテーション
- 03バケットの CORS やアクセスログを設定
- 04ストレージのアクセスログを確認・ダウンロード
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ digitalocean-labs/ do-app-platform-skills --skill spacesインストール後、Claude Code で/spacesを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
README.mdreference/access-logging.mdaws-cli-operations.mdkey-management.mdsdk-configuration.mdtroubleshooting.mdscripts/_lib.shbootstrap_app_spaces.shenable_bucket_logging.shrotate_spaces_key.shview_access_logs.shtemplates/bucket-logging.json詳細
Spaces スキル
App Platform アプリケーション向けの S3 互換オブジェクトストレージです。
ツールの使い分け(重要)
┌─────────────────────────────────────────────────────────────────┐
│ doctl: KEYS ONLY │ aws CLI: EVERYTHING ELSE │
│ • doctl spaces keys create│ • Bucket create/delete │
│ • doctl spaces keys list │ • Object upload/download │
│ • doctl spaces keys delete│ • CORS, logging, lifecycle │
└─────────────────────────────────────────────────────────────────┘
理由: doctl の Spaces サポートはキー管理に限られています。バケット操作には S3 互換ツールが必要です。
すぐに判断するには
┌─────────────────────────────────────────────────────────────────┐
│ What do you need to do with Spaces? │
└─────────────────────────────────────────────────────────────────┘
│
┌─────────────────────┼─────────────────────┐
│ │ │
Create key Create bucket Upload/download
or rotate set CORS/logging objects
│ │ │
▼ ▼ ▼
┌───────────────┐ ┌───────────────┐ ┌───────────────┐
│ doctl │ │ aws CLI │ │ aws CLI │
│ spaces keys │ │ s3api │ │ s3 cp/sync │
└───────────────┘ └───────────────┘ └───────────────┘
前提条件
doctl auth init # One-time DO API auth
aws --version # AWS CLI v2
jq --version # JSON processor
クイックスタート
1. 環境を設定する
# Choose region matching your App Platform app (see shared/regions.yaml)
export DO_SPACES_REGION="syd1"
export DO_SPACES_ENDPOINT="https://${DO_SPACES_REGION}.digitaloceanspaces.com"
export APP_NAME="myapp"
export BUCKET="${APP_NAME}-uploads"
export DO_SPACES_KEY_NAME="${APP_NAME}-spaces-key"
2. キーを作成する(doctl)
KEY_JSON=$(doctl spaces keys create "${DO_SPACES_KEY_NAME}" --output json)
export AWS_ACCESS_KEY_ID=$(echo "$KEY_JSON" | jq -r '.[0].access_key')
export AWS_SECRET_ACCESS_KEY=$(echo "$KEY_JSON" | jq -r '.[0].secret_key')
# IMPORTANT: Secret shown only once - save it now!
3. バケットを作成する(aws CLI)
aws --endpoint-url "$DO_SPACES_ENDPOINT" s3api create-bucket --bucket "$BUCKET"
4. App Spec
services:
- name: api
envs:
- key: SPACES_BUCKET
value: myapp-uploads
- key: SPACES_REGION
value: ${SPACES_REGION} # Your bucket's region
- key: SPACES_ENDPOINT
value: ${SPACES_ENDPOINT} # e.g., https://syd1.digitaloceanspaces.com
- key: SPACES_ACCESS_KEY
scope: RUN_TIME
type: SECRET
value: ${SPACES_ACCESS_KEY}
- key: SPACES_SECRET_KEY
scope: RUN_TIME
type: SECRET
value: ${SPACES_SECRET_KEY}
SPACES_ACCESS_KEYとSPACES_SECRET_KEYは GitHub Secrets に保存してください。
リージョン
Spaces では App Platform とは異なるスラッグを使用します。shared/regions.yaml を参照してください。
| App Platform | Spaces | エンドポイント |
|---|---|---|
nyc | nyc3 | https://nyc3.digitaloceanspaces.com |
sfo | sfo3 | https://sfo3.digitaloceanspaces.com |
ams | ams3 | https://ams3.digitaloceanspaces.com |
lon | lon1 | https://lon1.digitaloceanspaces.com |
fra | fra1 | https://fra1.digitaloceanspaces.com |
tor | tor1 | https://tor1.digitaloceanspaces.com |
sgp | sgp1 | https://sgp1.digitaloceanspaces.com |
blr | blr1 | https://blr1.digitaloceanspaces.com |
syd | syd1 | https://syd1.digitaloceanspaces.com |
atl | atl1 | https://atl1.digitaloceanspaces.com |
よく使う操作
doctl(キーのみ)
doctl spaces keys list
doctl spaces keys create "myapp-key" --output json
doctl spaces keys delete <key-id>
aws CLI(バケットとオブジェクト)
EP="--endpoint-url https://syd1.digitaloceanspaces.com"
# Buckets
aws $EP s3 ls
aws $EP s3api create-bucket --bucket myapp-uploads
aws $EP s3 rb s3://myapp-uploads
# Objects
aws $EP s3 cp ./file.txt s3://myapp-uploads/path/file.txt
aws $EP s3 cp s3://myapp-uploads/path/file.txt ./file.txt
aws $EP s3 ls s3://myapp-uploads/ --recursive
aws $EP s3 sync ./local-dir/ s3://myapp-uploads/prefix/
スクリプト(AI 向け)
| スクリプト | 用途 |
|---|---|
scripts/bootstrap_app_spaces.sh | セットアップ全般:キー、バケット、ロギング |
scripts/enable_bucket_logging.sh | ロギングの有効化/確認(冪等) |
scripts/view_access_logs.sh | アクセスログの一覧表示/ダウンロード |
scripts/rotate_spaces_key.sh | 認証情報を安全にローテーション |
# Set env vars then run
./scripts/bootstrap_app_spaces.sh
参考ファイル
| ファイル | 内容 |
|---|---|
| aws-cli-operations.md | aws CLI の完全なリファレンス |
| key-management.md | アプリごとのキー、ローテーションのワークフロー |
| access-logging.md | バケットのロギング設定 |
| sdk-configuration.md | Node.js、Python、Go SDK の設定 |
| troubleshooting.md | よくあるエラーと解決方法 |
URL の形式
| 種類 | 形式 |
|---|---|
| 標準 | https://<bucket>.<region>.digitaloceanspaces.com/<key> |
| CDN | https://<bucket>.<region>.cdn.digitaloceanspaces.com/<key> |
トラブルシューティング(クイックガイド)
| エラー | 解決方法 |
|---|---|
| BucketAlreadyExists (409) | 一意のプレフィックスを使用します:mycompany-myapp-uploads |
| Access Denied (403) | キーを確認し、エンドポイントがバケットのリージョンと一致することを確認します |
| CORS error | aws s3api put-bucket-cors で設定します |
| SignatureDoesNotMatch | https:// プレフィックスを使用し、末尾にスラッシュを付けないでください |
詳しくは troubleshooting.md を参照してください。
インテグレーション
- → designer:アプリの設計時に Spaces の環境変数を含めます
- → deployment:認証情報は GitHub Secrets に保存されます
- → devcontainers:MinIO により Spaces と同等のローカル環境を利用できます
コメント
Markdown 対応