4.4. Swift 컨테이너 작업
개발자는 Ceph Object Gateway를 통해 Swift API(애플리케이션 프로그래밍 인터페이스)를 사용하여 컨테이너 작업을 수행할 수 있습니다. 컨테이너를 나열, 생성, 업데이트 및 삭제할 수 있습니다. 컨테이너의 메타데이터를 추가하거나 업데이트할 수도 있습니다.
사전 요구 사항
- 실행 중인 Red Hat Ceph Storage 클러스터.
- RESTful 클라이언트입니다.
4.4.1. Swift 컨테이너 작업
컨테이너는 데이터 오브젝트를 저장하는 메커니즘입니다. 계정에는 여러 컨테이너가 있을 수 있지만 컨테이너 이름은 고유해야 합니다. 이 API를 사용하면 클라이언트가 컨테이너를 생성하고, 액세스 제어 및 메타데이터를 설정하고, 컨테이너 콘텐츠를 검색하고, 컨테이너를 삭제할 수 있습니다. 이 API는 특정 사용자 계정의 정보와 관련된 요청을 만들기 때문에 컨테이너의 액세스 제어가 의도적으로 액세스되지 않는 한, 즉 익명 요청을 허용하는 경우 이 API의 모든 요청을 인증해야 합니다.
Amazon S3 API는 'bucket'이라는 용어를 사용하여 데이터 컨테이너를 설명합니다. 누군가가 Swift API 내에서 'bucket'을 참조하는 경우 'bucket'이라는 용어는 'container'라는 용어와 동일하게 해석될 수 있습니다.
오브젝트 스토리지의 한 측면은 계층적 경로 또는 디렉터리를 지원하지 않는다는 것입니다. 대신 각 컨테이너에 오브젝트가 있을 수 있는 하나 이상의 컨테이너로 구성된 하나의 수준을 지원합니다. RADOS 게이트웨이의 Swift 호환 API는 'pseudo-hierarchical containers'의 개념을 지원합니다. 이는 오브젝트 이름 지정을 사용하여 컨테이너 또는 디렉터리 계층 구조를 실제로 스토리지 시스템에 구현하지 않고 사용하는 수단입니다. 예를 들어, photos/buildings/empire-state. Cryostat와 같이 의사 계층 이름으로 오브젝트의 이름을 지정할 수 있지만 컨테이너 이름에는 슬래시(/
) 문자가 포함될 수 없습니다.
대용량 오브젝트를 버전이 지정된 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
응답 코드가 반환됩니다.
응답 엔터티
계정
- 설명
- 계정 정보 목록입니다.
- 유형
- 컨테이너
container
- 설명
- 컨테이너 목록입니다.
- 유형
- 컨테이너
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
- 필수 항목
- 없음
구분 기호
- 설명
- 접두사와 나머지 개체 이름의 구분 기호입니다.
- 유형
- 문자열
- 유효한 값
- 해당 없음
- 필수 항목
- 없음
path
- 설명
- 오브젝트의 의사 계층적 경로입니다.
- 유형
- 문자열
- 유효한 값
- 해당 없음
- 필수 항목
- 없음
응답 엔터티
container
- 설명
- 컨테이너입니다.
- 유형
- 컨테이너
object
- 설명
- 컨테이너 내의 오브젝트입니다.
- 유형
- 컨테이너
name
- 설명
- 컨테이너 내의 오브젝트 이름입니다.
- 유형
- 문자열
hash
- 설명
- 오브젝트 콘텐츠의 해시 코드입니다.
- 유형
- 문자열
last_modified
- 설명
- 오브젝트의 콘텐츠가 마지막으로 수정된 시간입니다.
- 유형
- 날짜
content_type
- 설명
- 오브젝트 내의 콘텐츠 유형입니다.
- 유형
- 문자열
4.4.5. Swift에서 컨테이너 생성
새 컨테이너를 생성하려면 API 버전, 계정 및 새 컨테이너의 이름을 사용하여 PUT
요청을 만듭니다. 컨테이너 이름은 고유해야 하며 forward-slash(/) 문자를 포함하지 않아야 하며 256바이트 미만이어야 합니다. 요청에 액세스 제어 헤더 및 메타데이터 헤더를 포함할 수 있습니다. 배치 풀 세트의 키를 식별하는 스토리지 정책을 포함할 수도 있습니다. 예를 들어 radosgw-admin zone get
을 실행하여 placement_pools
에서 사용 가능한 키 목록을 확인합니다. 스토리지 정책을 사용하면 컨테이너의 특수 풀 세트(예: SSD 기반 스토리지)를 지정할 수 있습니다. 작업은 멱등입니다. 이미 존재하는 컨테이너를 생성하라는 요청을 하면 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
- 설명
- 임의의 문자열 값을 사용하는 사용자 정의 메타데이터 키입니다.
- 유형
- 문자열
- 필수 항목
- 없음