클라우드 스토리지
S3 호환 오브젝트 스토리지에 접근합니다. presigned 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()
| 파라미터 | 타입 | 설명 |
|---|---|---|
id |
string | 스토리지 리소스 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()
| 파라미터 | 타입 | 설명 |
|---|---|---|
key |
string | 오브젝트 키/경로 |
content |
string 또는 Reader | 문자열 또는 파일 reader로서의 콘텐츠 |
반환: boolean, error
오브젝트 다운로드
파일 writer로 오브젝트 다운로드:
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()
| 파라미터 | 타입 | 설명 |
|---|---|---|
key |
string | 다운로드할 오브젝트 키 |
writer |
Writer | 대상 파일 writer |
options.range |
string | 바이트 범위 (예: "bytes=0-1023") |
반환: boolean, error
오브젝트 목록 조회
선택적 접두사 필터링으로 오브젝트 목록 조회:
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.content_type)
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.prefix |
string | 키 접두사로 필터 |
options.max_keys |
integer | 반환할 최대 오브젝트 수 |
options.continuation_token |
string | 페이징 토큰 |
반환: table, error
결과는 objects, is_truncated, next_continuation_token을 포함합니다.
오브젝트 삭제
여러 오브젝트 제거:
local storage = cloudstorage.get("app.infra:files")
storage:delete_objects({
"temp/file1.txt",
"temp/file2.txt",
"temp/file3.txt"
})
storage:release()
| 파라미터 | 타입 | 설명 |
|---|---|---|
keys |
string[] | 삭제할 오브젝트 키 배열 |
반환: boolean, error
다운로드 URL
자격 증명 없이 오브젝트를 다운로드할 수 있는 임시 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}
| 파라미터 | 타입 | 설명 |
|---|---|---|
key |
string | 오브젝트 키 |
options.expiration |
integer | URL 만료까지 초 (기본값: 3600) |
반환: string, error
업로드 URL
자격 증명 없이 오브젝트를 업로드할 수 있는 임시 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}
| 파라미터 | 타입 | 설명 |
|---|---|---|
key |
string | 오브젝트 키 |
options.expiration |
integer | URL 만료까지 초 (기본값: 3600) |
options.content_type |
string | 업로드에 필요한 콘텐츠 타입 |
options.content_length |
integer | 최대 업로드 크기 바이트 |
반환: string, error
스토리지 메서드
| 메서드 | 반환 | 설명 |
|---|---|---|
upload_object(key, content) |
boolean, error |
문자열 또는 파일 콘텐츠 업로드 |
download_object(key, writer, opts?) |
boolean, error |
파일 writer로 다운로드 |
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.get |
스토리지 ID | 스토리지 리소스 획득 |
에러
| 조건 | 종류 | 재시도 가능 |
|---|---|---|
| 빈 리소스 ID | errors.INVALID |
아니오 |
| 리소스를 찾을 수 없음 | errors.NOT_FOUND |
아니오 |
| 클라우드 스토리지 리소스가 아님 | errors.INVALID |
아니오 |
| 스토리지 해제됨 | errors.INVALID |
아니오 |
| 빈 키 | errors.INVALID |
아니오 |
| 콘텐츠 nil | errors.INVALID |
아니오 |
| writer가 유효하지 않음 | errors.INVALID |
아니오 |
| 오브젝트를 찾을 수 없음 | errors.NOT_FOUND |
아니오 |
| 권한 거부됨 | errors.PERMISSION_DENIED |
아니오 |
| 작업 실패 | errors.INTERNAL |
아니오 |
에러 처리는 에러 처리를 참조하세요.