Roving Edge Infrastructureのオブジェクト・ストレージ

Roving Edge Infrastructureデバイスのオブジェクト・ストレージ・タスク(バケットおよびオブジェクトのタスクを含む)を管理する方法について説明します。

この項では、オブジェクト・ストレージに関連する次のRoving Edge Infrastructureオンデバイス・サービスについて説明します:

パフォーマンスおよび使用状況のしきい値

ストレージしきい値は80%未満にすることをお薦めします。このレベルを維持することは、特に集中的な書き込み操作のために、パフォーマンスを最適化するために重要です。Roving Edge Infrastructureのデバイス容量が80%に近い場合、サービスの最適な運用を実現するためにストレージ・レベルが80%を下回るまで、データをOCIテナンシに転送します。

すべてのRoving Edge Infrastructureデバイスの使用可能なストレージ領域を定期的に監視します。Roving Edge Infrastructureデバイスのモニタリングを参照してください。

Amazon S3 Compatibility API

Amazon S3 Compatibility APIを使用すると、顧客は、既存のAmazon S3ツール(SDKクライアントなど)を引き続き使用し、アプリケーションに対する変更を最小限に抑えてオブジェクト・ストレージで機能できます。Amazon S3 Compatibility APIとオブジェクト・ストレージ・データセットは一致しています。Amazon S3 Compatibility APIを使用してデータをObject Storageに書き込む場合、そのデータはネイティブのObject Storage APIを使用して読み取ることができます。逆もありません。

オブジェクト・ストレージAPIとAmazon S3 Compatibility APIの間の相違点

Oracle Cloud InfrastructureおよびAmazon S3が提供するオブジェクト・ストレージ・サービスでは、同様の概念および用語が使用されています。どちらの場合も、データはバケット内のオブジェクトとして格納されます。相違点は、オブジェクトを操作するための機能およびツールの実装にあります。

次に、2つのストレージのテクノロジ間の相違点を示します:

  • コンパートメント

    Amazon S3ではコンパートメントは使用されません。デフォルトでは、Amazon S3 Compatibility APIまたはSwift APIを使用して作成されたバケットは、Oracle Cloud Infrastructureテナンシのルート・コンパートメントに作成されます。かわりに、Amazon S3 Compatibility APIまたはSwift APIに異なるコンパートメントを指定して、バケットを作成できます。

  • バケットのグローバル・ネームスペース

    オブジェクト・ストレージはグローバル・バケット・ネームスペースを使用しません。かわりに、ネームスペースは、すべてのバケットおよびオブジェクトの最上位のコンテナとして機能します。アカウント作成時に、システム生成および変更不可の一意のネームスペース名が各テナントに1つ割り当てられます。ネームスペースは、リージョン内のすべてのコンパートメントに適用されます。あなたはバケット名を制御します。ただし、それらのバケット名は1つのネームスペース内で一意である必要があります。ネームスペースはリージョン固有ですが、ネームスペース名自体はすべてのリージョンで同じです。米国西部(フェニックス)にMyBucketという名前のバケットと、ドイツ中央部(フランクフルト)にMyBucketという名前のバケットを持つことができます。

  • 暗号化

    Object Storageサービスは、すべての保存データをデフォルトで暗号化します。APIを使用して暗号化を有効または無効にできません。

  • オブジェクト・レベルのアクセス制御リスト(ACL)

    Oracle Cloud Infrastructureでは、オブジェクトにACLは使用されません。かわりに、管理者は、グループコンパートメントおよびポリシーを設定して、どのユーザーがどのサービスおよびリソースにアクセスできるか、およびアクセスのタイプを制御する必要があります。たとえば、ポリシーは、ユーザーとグループの作成、バケットの作成、オブジェクトのダウンロード、オブジェクト・ストレージ関連のポリシーとルールの管理などを実行できるユーザーを制御します。

詳細は、オブジェクト・ストレージの概要を参照してください。

Oracle Cloud Infrastructureへのアクセスの設定

Amazon S3からオブジェクト・ストレージへのアプリケーション・アクセスを有効にするには、Oracle Cloud Infrastructureへのアクセスを設定し、アプリケーションを変更する必要があります。

  1. Oracle Cloud Infrastructureにサインアップして、一意のネームスペースを取得します。

  2. Amazon S3 Compatibility APIとObject Storageのユーザーは、このサービスを操作する権限が必要です。権限があるかわからない場合は、管理者に連絡してください。ポリシーの基本情報は、ポリシーの動作を参照してください。オブジェクト・ストレージの使用を可能にするポリシーについては、共通ポリシーおよびポリシー・リファレンスを参照してください。

  3. 既存の顧客秘密キーを使用するか、顧客秘密キーを作成します。顧客秘密キーはアクセス・キー/秘密キーのペアで構成されます。これらのキーの作成および使用については、S3構成ファイルの設定に関する次の項で説明します。

