コンテンツにスキップ

クラウドストレージ

S3互換オブジェクトストレージへのアクセス。署名付きURLサポート付きでファイルをアップロード、ダウンロード、一覧表示、管理。

ストレージ設定についてはクラウドストレージを参照。

local cloudstorage = require("cloudstorage")

レジストリIDでクラウドストレージリソースを取得:

local storage, err = cloudstorage.get("app.infra:files")
if err then
return nil, err
end
storage:upload_object("data/file.txt", "content")
storage:release()
パラメータ説明
idstringストレージリソースID

戻り値: Storage, error

文字列またはファイルからコンテンツをアップロード:

local storage = cloudstorage.get("app.infra:files")
-- 文字列コンテンツをアップロード
local ok, err = storage:upload_object("reports/daily.json", json.encode({
date = "2024-01-15",
total = 1234
}))
-- ファイルからアップロード
local fs = require("fs")
local vol = fs.get("app:data")
local file = vol:open("/large-file.bin", "r")
storage:upload_object("backups/large-file.bin", file)
file:close()
storage:release()
パラメータ説明
keystringオブジェクトキー/パス
contentstring or Reader文字列またはファイルリーダーとしてのコンテンツ
optionstableオプションのメタデータおよび条件付き書き込みオプション

戻り値: boolean, error

オプションテーブルでメタデータを付与したり、書き込みをガードしたりできます:

storage:upload_object("reports/daily.json", body, {
content_type = "application/json",
cache_control = "max-age=3600",
metadata = { owner = "team-a", run_id = "1234" }, -- stored as x-amz-meta-*
only_if_absent = true -- fail if the key already exists
})
オプション説明
content_typestringMIME タイプ
cache_controlstringCache-Control ヘッダー
content_dispositionstringContent-Disposition ヘッダー
content_encodingstringContent-Encoding ヘッダー
metadatatableユーザーメタデータ(string のキー/値)。x-amz-meta-* として保存
headerstable追加のリクエストヘッダー(string のキー/値)
if_matchstring現在のオブジェクト ETag が一致する場合のみ書き込み
if_none_matchstringETag に一致するオブジェクトがない場合のみ書き込み("*" は任意を意味する)
only_if_absentbooleanキーが存在しない場合のみ書き込み(if_none_match = "*" のエイリアス)

前提条件を満たさない条件付き書き込みは precondition_failed エラーを返します。

ファイルライターにオブジェクトをダウンロード:

local storage = cloudstorage.get("app.infra:files")
local fs = require("fs")
local vol = fs.get("app:temp")
local file = vol:open("/downloaded.json", "w")
local ok, err = storage:download_object("reports/daily.json", file)
file:close()
-- 部分コンテンツをダウンロード(最初の1KB)
local partial = vol:open("/partial.bin", "w")
storage:download_object("backups/large-file.bin", partial, {
range = "bytes=0-1023"
})
partial:close()
storage:release()
パラメータ説明
keystringダウンロードするオブジェクトキー
writerWriter宛先ファイルライター
options.rangestringバイト範囲(例: “bytes=0-1023”)
options.if_matchstringオブジェクト ETag が一致する場合のみダウンロード
options.if_none_matchstringETag が一致しない場合のみダウンロード

戻り値: boolean, error

前提条件(if_match/if_none_match)を満たさない場合は precondition_failed エラーを返します。

オプションのプレフィックスフィルタリングでオブジェクトを一覧:

local storage = cloudstorage.get("app.infra:files")
local result, err = storage:list_objects({
prefix = "reports/2024/",
max_keys = 100
})
for _, obj in ipairs(result.objects) do
print(obj.key, obj.size, obj.etag)
end
-- 大きな結果をページネーション
local token = nil
repeat
local result = storage:list_objects({
prefix = "logs/",
max_keys = 1000,
continuation_token = token
})
for _, obj in ipairs(result.objects) do
process(obj)
end
token = result.next_continuation_token
until not result.is_truncated
storage:release()
パラメータ説明
options.prefixstringキープレフィックスでフィルター
options.max_keysinteger返す最大オブジェクト数
options.continuation_tokenstringページネーショントークン
options.include_ownerboolean各オブジェクトの owneriddisplay_name)を含める
options.include_versionsbooleanオブジェクトバージョンを一覧;各項目に version_id が含まれる

戻り値: table, error

結果にはobjectsis_truncatednext_continuation_tokenが含まれる。各オブジェクトには keysizeetagstorage_class、およびオプションの last_modifiedversion_idowner がある。

