주:
- 이 자습서에서는 Oracle Cloud에 액세스해야 합니다. 무료 계정에 등록하려면 Oracle Cloud Infrastructure Free Tier 시작하기를 참조하십시오.
- Oracle Cloud Infrastructure 자격 증명, 테넌시 및 구획에 예제 값을 사용합니다. 실습을 완료했으면 이러한 값을 자신의 클라우드 환경과 관련된 값으로 대체하십시오.
C++용 AWS SDK에서 OCI Object Storage Amazon S3 호환성 API 사용
소개
Oracle Cloud Infrastructure(OCI) Object Storage를 사용하면 모든 유형의 데이터를 기본 형식으로 안전하게 저장할 수 있습니다. 중복성이 내장된 OCI Object Storage는 분석, 백업 또는 아카이브 목적으로 여러 데이터 소스를 통합하는 데 사용할 수 있으므로 확장성과 유연성이 필요한 최신 애플리케이션을 구축하는 데 이상적입니다.
OCI Object Storage는 클라우드 워크로드의 기반이며 탄력성, 확장성, 신뢰성 및 비용 효율성이 클라우드의 비정형 데이터를 위한 기본 스토리지입니다. 인기를 얻은 결과 OCI Object Storage와 함께 작업할 수 있는 방대한 도구 에코시스템이 있습니다.
OCI Object Storage는 Amazon S3 호환성 API를 제공합니다. 고객은 기존 Amazon S3 도구를 계속 사용하고, OCI Object Storage를 사용하기 위해 애플리케이션을 최소한으로 변경할 수 있습니다. Amazon S3 호환성 API 및 OCI Object Storage 데이터 세트는 호환됩니다. Amazon S3 호환성 API를 사용하여 OCI Object Storage에 데이터를 기록한 경우에도 네이티브 OCI Object Storage API를 사용하여 데이터를 다시 읽어 들일 수 있습니다. C++용 AWS SDK를 사용하는 고객은 Amazon S3 호환성 API를 사용할 때 어려운 인증 측면을 찾을 수 있습니다. 이 자습서에서는 C++용 AWS SDK 사용을 시작하는 두 가지 간단한 예를 제공하는 것을 목표로 합니다.
참고: 이 스크립트는 C++용 AWS SDK를 사용하는 예제 스크립트이며, 공식 Oracle 애플리케이션이 아니며 Oracle에서 유지 관리 또는 지원하지 않습니다. 이러한 예제는 예제이므로 자신의 소프트웨어 저장소에서 사용 사례에 맞게 검토, 업데이트 및 사용자 정의할 수 있습니다. Oracle은 타사 SDK를 인증하거나 지원하지 않습니다.
목표
-
OCI Object Storage에서 C++용 AWS SDK를 사용할 때는 SSL 인증서 및 인증 문제를 피하십시오.
-
OCI Object Storage 서비스에서 ListBuckets 및 ListObjectsV2에 대한 샘플 C++ 코드를 실행합니다.
필요 조건
-
OCI 계정입니다.
-
OCI Object Storage에서 버킷 및 객체를 읽을 수 있는 사용자 권한입니다. 자세한 내용은 사용자가 오브젝트 스토리지 버킷에서 오브젝트를 다운로드하도록 허용을 참조하십시오.
-
접두어/디렉토리에 중첩된 기존 객체가 있는 기존 버킷에 액세스합니다. 튜토리얼에 버킷 이름이 필요합니다. 자세한 내용은 객체 스토리지에 데이터 넣기 자습서를 참조하십시오.
-
macOS, Linux, Berkeley 소프트웨어 배포판(BSD) 및 Windows PowerShell, 명령 프롬프트 또는 bash에서 터미널 또는 셸 인터페이스를 사용하는 데 익숙합니다.
-
Linux 시스템에 액세스합니다.
-
Linux 시스템에 소프트웨어를 설치할 수 있는 권한 또는 권한입니다.
-
Oracle Cloud Infrastructure 명령행 인터페이스(OCI CLI)를 설치하고 Linux 시스템에 구성합니다. 자세한 내용은 Installing the CLI를 참조하십시오.
-
Linux 시스템의
LD_LIBRARY_PATH
에서 공유 라이브러리를 사용하여 C++용 AWS SDK를 설치합니다. 자세한 내용은 Linux/macOS에서 C++용 AWS SDK 구축을 참조하십시오. -
Linux 시스템에 Git를 설치합니다. 자세한 내용은 시작하기 - Git 설치를 참조하십시오.
작업 1: 경로 및 가상 호스트 스타일 URL 이해
이 자습서를 작성할 때 OCI Object Storage Amazon S3 호환성 API는 경로 스타일 URL을 지원합니다. 이는 버킷이 URL 경로에 있음을 의미합니다.
예:
https://MyNamespace.compat.objectstorage.us-ashburn-1.oraclecloud.com/MyBucketName
OR
https://MyNamespace.compat.objectstorage.us-ashburn-1.oraclecloud.com/MyBucketName/MyObjectName
가상 호스트 스타일 URL에서 OCI Object Storage 버킷 이름은 URL의 하위 도메인(또는 시작)에 포함됩니다.
예:
https://MyBucketName.MyNamespace.compat.objectstorage.us-ashburn-1.oraclecloud.com
OR
https://MyBucketName.MyNamespace.compat.objectstorage.us-ashburn-1.oraclecloud.com/MyObjectName
기본적으로 C++용 AWS SDK는 가상 호스팅 스타일 URL을 사용합니다. AWS에서 생성된 코드 예제를 따르고 OCI 테넌시의 값을 대체하는 경우 다음 출력과 유사한 오류가 표시됩니다. 자세한 내용은 버킷 생성, 나열 및 삭제를 참조하십시오.
curlCode: 60, SSL peer certificate or SSH remote key was not OK
코드가 가상 호스트 스타일 URL을 사용하고 있기 때문에 코드는 OCI Object Storage 버킷이나 적합한 인증서를 참조하지 않습니다.
경로 스타일 URL을 사용하려면 S3Client 설정을 변경해야 합니다. config는 다음 명령을 사용하여 설정해야 합니다.
Aws::Client::ClientConfiguration config;
S3Client s3Client(config, Aws::Client::AWSAuthV4Signer::PayloadSigningPolicy::Never, false);
작업 2: 테넌시 네임스페이스 및 S3 API 컴파트먼트 확인
-
Linux 시스템에 로그인합니다.
주: 필요한 필요 조건이 설치 및 구성된 Linux 시스템에서 모든 명령이 실행됩니다.
-
oci os ns get-metadata
OCI CLI 명령을 실행합니다.$ oci os ns get-metadata { "data": { "default-s3-compartment-id": "ocid1.tenancy.oc1..bbbbcccdabcc0x0aaaaaa00aaaaaaaaaaa0b0b00ccccccccbbbbbbbb00aa", "default-swift-compartment-id": "ocid1.tenancy.oc1..bbbbcccdabcc0x0aaaaaa00aaaaaaaaaaa0b0b00ccccccccbbbbbbbb00aa", "namespace": "MyNamespace" } }
-
S3 컴파트먼트 OCID에
tenancy
이라는 단어가 포함된 경우 루트 컴파트먼트입니다. 다음 명령을 사용하여 이름을 가져옵니다.$ oci iam compartment get --compartment-id <compartment_ocid>
또는 테넌시 루트 컴파트먼트의 경우 다음 명령을 실행합니다.
$ oci iam tenancy get --tenancy-id <tenancy_ocid>
또는 오른쪽 상단 모서리에서 프로파일로 이동하고 테넌시(
your_tenancy_name
)를 선택하여 네임스페이스 및 S3 API 컴파트먼트를 확인하여 OCI 콘솔을 사용할 수 있습니다.S3 컴파트먼트는 작업 4에서 다시 사용됩니다.
작업 3: S3 호환 API에 액세스하기 위한 고객 암호 키 생성
OCI CLI 명령을 사용하여 암호 키를 생성합니다.
-
oci iam customer-secret-key create
명령을 실행합니다.oci iam customer-secret-key create --display-name display-name --user-id ocid1.user.oc1..aaaaaaaa-user-ocid-sdd6ahdouq { "data": { "display-name": "display-name", "id": "7aaaa3462aa34271a276002015f30674a5325aaa", "inactive-status": null, "key": "1aaa577aaaa/aa3aa92aa7aa7aaaaaaAa0aaaAa8AAa=", "lifecycle-state": "ACTIVE", "time-created": "2024-07-19T19:58:03.794000+00:00", "time-expires": null, "user-id": "ocid1.user.oc1..aaaaaaaa-user-ocid-sdd6ahdouq" }, "etag": "e63038c73fc24fa087a2a4c3339ef709" }
-
나중에 환경 변수를 설정하는 데 사용할 수 있도록 ID(
AWS_ACCESS_KEY_ID
) 및 키(AWS_SECRET_ACCESS_KEY
)를 보안 위치에 복사합니다.참고: 사용자 OCID는 OCI CLI 구성 파일에서 찾을 수 있으며, 일반적으로
$HOME/.oci/config
에 저장됩니다.
또는
OCI 콘솔을 사용하여 보안 키를 생성하고 오른쪽 상단 모서리에 있는 프로파일로 이동한 다음 표시된 사용자 이름을 선택할 수도 있습니다. 고객 암호 키 링크 비밀 키 생성을 누르고 표시 이름을 설정합니다. 복사를 누르고 보안 위치에 암호 키를 저장한 다음 닫기를 누릅니다.
비밀 키 생성 창을 닫은 후 고객 암호 키 목록에서 표시 이름을 찾아 액세스 키 위로 마우스를 가져가서 액세스 키를 복사합니다.
태스크 4: 설정에 대한 버켓 정보 수집
-
OCI 콘솔로 이동하여 스토리지로 이동하고 버킷을 누릅니다.
-
필요 조건으로부터 버킷 이름을 누르고 다음 정보를 기록해 둡니다.
- 버킷 이름입니다.
- 객체의 위치로, 접두어가 됩니다.
- 지역 이름입니다. 지역 및 가용성 도메인에서 지역 코드를 가져옵니다. 예를 들어, 미국 동부(애슈번)는 us-ashburn-1로 표시됩니다.
작업 5: 환경 변수 설정
다음 명령을 사용하여 이전 작업의 정보를 기반으로 환경 변수를 설정합니다.
export AWS_ACCESS_KEY_ID="<your access key ID from Task 3>"
export AWS_SECRET_ACCESS_KEY="<your secret key ID from Task 3>"
export OCI_REGION="bukcet region from Task 4>"
export OCI_NAMESPACE="<namespace name from Task 1>"
export OCI_BUCKET="<your bucket name from Task 4>"
export OCI_PREFIX="<object prefix name from Task 4>"
예:
export AWS_ACCESS_KEY_ID="da34baaa4ab029f51c34c1cee83d40f0dEXAMPLE"
export AWS_SECRET_ACCESS_KEY="7w3uMS6kYiYkUpziSlLFcBimBsYDJfojwCWKEXAMPLE="
export OCI_REGION="us-ashburn-1"
export OCI_NAMESPACE="MyNamespace"
export OCI_BUCKET="Images"
export OCI_PREFIX="2024/12/18/Camera"
작업 6: C++ 예제 작성
-
다음 명령을 실행하여 git에서 예제 저장소를 복제합니다.
$ git clone https://github.com/tonymarkel/OCI_AWS_CPP_SDK_S3_Examples.git
-
다음 명령을 실행하여 C++ 예제가 포함된 디렉토리로 변경하고, 빌드 디렉토리를 만들고, 해당 디렉토리로 변경한 다음 build 및 make를 실행합니다.
$ OCI_AWS_CPP_SDK_S3_Examples $ mkdir build $ cd build $ cmake .. $ make
참고: 이 스크립트는 C++용 AWS SDK를 사용하는 예제 스크립트이며, 공식 Oracle 애플리케이션이 아니며 Oracle에서 유지 관리 또는 지원하지 않습니다. 이러한 예제는 예제이므로 자신의 소프트웨어 저장소에서 사용 사례에 맞게 검토, 업데이트 및 사용자 정의할 수 있습니다. Oracle은 타사 SDK를 인증하거나 지원하지 않습니다.
작업 7: 예제 실행
-
다음 명령을 실행하여 버킷 목록을 가져옵니다.
$ ./listBuckets $OCI_NAMESPACE $OCI_REGION $AWS_ACCESS_KEY_ID $AWS_SECRET_ACCESS_KEY
예:
$ ./listBuckets $OCI_NAMESPACE $OCI_REGION $AWS_ACCESS_KEY_ID $AWS_SECRET_ACCESS_KEY S3 Endpoint is: https://MyNamespace.compat.objectstorage.us-ashburn-1.oraclecloud.com/ Found 3 buckets Demo Images Logs
-
다음 명령을 실행하여 객체 목록을 가져옵니다.
예:
$ ./listObjects $OCI_NAMESPACE $OCI_REGION $AWS_ACCESS_KEY_ID $AWS_SECRET_ACCESS_KEY $OCI_BUCKET $OCI_PREFIX S3 Object Path is: https://MyNamespace.compat.objectstorage.us-ashburn-1.oraclecloud.com Bucket is: Images Prefix is: 2024/12/18/Camera LISTING OBJECTS Found 3 objects 2024/12/18/Camera/Image1.jpeg 2024/12/18/Camera/Image2.jpeg 2024/12/18/Camera/DefinitelyNotACat.jpeg
주: 문제가 있으면 작업 5로 돌아가서 환경 변수가 올바르게 설정되었는지 확인하십시오.
관련 링크
확인
-
Authors - Kenneth Heung(Master Principal Cloud Architect), Tony Markel(Principal Cloud Architect)
-
제공자 - Melinda Centeno(Senior Principal Product Manager)
추가 학습 자원
docs.oracle.com/learn에서 다른 실습을 탐색하거나 Oracle Learning YouTube 채널에서 더 많은 무료 학습 콘텐츠에 액세스하세요. 또한 Oracle Learning Explorer가 되려면 education.oracle.com/learning-explorer을 방문하십시오.
제품 설명서는 Oracle Help Center를 참조하십시오.
Use OCI Object Storage Amazon S3 Compatibility API with AWS SDK for C++
G28125-01
Copyright ©2025, Oracle and/or its affiliates.