4.4. Swift 컨테이너 작업
개발자는 Ceph 오브젝트 게이트웨이를 통해 Swift API(애플리케이션 프로그래밍 인터페이스)를 사용하여 컨테이너 작업을 수행할 수 있습니다. 컨테이너를 나열, 생성, 업데이트 및 삭제할 수 있습니다. 컨테이너의 메타데이터를 추가하거나 업데이트할 수도 있습니다.
사전 요구 사항
- 실행 중인 Red Hat Ceph Storage 클러스터.
- RESTful 클라이언트입니다.
4.4.1. Swift 컨테이너 작업 링크 복사링크가 클립보드에 복사되었습니다!
컨테이너는 데이터 오브젝트를 저장하는 메커니즘입니다. 계정에는 여러 컨테이너가 있을 수 있지만 컨테이너 이름은 고유해야 합니다. 이 API를 사용하면 클라이언트가 컨테이너를 만들고, 액세스 제어 및 메타데이터를 설정하고, 컨테이너 콘텐츠를 검색하고, 컨테이너를 삭제할 수 있습니다. 이 API는 특정 사용자 계정의 정보와 관련된 요청을 수행하기 때문에 컨테이너의 액세스 제어에 의도적으로 액세스하지 않는 한 이 API의 모든 요청은 익명의 요청을 허용하는 경우가 아니면 인증되어야 합니다.
Amazon S3 API는 'bucket'이라는 용어를 사용하여 데이터 컨테이너를 설명합니다. Swift API 내에서 'bucket'을 참조하면 'bucket'이라는 용어는 '컨테이너'라는 용어와 동등하게 해석될 수 있습니다.
오브젝트 스토리지의 한 가지 측면은 계층적 경로 또는 디렉터리를 지원하지 않는다는 것입니다. 대신 각 컨테이너에 오브젝트가 있을 수 있는 하나 이상의 컨테이너로 구성된 하나의 수준을 지원합니다. RADOS 게이트웨이의 Swift 호환 API는 'pseudo-hierarchical 컨테이너의 개념을 지원합니다. 이는 오브젝트 이름을 사용하여 컨테이너 또는 디렉터리 계층을 에뮬레이션하는 수단입니다. pseudo-hierarchical 이름으로 오브젝트의 이름을 지정할 수 있습니다(예: photo/buildings/empire-state.ECDHE) 하지만 컨테이너 이름에 슬래시(/
) 문자가 포함될 수 없습니다.
버전이 지정된 Swift 컨테이너에 대규모 오브젝트를 업로드할 때 python-swiftclient
유틸리티와 함께 --leave-segments
옵션을 사용합니다. --leave-segments
를 사용하지 않고 매니페스트 파일을 덮어씁니다. 결과적으로 기존 오브젝트를 덮어쓰므로 데이터가 손실됩니다.
4.4.2. Swift에서 컨테이너의 ACL(액세스 제어 목록)을 업데이트 링크 복사링크가 클립보드에 복사되었습니다!
사용자가 컨테이너를 생성하면 기본적으로 사용자에게 컨테이너에 대한 읽기 및 쓰기 권한이 있습니다. 다른 사용자가 컨테이너의 내용을 읽거나 컨테이너에 쓸 수 있도록 하려면 사용자를 구체적으로 활성화해야 합니다. X-Container-Read
또는 X-Container-Write
설정에서 *
를 지정하여 모든 사용자가 컨테이너에서 읽거나 쓸 수 있습니다. 설정 *
을 사용하면 컨테이너를 공개합니다. 이는 익명 사용자가 컨테이너에서 읽기 또는 쓰기를 가능하게 합니다.
구문
POST /API_VERSION/ACCOUNT/TENANT:CONTAINER HTTP/1.1 Host: FULLY_QUALIFIED_DOMAIN_NAME X-Auth-Token: AUTH_TOKEN X-Container-Read: * X-Container-Write: UID1, UID2, UID3
POST /API_VERSION/ACCOUNT/TENANT:CONTAINER HTTP/1.1
Host: FULLY_QUALIFIED_DOMAIN_NAME
X-Auth-Token: AUTH_TOKEN
X-Container-Read: *
X-Container-Write: UID1, UID2, UID3
요청 헤더
X-Container-Read
- 설명
- 컨테이너에 대한 읽기 권한이 있는 사용자 ID입니다.
- 유형
- 사용자 ID의 쉼표로 구분된 문자열 값입니다.
- 필수 항목
- 없음
X-Container-Write
- 설명
- 컨테이너에 대한 쓰기 권한이 있는 사용자 ID입니다.
- 유형
- 사용자 ID의 쉼표로 구분된 문자열 값입니다.
- 필수 항목
- 없음
4.4.3. Swift 목록 컨테이너 목록 링크 복사링크가 클립보드에 복사되었습니다!
API 버전을 지정하고 계정이 특정 사용자 계정에 대한 컨테이너 목록을 반환하는 GET
요청입니다. 요청이 특정 사용자 컨테이너를 반환하므로 요청에 인증 토큰이 필요합니다. 요청을 할 수 없습니다.
구문
GET /API_VERSION/ACCOUNT HTTP/1.1 Host: FULLY_QUALIFIED_DOMAIN_NAME X-Auth-Token: AUTH_TOKEN
GET /API_VERSION/ACCOUNT HTTP/1.1
Host: FULLY_QUALIFIED_DOMAIN_NAME
X-Auth-Token: AUTH_TOKEN
요청 매개변수
제한
- 설명
- 결과 수를 지정된 값으로 제한합니다.
- 유형
- 정수
- 유효한 값
- 해당 없음
- 필수 항목
- 제공됨
형식
- 설명
- 결과 수를 지정된 값으로 제한합니다.
- 유형
- 정수
- 유효한 값
-
JSON
또는xml
- 필수 항목
- 없음
마커
- 설명
- 마커 값보다 큰 결과 목록을 반환합니다.
- 유형
- 문자열
- 유효한 값
- 해당 없음
- 필수 항목
- 없음
응답에는 컨테이너 목록이 포함되어 있거나 HTTP 204
응답 코드로 반환됩니다.
응답 엔티티
계정
- 설명
- 계정 정보 목록.
- 유형
- 컨테이너
컨테이너
- 설명
- 컨테이너 목록.
- 유형
- 컨테이너
name
- 설명
- 컨테이너의 이름입니다.
- 유형
- 문자열
바이트
- 설명
- 컨테이너의 크기입니다.
- 유형
- 정수
4.4.4. Swift에서 컨테이너 오브젝트 나열 링크 복사링크가 클립보드에 복사되었습니다!
컨테이너 내의 오브젝트를 나열하려면 컨테이너의 API 버전, 계정 및 이름을 사용하여 GET
요청을 만듭니다. 쿼리 매개변수를 지정하여 전체 목록을 필터링하거나 매개변수를 남겨 두어 컨테이너에 저장된 처음 10,000개의 오브젝트 이름 목록을 반환할 수 있습니다.
구문
GET /API_VERSION/TENANT:CONTAINER HTTP/1.1 Host: FULLY_QUALIFIED_DOMAIN_NAME X-Auth-Token: AUTH_TOKEN
GET /API_VERSION/TENANT:CONTAINER HTTP/1.1
Host: FULLY_QUALIFIED_DOMAIN_NAME
X-Auth-Token: AUTH_TOKEN
요청 매개변수
형식
- 설명
- 결과 수를 지정된 값으로 제한합니다.
- 유형
- 정수
- 유효한 값
-
JSON
또는xml
- 필수 항목
- 없음
접두사
- 설명
- 지정된 접두사로 시작하는 오브젝트로 결과 집합을 제한합니다.
- 유형
- 문자열
- 유효한 값
- 해당 없음
- 필수 항목
- 없음
마커
- 설명
- 마커 값보다 큰 결과 목록을 반환합니다.
- 유형
- 문자열
- 유효한 값
- 해당 없음
- 필수 항목
- 없음
제한
- 설명
- 결과 수를 지정된 값으로 제한합니다.
- 유형
- 정수
- 유효한 값
- 0 - 10,000
- 필수 항목
- 없음
구분 기호
- 설명
- 접두사와 오브젝트 이름의 나머지 부분 사이의 구분 기호입니다.
- 유형
- 문자열
- 유효한 값
- 해당 없음
- 필수 항목
- 없음
경로
- 설명
- 오브젝트의 의사 계층 경로입니다.
- 유형
- 문자열
- 유효한 값
- 해당 없음
- 필수 항목
- 없음
응답 엔티티
컨테이너
- 설명
- 컨테이너입니다.
- 유형
- 컨테이너
object
- 설명
- 컨테이너 내의 오브젝트입니다.
- 유형
- 컨테이너
name
- 설명
- 컨테이너 내의 오브젝트 이름입니다.
- 유형
- 문자열
hash
- 설명
- 오브젝트 콘텐츠의 해시 코드입니다.
- 유형
- 문자열
last_modified
- 설명
- 오브젝트의 콘텐츠가 마지막으로 수정된 시간입니다.
- 유형
- 날짜
content_type
- 설명
- 오브젝트 내의 콘텐츠 유형입니다.
- 유형
- 문자열
4.4.5. Swift에서 컨테이너 만들기 링크 복사링크가 클립보드에 복사되었습니다!
새 컨테이너를 생성하려면 API 버전, 계정 및 새 컨테이너의 이름으로 PUT
요청을 만듭니다. 컨테이너 이름은 고유해야 하며, 슬래시(/) 문자를 포함해서는 안 되며 256바이트 미만이어야 합니다. 요청에 액세스 제어 헤더와 메타데이터 헤더를 포함할 수 있습니다. 배치 풀 세트의 키를 식별하는 스토리지 정책을 포함할 수도 있습니다. 예를 들어, radosgw-admin 영역을
실행하면 placement_pools
에서 사용 가능한 키 목록을 확인할 수 있습니다. 스토리지 정책을 사용하면 컨테이너에 특수 풀 세트를 지정할 수 있습니다(예: SSD 기반 스토리지). 작업은 idempotent입니다. 이미 존재하는 컨테이너를 생성하도록 요청하면 HTTP 202 반환 코드로 반환되지만 다른 컨테이너를 생성하지는 않습니다.
구문
headers
X-Container-Read
- 설명
- 컨테이너에 대한 읽기 권한이 있는 사용자 ID입니다.
- 유형
- 사용자 ID의 쉼표로 구분된 문자열 값입니다.
- 필수 항목
- 없음
X-Container-Write
- 설명
- 컨테이너에 대한 쓰기 권한이 있는 사용자 ID입니다.
- 유형
- 사용자 ID의 쉼표로 구분된 문자열 값입니다.
- 필수 항목
- 없음
X-Container-Meta-KEY
- 설명
- 임의의 문자열 값을 사용하는 사용자 정의 메타데이터 키입니다.
- 유형
- 문자열
- 필수 항목
- 없음
X-Storage-Policy
- 설명
-
Ceph Object Gateway의
placement_pools
에서 스토리지 정책을 식별하는 키입니다. 사용 가능한 키에 대해radosgw-admin 영역을
실행합니다. - 유형
- 문자열
- 필수 항목
- 없음
이름이 같은 컨테이너가 이미 있고 사용자가 컨테이너 소유자인 경우 작업이 성공적으로 수행됩니다. 그렇지 않으면 작업이 실패합니다.
HTTP 응답
409
- 상태 코드
-
BucketAlreadyExists
- 설명
- 컨테이너는 이미 다른 사용자의 소유권 아래에 있습니다.
4.4.6. Swift에서 컨테이너 삭제 링크 복사링크가 클립보드에 복사되었습니다!
컨테이너를 삭제하려면 API 버전, 계정 및 컨테이너 이름을 사용하여 DELETE
요청을 만듭니다. 컨테이너가 비어 있어야 합니다. 컨테이너가 비어 있는지 확인하려면 컨테이너에 대해 HEAD
요청을 실행합니다. 컨테이너를 성공적으로 제거하면 컨테이너 이름을 재사용할 수 있습니다.
구문
DELETE /API_VERSION/ACCOUNT/TENANT:CONTAINER HTTP/1.1 Host: FULLY_QUALIFIED_DOMAIN_NAME X-Auth-Token: AUTH_TOKEN
DELETE /API_VERSION/ACCOUNT/TENANT:CONTAINER HTTP/1.1
Host: FULLY_QUALIFIED_DOMAIN_NAME
X-Auth-Token: AUTH_TOKEN
HTTP 응답
204
- 상태 코드
-
NoContent
- 설명
- 컨테이너가 제거되었습니다.
4.4.7. Swift에서 컨테이너 메타데이터 추가 또는 업데이트 링크 복사링크가 클립보드에 복사되었습니다!
컨테이너에 메타데이터를 추가하려면 API 버전, 계정 및 컨테이너 이름을 사용하여 POST
요청을 작성합니다. 메타데이터를 추가하거나 업데이트하려면 컨테이너에 대한 쓰기 권한이 있어야 합니다.
구문
POST /API_VERSION/ACCOUNT/TENANT:CONTAINER HTTP/1.1 Host: FULLY_QUALIFIED_DOMAIN_NAME X-Auth-Token: AUTH_TOKEN X-Container-Meta-Color: red X-Container-Meta-Taste: salty
POST /API_VERSION/ACCOUNT/TENANT:CONTAINER HTTP/1.1
Host: FULLY_QUALIFIED_DOMAIN_NAME
X-Auth-Token: AUTH_TOKEN
X-Container-Meta-Color: red
X-Container-Meta-Taste: salty
요청 헤더
X-Container-Meta-KEY
- 설명
- 임의의 문자열 값을 사용하는 사용자 정의 메타데이터 키입니다.
- 유형
- 문자열
- 필수 항목
- 없음