リスト結果では content_type は常に空です — S3 のリスト操作はこれを返しません。オブジェクトのコンテンツタイプとメタデータを読み取るには head_object を使用してください。

本体をダウンロードせずに単一オブジェクトのメタデータを取得します:

local storage = cloudstorage.get("app.infra:files")
local meta, err = storage:head_object("reports/daily.json")
if err then
return nil, err
end
print(meta.size, meta.etag, meta.content_type)
for k, v in pairs(meta.metadata) do
print("meta", k, v)
end
storage:release()
パラメータ説明
keystringオブジェクトキー

戻り値: table, error

結果フィールド:

フィールド説明
sizeintegerオブジェクトサイズ(バイト)
etagstringエンティティタグ
content_typestringMIME タイプ
cache_controlstringCache-Control ヘッダー
content_dispositionstringContent-Disposition ヘッダー
content_encodingstringContent-Encoding ヘッダー
storage_classstringストレージクラス
version_idstringバージョン ID(バージョニングが有効な場合に存在)
last_modifiedinteger最終更新時刻(Unix 秒)
metadatatableユーザーメタデータ(x-amz-meta-*
headerstable生のレスポンスヘッダー(キーは小文字化)

存在しないオブジェクトは not_found エラーを返します。

複数のオブジェクトを削除:

local storage = cloudstorage.get("app.infra:files")
storage:delete_objects({
"temp/file1.txt",
"temp/file2.txt",
"temp/file3.txt"
})
storage:release()
パラメータ説明
keysstring[]削除するオブジェクトキーの配列

戻り値: boolean, error

認証情報なしでオブジェクトをダウンロードできる一時URLを作成。外部ユーザーとファイルを共有したり、アプリケーション経由でコンテンツを提供するのに便利。

local storage, err = cloudstorage.get("app.infra:files")
if err then
return nil, err
end
local url, err = storage:presigned_get_url("reports/quarterly.pdf", {
expiration = 3600
})
storage:release()
if err then
return nil, err
end
-- 直接ダウンロード用にクライアントにURLを返す
return {download_url = url}
パラメータ説明
keystringオブジェクトキー
options.expirationintegerURLが期限切れになるまでの秒数(デフォルト: 3600)

戻り値: string, error

認証情報なしでオブジェクトをアップロードできる一時URLを作成。クライアントがサーバーを経由せずに直接ストレージにファイルをアップロードできる。

local storage, err = cloudstorage.get("app.infra:files")
if err then
return nil, err
end
local url, err = storage:presigned_put_url("uploads/user-123/avatar.jpg", {
expiration = 600,
content_type = "image/jpeg",
content_length = 1024 * 1024
})
storage:release()
if err then
return nil, err
end
-- 直接アップロード用にクライアントにURLを返す
return {upload_url = url}
パラメータ説明
keystringオブジェクトキー
options.expirationintegerURLが期限切れになるまでの秒数(デフォルト: 3600)
options.content_typestringアップロードに必要なコンテンツタイプ
options.content_lengthinteger最大アップロードサイズ(バイト単位)

戻り値: string, error

メソッド戻り値説明
upload_object(key, content, opts?)boolean, error文字列またはファイルコンテンツをアップロード
download_object(key, writer, opts?)boolean, errorファイルライターにダウンロード
head_object(key)table, errorオブジェクトメタデータを取得
list_objects(opts?)table, errorプレフィックスフィルター付きでオブジェクトを一覧
delete_objects(keys)boolean, error複数のオブジェクトを削除
presigned_get_url(key, opts?)string, error一時ダウンロードURLを生成
presigned_put_url(key, opts?)string, error一時アップロードURLを生成
release()booleanストレージリソースを解放

クラウドストレージ操作はセキュリティポリシー評価の対象。

アクションリソース説明
cloudstorage.getStorage IDストレージリソースを取得
条件種別再試行可能
リソースIDが空errors.INVALIDno
リソースが見つからないerrors.NOT_FOUNDno
クラウドストレージリソースではないerrors.INVALIDno
ストレージが解放済みerrors.INVALIDno
キーが空errors.INVALIDno
コンテンツがnilerrors.INVALIDno
ライターが無効errors.INVALIDno
オブジェクトが見つからないerrors.NOT_FOUNDno
条件付き前提条件の失敗errors.CONFLICTno
権限拒否errors.PERMISSION_DENIEDno
操作失敗errors.INTERNALno

エラーの処理についてはエラー処理を参照。