S3構成ファイルの設定

Roving Edge InfrastructureのObject Storageは、Oracle Cloud Infrastructureコマンドライン・インタフェースのサポートに加えて、Amazon S3cmdツールをサポートしています。Amazon S3cmdツールのサポートでは、S3構成ファイルを設定する必要がありますが、S3cmdもサポートしています。

s3cmdは、次のサイトからダウンロードできます。

https://s3tools.org/download

MacintoshおよびLinuxでは、s3cmd構成ファイルの名前は.s3cfgで、ホーム・ディレクトリにあります。次に例を示します。

/home/username/($HOME)

Windowsでは、s3cmd構成ファイルの名前はs3cmd.iniで、通常は%USERPROFILE% -> Application Dataにあります。

c:\users\username\AppData\Roaming\s3cmd.ini

詳細は、https://s3tools.org/kb/item14.htmを参照してください。

次の例は、S3cmd構成ファイルの内容を示しています。

[default]
access_key = 9aa40ec9-bec3-4fab-9e5a-3584a5979d48
access_token =
add_encoding_exts =
add_headers =
bucket_location = US
cache_file =
ca_certs_file = <Full path to the bundle.pem file>
check_ssl_hostname = False
default_mime_type = binary/octet-stream
delay_updates = False
delete_after = False
delete_after_fetch = False
delete_removed = False
dry_run = False
enable_multipart = True
encoding = UTF-8
encrypt = False
expiry_date =
expiry_days =
expiry_prefix =
follow_symlinks = False
force = False
get_continue = False
gpg_command = /usr/bin/gpg
gpg_decrypt = %(gpg_command)s -d --verbose --no-use-agent --batch --yes --passphrase-fd %(passphrase_fd)s -o %(output_file)s %(input_file)s
gpg_encrypt = %(gpg_command)s -c --verbose --no-use-agent --batch --yes --passphrase-fd %(passphrase_fd)s -o %(output_file)s %(input_file)s
gpg_passphrase =
guess_mime_type = True
host_base = <rover_node_ip>:8019
host_bucket = <rover_node_ip>:8019
human_readable_sizes = False
ignore_failed_copy = False
invalidate_default_index_on_cf = False
invalidate_default_index_root_on_cf = True
invalidate_on_cf = False
list_md5 = False
log_target_prefix =
max_delete = -1
mime_type =
multipart_chunk_size_mb = 15
preserve_attrs = True
progress_meter = True
proxy_host =
proxy_port = 0
put_continue = False
recursive = False
recv_chunk = 4096
reduced_redundancy = False
restore_days = 1
secret_key = <Your secret key, see below>
send_chunk = 4096
server_side_encryption = False
skip_existing = False
socket_timeout = 300
urlencoding_mode = normal
use_https = True
use_mime_magic = True
verbosity = WARNING
website_endpoint = https://<rover_node_ip>:8015
website_error =

Roving Edge Infrastructureで使用するS3cmd構成ファイルを設定するには:

  1. access_keyフィールドを更新します。

    1. 適切なデバイスのRoving Edge Infrastructureデバイス・コンソールにログインします。

    2. ナビゲーション・メニューを開き、「アイデンティティ管理」→「ユーザー」を選択します。ユーザー・ページが表示されます。すべてのユーザーが表形式でリストされます。

    3. S3cmd構成ファイルで使用するアクセス・キーを持つユーザーをクリックします。ユーザーの「詳細」ページが表示されます。

    4. 「リソース」「顧客秘密キー」をクリックします。「顧客秘密キー」ページが表示されます。すべての顧客秘密キーが表形式でリストされます。

    5. アクセス・キーをコピーして、s3cmd構成ファイルのaccess_keyフィールド値に貼り付けます。

  2. ca_certs_fileフィールドの更新: bundle.pemファイルのフルパスを入力します。たとえば:

    /Users/user_name/.oci/bundle.pem

    ca certsファイルがない場合は、次のコマンドを使用してダウンロードします。

    echo -n | openssl s_client -showcerts -connect rover_node_IP:8015 | 
    sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > bundle.pem
  3. check_ssl_hostnameフィールドをfalseに設定します。

  4. host_baseフィールドの更新: rover_node_IP:8019を入力します。

  5. host_bucketフィールドの更新: rover_node_IP:8019を入力します。

  6. secret_keyフィールドを更新します。

    1. 適切なデバイスのRoving Edge Infrastructureデバイス・コンソールにログインします。

    2. ナビゲーション・メニューを開き、「アイデンティティ管理」→「ユーザー」を選択します。ユーザー・ページが表示されます。すべてのユーザーが表形式でリストされます。

    3. S3cmd構成ファイルで使用する秘密キーを持つユーザーをクリックします。ユーザーの「詳細」ページが表示されます。

    4. 「リソース」「顧客秘密キー」をクリックします。「顧客秘密キー」ページが表示されます。すべての顧客秘密キーが表形式でリストされます。

    5. 「秘密キーの生成」をクリックします。生成された秘密キー「秘密キーの生成」ダイアログ・ボックスに表示されます。同時に、Oracleは秘密キーとペアのアクセス・キーを生成します。新しく生成された顧客秘密キーが顧客秘密キーのリストに追加されます。

    6. キーをコピーして、s3cmd構成ファイルのsecret_keyフィールド値に貼り付けます。

  7. s3cmd構成ファイルを保存して閉じます。

