クラウドストレージ
署名付きURL、マルチパートアップロード、範囲指定読み取りに対応したS3互換オブジェクトストレージ。
エントリ種別
| 種別 | 説明 |
|---|---|
config.aws |
AWS認証情報とリージョン設定 |
cloudstorage.s3 |
S3バケット接続 |
AWS設定
- name: aws_config
kind: config.aws
region: ${env:AWS_REGION}
access_key_id: ${env:AWS_ACCESS_KEY_ID}
secret_access_key: ${env:AWS_SECRET_ACCESS_KEY}
| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
region |
string | はい | AWSリージョン。デプロイごとに異なる場合は ${env:NAME} で指定します |
access_key_id |
string | いいえ | AWS アクセスキー ID(インラインまたは ${env:NAME}) |
secret_access_key |
string | いいえ | AWS シークレットアクセスキー(インラインまたは ${env:NAME}) |
認証情報はデコード時に環境レジストリから解決されます。静的な認証情報を適用するには access_key_id と secret_access_key の両方が空でない値に解決される必要があります。そうでない場合は、AWS SDK のデフォルト認証チェーン(IAM ロール、インスタンスプロファイルなど)が使用されます。
リクエストは、解決された認証情報を使用して AWS SDK によって AWS Signature Version 4 で署名されます。署名の設定は不要です。
<field>_env(region_env、access_key_id_env、secret_access_key_env)が使われています。この形式は非推奨です — 上記の ${env:NAME} プレースホルダーへ移行してください。
config.aws エントリは、AWS をバックエンドとする複数のサービスで再利用できます。queue.driver.sqs は config: フィールドで同じエントリを参照します。
S3ストレージ
- name: files
kind: cloudstorage.s3
bucket: "my-bucket"
config: app.infra:aws_config
| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
bucket |
string | 条件付き | S3バケット名。デプロイごとに異なる場合は ${env:NAME} で指定します |
config |
reference | はい | AWS設定エントリ参照 |
endpoint |
string | いいえ | S3互換サービス用カスタムエンドポイント(インラインまたは ${env:NAME}) |
S3互換サービス
MinIOまたは他のS3互換サービスの場合、カスタムエンドポイントを設定:
- name: local_storage
kind: cloudstorage.s3
bucket: "local-bucket"
config: app.infra:aws_config
endpoint: "http://localhost:9000"
エンドポイントが提供されると、パススタイルアクセスが自動的に有効になります。
マルチパートアップロード
署名付きマルチパートアップロードは、ランタイムの機能ではなくプロバイダーの機能です。cloudstorage.s3種別はこれを実装しています。マルチパートプロトコルをサポートしないプロバイダーでは、create_multipart_upload、presigned_part_urls、complete_multipart_upload、abort_multipart_uploadがerrors.UNAVAILABLEで失敗します。
完了も中止もされなかったアップロードのパートは保存されたまま残り、課金対象になります。アプリケーションはすべての失敗経路で中止処理を行いますが、クライアントがクラッシュした場合はその中止処理を実行するものが残りません。バケットにAbortIncompleteMultipartUploadライフサイクルルールを設定して、最後の防波堤としてください:
{
"Rules": [
{
"ID": "abort-incomplete-multipart",
"Status": "Enabled",
"Filter": { "Prefix": "" },
"AbortIncompleteMultipartUpload": { "DaysAfterInitiation": 7 }
}
]
}
範囲指定読み取り
open_readerは範囲指定GETでオブジェクトを読み取り、読み取りのたびにIf-MatchでオブジェクトのETagを固定します。最初のstatでETagを返さないプロバイダーでは、この呼び出しはerrors.UNAVAILABLEで失敗します。If-Matchを無視するプロバイダーでは上書き保護が失われ、読み取りが2つのオブジェクト世代を混在させたことを検出できなくなります。
Lua API
操作(list、upload、download、delete、署名付きURL、マルチパートアップロード、範囲指定リーダー)についてはクラウドストレージモジュールを参照してください。
関連項目
- クラウドストレージモジュール - Lua APIリファレンス
- ファイルシステム - ローカルファイルシステムエントリ
- キュー - SQSハンドラは同じ
config.awsエントリを共有します