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
요청 헤더
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
요청 매개변수
제한
- 설명
- 결과 수를 지정된 값으로 제한합니다.
- 유형
- 정수
- 유효한 값
- 해당 없음
- 필수 항목
- 제공됨
형식
- 설명
- 결과 수를 지정된 값으로 제한합니다.
- 유형
- 정수
- 유효한 값
-
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
요청 매개변수
형식
- 설명
- 결과 수를 지정된 값으로 제한합니다.
- 유형
- 정수
- 유효한 값
-
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 반환 코드로 반환되지만 다른 컨테이너를 생성하지는 않습니다.
구문
PUT /API_VERSION/ACCOUNT/TENANT:CONTAINER HTTP/1.1 Host: FULLY_QUALIFIED_DOMAIN_NAME X-Auth-Token: AUTH_TOKEN X-Container-Read: COMMA_SEPARATED_UIDS X-Container-Write: COMMA_SEPARATED_UIDS X-Container-Meta-KEY:VALUE X-Storage-Policy: PLACEMENT_POOLS_KEY
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
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
요청 헤더
X-Container-Meta-KEY
- 설명
- 임의의 문자열 값을 사용하는 사용자 정의 메타데이터 키입니다.
- 유형
- 문자열
- 필수 항목
- 없음