Amazon S3 Compatibility APIのサポート

Amazon S3 Compatibility APIのサポートは、バケット・レベルおよびオブジェクト・レベルで提供されています。

バケットAPI

次のバケットAPIがサポートされています:

オブジェクトAPI

次のオブジェクトAPIがサポートされています:

マルチパート・アップロードAPI

次のマルチパート・アップロードAPIがサポートされています:

SSE-Cのサポート

オプションのAPIヘッダーを使用すると、Object Storageとの間でアップロードおよびダウンロードされたオブジェクトの暗号化および暗号化に使用される独自の256ビットAES暗号化キーを指定できます。

サーバー側暗号化に独自のキーを使用する場合は、次の3つのリクエスト・ヘッダーを暗号化キー情報とともに指定します:

ヘッダー 内容 サポートされているAPI
x-amz-server-side-encryption-customer-algorithm 暗号化アルゴリズムとしてAES256を指定します。

GetObject

HeadObject

PutObject

InitiateMultipartUpload

UploadPart

x-amz-server-side-encryption-customer-key データの暗号化または暗号化解除に使用するbase64エンコードの256ビット暗号化キーを指定します。
x-amz-server-side-encryption-customer-key-md5 暗号化キーのbase64エンコードの128ビットMD5消化を指定します。この値は、暗号化キーの整合性チェックに使用されます。

オブジェクト・ストレージには、オブジェクトやパートをコピーするための個別のAPIがあります。Amazon S3は、PutObjectおよびUploadPartに次のヘッダーが存在することを使用して、コピー操作を決定します。SSE-Cキーで暗号化されたソース・オブジェクトをコピーするには、オブジェクト・ストレージがオブジェクトを復号化できるように、これら3つのヘッダーを指定する必要があります。

ヘッダー Description サポートされているAPI
x-amz-copy-source-server-side-encryption-customer-algorithm ソース・オブジェクトの復号化に使用する暗号化アルゴリズムとしてAES256を指定します。

PutObject

UploadPart

x-amz-copy-source-server-side-encryption-customer-key ソース・オブジェクトの暗号化に使用するbase64エンコードの256ビット暗号化キーを指定します。
x-amz-copy-source-server-side-encryption-customer-key-md5 ソース・オブジェクトの暗号化に使用する暗号化キーのbase64エンコードの128ビットMD5ダイジェストを指定します。

Vault内の独自のキーを使用した暗号化のサポート

オプションのAPIヘッダーを使用すると、Object Storageにアップロードされたオブジェクトの暗号化に使用される、Vault内の独自の暗号化キーを指定できます。

サーバー側暗号化にVault内の独自のキーを使用する場合は、次のリクエスト・ヘッダーをVault内のキーのOCIDで指定します:

ヘッダー Description サポートされているAPI
x-amz-server-side-encryption-aws-kms-key-id オブジェクトの暗号化に使用されるVault内の既存のキーのOCID。

PutObject

InitiateMultipartUpload

UploadPart

サポートされるAmazon S3クライアント

様々なクライアント・アプリケーションを構成して、オブジェクト・ストレージのAmazon S3互換エンドポイントと通信できます。このトピックでは、サポートされているAmazon S3クライアントの構成例を示します。Oracle Cloud Infrastructureへのアクセスの設定の前提条件を確認します。

AWS SDK for Java

