주:

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를 인증하거나 지원하지 않습니다.

목표

필요 조건

작업 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 컴파트먼트 확인

  1. Linux 시스템에 로그인합니다.

    주: 필요한 필요 조건이 설치 및 구성된 Linux 시스템에서 모든 명령이 실행됩니다.

  2. 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"
      }
    }
    
  3. 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 콘솔을 사용할 수 있습니다.

    OCI 테넌시 화면

    S3 컴파트먼트는 작업 4에서 다시 사용됩니다.

작업 3: S3 호환 API에 액세스하기 위한 고객 암호 키 생성

OCI CLI 명령을 사용하여 암호 키를 생성합니다.

  1. 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"
    }
    
  2. 나중에 환경 변수를 설정하는 데 사용할 수 있도록 ID(AWS_ACCESS_KEY_ID) 및 키(AWS_SECRET_ACCESS_KEY)를 보안 위치에 복사합니다.

    참고: 사용자 OCID는 OCI CLI 구성 파일에서 찾을 수 있으며, 일반적으로 $HOME/.oci/config에 저장됩니다.

또는

OCI 콘솔을 사용하여 보안 키를 생성하고 오른쪽 상단 모서리에 있는 프로파일로 이동한 다음 표시된 사용자 이름을 선택할 수도 있습니다. 고객 암호 키 링크 비밀 키 생성을 누르고 표시 이름을 설정합니다. 복사를 누르고 보안 위치에 암호 키를 저장한 다음 닫기를 누릅니다.

프로파일에서 "고객 암호 키"로 이동

비밀 키 생성 창을 닫은 후 고객 암호 키 목록에서 표시 이름을 찾아 액세스 키 위로 마우스를 가져가서 액세스 키를 복사합니다.

액세스 키 복사

태스크 4: 설정에 대한 버켓 정보 수집

  1. OCI 콘솔로 이동하여 스토리지로 이동하고 버킷을 누릅니다.

  2. 필요 조건으로부터 버킷 이름을 누르고 다음 정보를 기록해 둡니다.

    • 버킷 이름입니다.
    • 객체의 위치로, 접두어가 됩니다.
    • 지역 이름입니다. 지역 및 가용성 도메인에서 지역 코드를 가져옵니다. 예를 들어, 미국 동부(애슈번)는 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++ 예제 작성

  1. 다음 명령을 실행하여 git에서 예제 저장소를 복제합니다.

    $ git clone https://github.com/tonymarkel/OCI_AWS_CPP_SDK_S3_Examples.git
    
  2. 다음 명령을 실행하여 C++ 예제가 포함된 디렉토리로 변경하고, 빌드 디렉토리를 만들고, 해당 디렉토리로 변경한 다음 build 및 make를 실행합니다.

    $ OCI_AWS_CPP_SDK_S3_Examples 
    $ mkdir build 
    $ cd build 
    $ cmake .. 
    $ make 
    

참고: 이 스크립트는 C++용 AWS SDK를 사용하는 예제 스크립트이며, 공식 Oracle 애플리케이션이 아니며 Oracle에서 유지 관리 또는 지원하지 않습니다. 이러한 예제는 예제이므로 자신의 소프트웨어 저장소에서 사용 사례에 맞게 검토, 업데이트 및 사용자 정의할 수 있습니다. Oracle은 타사 SDK를 인증하거나 지원하지 않습니다.

작업 7: 예제 실행

  1. 다음 명령을 실행하여 버킷 목록을 가져옵니다.

    $ ./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 
    
  2. 다음 명령을 실행하여 객체 목록을 가져옵니다.

    예:

    $ ./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로 돌아가서 환경 변수가 올바르게 설정되었는지 확인하십시오.

확인

추가 학습 자원

docs.oracle.com/learn에서 다른 실습을 탐색하거나 Oracle Learning YouTube 채널에서 더 많은 무료 학습 콘텐츠에 액세스하세요. 또한 Oracle Learning Explorer가 되려면 education.oracle.com/learning-explorer을 방문하십시오.

제품 설명서는 Oracle Help Center를 참조하십시오.