AWS SDK for Javaのリポジトリ、ファイルのダウンロードおよびドキュメントのリンクは、GitHub https://github.com/aws/aws-sdk-javaにあります。

オブジェクト・ストレージを使用するようにAWS SDK for Javaを構成する例を次に示します。


                // Put the Access Key and Secret Key here
                
AWSCredentialsProvider credentials = new AWSStaticCredentialsProvider(new BasicAWSCredentials(
 "gQ4+YC530sBa8qZI6WcbUbtH8oar0exampleuniqueID",
 "7fa22331ebe62bf4605dc9a42aaeexampleuniqueID"))));

// Your namespace
String namespace = "rover-namespace";

// The region to connect to
String region = "us-ashburn-1";

// Create an S3 client pointing at the region
String endpoint = String.format("%s.compat.objectstorage.%s.oraclecloud.com",namespace,region);
AwsClientBuilder.EndpointConfiguration endpointConfiguration = new AwsClientBuilder.EndpointConfiguration(endpoint, region);
AmazonS3 client = AmazonS3Client.builder()
 .standard()
 .withCredentials(credentials)
 .withEndpointConfiguration(endpointConfiguration)
 .disableChunkedEncoding()
 .enablePathStyleAccess()
 .build();

AWS SDK for Javascript

AWS SDK for Javascriptのリポジトリ、ドキュメント・リンクおよびインストール手順は、GitHub (https://github.com/aws/aws-sdk-js)にあります。

オブジェクト・ストレージを使用するようにAWS SDK for Javascriptを構成する例を次に示します

s3 = new AWS.S3({
  region: 'us-ashburn-1',
  endpoint: 'https://' + rover-namespace + '.compat.objectstorage.us-ashburn-1.oraclecloud.com',
  accessKeyId: 'gQ4+YC530sBa8qZI6WcbUbtH8oar0exampleuniqueID',
  secretAccessKey: '7fa22331ebe62bf4605dc9a42aaeexampleuniqueID',
  s3ForcePathStyle: true,
  signatureVersion: 'v4',
});

AWS SDK for Python(Boto3)

AWS SDK for Python (Boto3)のリポジトリ、ドキュメント・リンクおよびインストール手順は、GitHub (https://github.com/boto/boto3)にあります。

オブジェクト・ストレージを使用するようにAWS SDK for Pythonを構成する例を次に示します

import boto3
  
s3 = boto3.resource(
    's3',
    aws_access_key_id="gQ4+YC530sBa8qZI6WcbUbtH8oar0exampleuniqueID",
    aws_secret_access_key="7fa22331ebe62bf4605dc9a42aaeexampleuniqueID",
    region_name="us-phoenix-1", # Region name here that matches the endpoint
    endpoint_url="https://rover-namespace.compat.objectstorage.us-phoenix-1.oraclecloud.com" # Include your rover-namespace in the URL
)
  
# Print out the bucket names
for bucket in s3.buckets.all():
    print bucket.name

s3fsを使用したオブジェクト・ストレージ・バケットのマウント

s3fsを使用すると、LinuxおよびmacOSでオブジェクト・ストレージをファイル・システムとしてマウントできます。s3fsリポジトリ、ドキュメント・リンク、インストール手順および例は、GitHub (https://github.com/s3fs-fuse/s3fs-fuse)にあります。

s3fsは、すべてのアプリケーションには適していません。次の制限事項を理解してください:

  • オブジェクト・ストレージ・サービスは、ローカル・ファイル・システムと比較してレイテンシが長く、ランダムな書込みアクセス権がありません。s3fsは、大きいファイルのみを読み取るワークロードに対して最適なスループットを実現します。

  • ファイルを部分的に更新することはできないため、1バイトを変更するだけでもファイル全体をアップロードする必要があります。

  • ファイルへのランダムな書込みまたは追加を行うには、ファイル全体をリライトする必要があります。

  • s3fsは部分的なダウンロードをサポートしていないため、ファイルの1バイトを読み取るだけの場合でも、ファイル全体をダウンロードする必要があります。

  • s3fsは、サーバー側のファイル・コピーをサポートしていません。コピーしたファイルは、まずクライアントにダウンロードしてから、新しい場所にアップロードする必要があります。

  • ディレクトリのリストなどのメタデータ操作の際には、ネットワーク・レイテンシによりパフォーマンスが低下します。

  • s3fsは、ハード・リンクやファイルまたはディレクトリのアトミックな名前変更をサポートしていません。

  • s3fsは、同じバケットをマウントする複数のクライアント間の調整を行いません。

オブジェクト・ストレージ・バケットをファイル・システムとしてマウントするには:

  1. GitHub (https://github.com/s3fs-fuse/s3fs-fuse)にあるインストール手順に従います。

    事前構築パッケージを使用してインストールできない場合は、https://github.com/s3fs-fuse/s3fs-fuse/blob/master/COMPILATION.mdのコンパイル手順に従ってください。

  2. Oracle Cloud Infrastructureへのアクセスの設定の前提条件を確認して実行します。バケットをファイル・システムとしてマウントできるアクセス・キー/秘密キーのペアと適切なIAMポリシーが必要です。例:
    Allow group s3fsAdmins to manage object-family in tenancy
  3. ${HOME}/.passwd-s3fs資格証明ファイルにアクセス・キー/秘密キー・ペアの資格証明を入力します:

    cat ${HOME}/.passwd-s3fs
    access_key:secret_key

    例:

    cat ${HOME}/.passwd-s3fs
    gQ4+YC530sBa8qZI6WcbUbtH8oar0exampleuniqueID:7fa22331ebe62bf4605dc9a42aaeexampleuniqueID

    次に、資格証明ファイルの所有者のみの権限を設定します:

    chmod 600 ${HOME}/.passwd-s3fs
  4. オブジェクト・ストレージ・バケットをマウント・ポイントを作成します:
    mkdir /path/to/local_directory_name
    s3fs bucket_name local_directory_name -o passwd_file=${HOME}/.passwd-s3fs 
    -o url=https://rover-namespace.compat.objectstorage.region_ID.oraclecloud.com 
    -o use_path_request_style -o kernel_cache -o multipart_size=128 -o parallel_count=50 -o multireq_max=100 -o max_background=1000 
    [-o endpoint=region_ID]

    説明:

    • bucket_nameは、マウントするバケットの名前です。

    • local_directory_nameは、バケットをマウントするローカル・ディレクトリの名前です。

    • namespace_nameは、アカウントの作成時にテナンシに割り当てられた一意のシステム生成です。CLIまたはコンソールを使用して、ネームスペース名を取得できます。詳細は、オブジェクト・ストレージ・ネームスペースの理解を参照してください。

    • region_IDは、バケットが存在するリージョン識別子です。詳細は、リージョンおよび可用性ドメインを参照してください。

    • endpoint: ホーム・リージョンで作成されたバケットをマウントする場合は、endpointパラメータを指定する必要があります。別のリージョンで作成されたバケットをマウントする場合は、endpointパラメータを指定する必要があります。

  5. s3fsを使用してシステム起動時にバケットをファイル・システムとして自動的にマウントする場合は、/etc/fstabファイルに次を追加します:

    bucket_name /path/to/local_directory_name fuse.
    s3fs use_path_request_style,passwd_file=/root/.s3fs-password,url=https://rover-namespace.
    compat.objectstorage.region_ID.oraclecloud.com,endpoint=region_ID 
    kernel_cache,multipart_size=128,parallel_count=50,multireq_max=100,max_background=1000,_netdev
  6. s3fsバケットのマウントを確認するには、df -hコマンドを実行します。出力には、バケットの新しいマウント・ポイントが表示されます。新しいマウント・ポイントに移動し、lsコマンドを実行してバケット内のすべてのオブジェクトをリストします。

オブジェクト・ストレージ・バケットのマウントのトラブルシューティングを行うには

  • 認可エラーが発生した場合は、IAMポリシーをレビューし、バケットをファイル・システムとしてマウントできるポリシーがあることを確認します。例:
    Allow group s3fsAdmins to manage object-family in tenancy
  • ホーム・リージョン以外のリージョンで作成されたバケットをマウントする場合は、urlパラメータとendpointパラメータの両方にそのリージョンを指定する必要があります。
  • バケットをルート・ユーザーとしてマウントした場合、-o allow_otherをs3fsコマンドに追加するか、allow_other/etc/fstabマウント・オプションに追加しないかぎり、他のユーザーはバケット内のオブジェクトをリストまたはアクセスできません。特定のUIDおよびGIDパラメータを指定して、ユーザー・アクセスの詳細を指定することもできます。
  • トラブルシューティング・ソリューションを確認して検証した上で、サポートに連絡する必要がある場合は、DEBUGモードでmountコマンドを再実行して、障害の詳細を取得します。コマンドの最後に次を追加して、出力を保存します:
    -o dbglevel=info -f -o curldbg
ファイル・システムからオブジェクト・ストレージ・バケットをアンマウントするには、マウント・ポイントを指定して次のコマンドを実行します:
umount /path/to/local_directory_name