Storage > Object Storage > Amazon S3互換APIガイド

NHN CloudオブジェクトストレージはAWSのオブジェクトストレージS3 APIと互換性のあるAPIを提供します。したがって、AWS S3 APIを使用することを想定して開発されたアプリケーションは、設定を変更するだけで使用できます。

提供するS3互換APIは次のとおりです。

S3 APIメソッド 用途
PUT Bucket バケット作成
HEAD Bucket バケット情報を照会
DELETE Bucket バケットを削除
PUT Bucket ACL バケットACLを設定
GET Bucket ACL バケットACLを照会
GET Bucket Location バケットがあるリージョンを照会
GET Bucket List Objects バケットのオブジェクトリストを照会
GET Object オブジェクトをダウンロード
HEAD Object オブジェクト情報を照会
PUT Object オブジェクトをアップロード
PUT Object Copy オブジェクトをコピー
DELETE Object オブジェクトを削除
Initiate Multipart Upload マルチパートアップロードを初期化
Upload Part パートをアップロード
Upload Part Copy パートをコピー
Complete Multipart Upload マルチパートアップロード完了
Abort Multipart Upload マルチパートアップロードを中断
List Parts マルチパートオブジェクトのパートオブジェクトリスト
List Multipart Uploads アップロード進行中のマルチパートオブジェクトのパートオブジェクトリスト
DELETE Multiple Objects マルチパートオブジェクトを削除

この文書はAPI使用方法の基礎的な部分のみを説明します。高度な機能を使用するにはAmazon S3 APIガイドを参照するか、AWS SDKを使用することを推奨します。

S3 API認証情報(S3 API Credential)

S3 API認証情報の発行

Amazon S3互換APIを使用するには、まずAWS EC2形式のS3 API認証情報を発行する必要があります。認証情報はWebコンソールまたはAPIを利用して発行できます。Webコンソールを利用した認証情報の発行はS3 API認証情報項目を参照してください。

APIを利用して認証情報を発行するには認証トークンが必要です。認証トークンの発行はオブジェクトストレージAPIガイドを参照してください。

POST    https://api-identity-infrastructure.nhncloudservice.com/v2.0/users/{api-user-id}/credentials/OS-EC2

Content-Type: application/json
X-Auth-Token: {token-id}

リクエスト

名前 種類 形式 必須 説明
X-Auth-Token Header String O 発行されたトークンID
api-user-id URL String O APIユーザーID、API Endpoint設定ダイアログボックスで確認可能
tenant_id Body String O ユーザーテナントID。API Endpoint設定ダイアログボックスで確認可能

[参考] {api-user-id}は、コンソールのAPI Endpoint設定ダイアログボックスでAPIユーザーID項目を参照するか、認証トークン発行APIレスポンス本文のaccess.user.idフィールドで確認できます。 認証トークン発行APIを利用するにはAPIガイドの認証トークン発行項目を参照してください。

S3 API認証情報は有効期限がなく、ユーザーごとにプロジェクトあたり最大3個まで発行できます。

[注意] S3 API認証情報キーが漏洩すると、誰でも漏洩したキーを利用してオブジェクトにアクセスできます。キーが漏洩した場合は漏洩した認証情報を削除して、新しく発行して使用することを推奨します。

S3 API資格情報を発行されたユーザーアカウントがプロジェクトへのアクセス権を失ったり、NHN Cloudを退会して削除されると、資格情報は直ちに有効期限が切れ、使用できなくなります。

{
  "tenant_id": "84c9e9a51aea402e95389c08ac562ac5"
}

レスポンス

名前 種類 形式 説明
access Body String S3 API認証情報アクセスキー
secret Body String S3 API認証情報シークレットキー
user_id Body String APIユーザーID
tenant_id Body String テナントID
created_at Body String S3 API認証情報作成時間
accessed_at Body String S3 API認証情報の最終アクセス時間
{
  "credential": {
    "access": "253a3c7ca27f4731a9c757addfac29ca",
    "tenant_id": "84c9e9a51aea402e95389c08ac562ac5",
    "secret": "be057f235abf45ee8e2ba14edc5fb253",
    "user_id": "84db0c80-3c39-11e7-b29c-005056ac1497",
    "created_at": "2024-10-19T08:24:46.000000Z",
    "accessed_at": "2024-10-19T08:24:46.000000Z"
  }
}

S3 API認証情報照会

発行されたS3 API認証情報を照会します。

[Method, URL]

GET   https://api-identity-infrastructure.nhncloudservice.com/v2.0/users/{user-id}/credentials/OS-EC2

X-Auth-Token: {token-id}

リクエスト

このAPIはリクエスト本文を要求しません。

名前 種類 形式 必須 説明
X-Auth-Token Header String O 発行されたトークンID
user-id URL String O ユーザーID。認証トークンに含まれている

レスポンス

名前 種類 形式 説明
access Body String 認証情報アクセスキー
secret Body String 認証情報シークレットキー
user_id Body String APIユーザーID
tenant_id Body String テナントID
created_at Body String S3 API認証情報作成時間
accessed_at Body String S3 API認証情報の最終アクセス時間
{
  "credentials": [
    {
      "access": "253a3c7ca27f4731a9c757addfac29ca",
      "tenant_id": "84c9e9a51aea402e95389c08ac562ac5",
      "secret": "be057f235abf45ee8e2ba14edc5fb253",
      "user_id": "84db0c80-3c39-11e7-b29c-005056ac1497",
      "created_at": "2024-10-19T08:24:46.000000Z",
      "accessed_at": "2024-10-19T08:30:42.000000Z"
    }
  ]
}

EC2認証情報を削除

登録したEC2認証情報を削除します。

[Method, URL]

DELETE   https://api-identity-infrastructure.nhncloudservice.com/v2.0/users/{user-id}/credentials/OS-EC2/{access}

X-Auth-Token: {token-id}

リクエスト

このAPIはリクエスト本文を要求しません。

名前 種類 形式 必須 説明
X-Auth-Token Header String O 発行されたトークンID
user-id URL String O ユーザーID。認証トークンに含まれている
access URL String O S3 API認証情報アクセスキー

レスポンス

このAPIはレスポンス本文を返しません。リクエストが正しければステータスコード204を返します。

署名(signature)作成

S3 APIを使用するには、認証情報を利用して署名を作成する必要があります。署名の作成方法はAWS signature V4文書を参照してください。

署名の作成に必要な情報は次のとおりです。

名前
アルゴリズム AWS4-HMAC-SHA256
署名時刻 YYYYMMDDThhmmssZ形式
サービス名 s3
リージョン名 KR1 - 韓国(パンギョ)リージョン
KR2 - 韓国(ピョンチョン)リージョン
KR3 - 韓国(光州)リージョン
JP1 - 日本(東京)リージョン
US1 - 米国(カリフォルニア)リージョン
シークレットキー 認証情報シークレットキー

バケット(Bucket)

バケット作成

バケットを作成します。バケット名は次のようにAmazon S3の命名ルールに従う必要があります。

  • バケット名は3文字から63文字にする必要があります。
  • バケット名は英字(小文字)、数字、ドット(.)およびハイフン(-)のみ使用できます。
  • バケット名の最初と最後の文字は英数字のみ使用できます。
  • バケット名はIPアドレス形式(例:192.168.5.4)を使用しません。
  • バケット名の最初の文字にxn--は使用できません。

詳細な内容はBucket restrictions and limitations文書を参照してください。

PUT /{bucket}

Date: Sat, 22 Feb 2020 22:22:22 +0000
Authorization: AWS {access}:{signature}

[参考] WebコンソールまたはオブジェクトストレージAPIを通して作ったコンテナの名前がバケット命名ルールに違反している場合、S3互換APIにアクセスできません。

リクエスト

このAPIはリクエスト本文を要求しません。

名前 種類 形式 必須 説明
bucket URL String O バケット名
Date Header String O リクエスト時刻
Authorization Header String O S3 API認証情報アクセスキーと署名で構成

レスポンス

このAPIはレスポンス本文を返しません。リクエストが正しい場合、ステータスコード200を返します。

名前 種類 形式 説明
Location Header String 作成したバケットパス

バケットリスト照会

バケットリストを照会します。

GET /

Date: Sat, 22 Feb 2020 22:22:22 +0000
Authorization: AWS {access}:{signature}

リクエスト

このAPIはリクエスト本文を要求しません。

名前 種類 形式 必須 説明
Date Header String O リクエスト時刻
Authorization Header String O S3 API認証情報アクセスキーと署名で構成

レスポンス

リクエストが正しい場合、ステータスコード200とXML形式で構成されたバケットリストを返します。

<?xml version='1.0' encoding='UTF-8'?>
<ListAllMyBucketsResult
    xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <Owner>
        <ID>user:panther</ID>
        <DisplayName>user:panther</DisplayName>
    </Owner>
    <Buckets>
        <Bucket>
            <Name>log</Name>
            <CreationDate>2009-02-03T16:45:09.000Z</CreationDate>
        </Bucket>
        <Bucket>
            <Name>snapshot</Name>
            <CreationDate>2009-02-03T16:45:09.000Z</CreationDate>
        </Bucket>
    </Buckets>
</ListAllMyBucketsResult>

バケット照会

指定したバケットの情報と内部に保存されたオブジェクトリストを照会します。

GET /{bucket}

Date: Sat, 22 Feb 2020 22:22:22 +0000
Authorization: AWS {access}:{signature}

[参考] WebコンソールまたはオブジェクトストレージAPIで作成したバケットの名前がバケット命名規則に違反する場合、S3互換APIではアクセスできません。

リクエスト

このAPIはリクエスト本文を要求しません。

名前 種類 形式 必須 説明
bucket URL String O バケット名
Date Header String O リクエスト時刻
Authorization Header String O S3 API認証情報アクセスキーと署名で構成

レスポンス

リクエストが正しい場合、ステータスコード200とXML形式で構成されたオブジェクトリストトを返します。

<?xml version='1.0' encoding='UTF-8'?>
<ListBucketResult
    xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <Name>snapshot</Name>
    <Prefix/>
    <Marker/>
    <MaxKeys>1000</MaxKeys>
    <IsTruncated>false</IsTruncated>
    <Contents>
        <Key>cheetah</Key>
        <LastModified>2023-02-01T04:49:52.995Z</LastModified>
        <ETag>"7d793037a0760186574b0282f2f435e7"</ETag>
        <Size>5</Size>
        <Owner>
            <ID>user:panther</ID>
            <DisplayName>user:panther</DisplayName>
        </Owner>
        <StorageClass>STANDARD</StorageClass>
    </Contents>
    <Contents>
        <Key>leopard</Key>
        <LastModified>2023-02-01T04:49:52.685Z</LastModified>
        <ETag>"5d41402abc4b2a76b9719d911017c592"</ETag>
        <Size>5</Size>
        <Owner>
            <ID>user:panther</ID>
            <DisplayName>user:panther</DisplayName>
        </Owner>
        <StorageClass>STANDARD</StorageClass>
    </Contents>
</ListBucketResult>

バケットの削除

指定したバケットを削除します。削除するバケットは空になっている必要があります。

DELETE /{bucket}

Date: Sat, 22 Feb 2020 22:22:22 +0000
Authorization: AWS {access}:{signature}

リクエスト

このAPIはリクエスト本文を要求しません。

名前 種類 形式 必須 説明
bucket URL String O バケット名
Date Header String O リクエスト時刻
Authorization Header String O S3 API認証情報アクセスキーと署名で構成

レスポンス

このAPIはレスポンス本文を返しません。リクエストが正しい場合、ステータスコード204を返します。

オブジェクト

オブジェクトのアップロード

指定したバケットにオブジェクトをアップロードします。

PUT /{bucket}/{obj}

Date: Sat, 22 Feb 2020 22:22:22 +0000
Authorization: AWS {access}:{signature}

リクエスト

このAPIはリクエスト本文を要求しません。

名前 種類 形式 必須 説明
bucket URL String O バケット名
obj URL String O オブジェクト名
Date Header String O リクエスト時刻
Authorization Header String O S3 API認証情報アクセスキーと署名で構成

レスポンス

名前 種類 形式 説明
ETag Header String オブジェクトのMD5ハッシュ値
Last-Modified Header String オブジェクトの最後の修正日時(e.g. Wed, 01 Mar 2006 12:00:00 GMT)

オブジェクトのダウンロード

オブジェクトをダウンロードします。


GET /{bucket}/{obj}

Date: Sat, 22 Feb 2020 22:22:22 +0000
Authorization: AWS {access}:{signature}

リクエスト

このAPIはリクエスト本文を要求しません。

名前 種類 形式 必須 説明
bucket URL String O バケット名
obj URL String O オブジェクト名
Date Header String O リクエスト時刻
Authorization Header String O S3 API認証情報アクセスキーと署名で構成

レスポンス

名前 種類 形式 説明
ETag Header String オブジェクトのMD5ハッシュ値
Last-Modified Header String オブジェクトの最後の修正日時(e.g. Wed, 01 Mar 2006 12:00:00 GMT)

オブジェクトの削除

指定したオブジェクトを削除します。

DELETE /{bucket}/{obj}

Date: Sat, 22 Feb 2020 22:22:22 +0000
Authorization: AWS {access}:{signature}

リクエスト

このAPIはリクエスト本文を要求しません。

名前 種類 形式 必須 説明
bucket URL String O バケット名
obj URL String O オブジェクト名
Date Header String O リクエスト時刻
Authorization Header String O S3 API認証情報アクセスキーと署名で構成

レスポンス

このAPIはレスポンス本文を返しません。リクエストが正しい場合、ステータスコード204を返します。

AWSコマンドラインインターフェイス(CLI)

S3互換APIを利用してAWSコマンドラインインターフェイスでNHN Cloudオブジェクトストレージを使用できます。

インストール

AWSコマンドラインインターフェイスはPythonパッケージで提供されます。Pythonパッケージ管理者(pip)を利用してインストールします。

$ sudo pip install awscli

設定

AWSコマンドラインインターフェイスを使用するには、先にS3 API認証情報と環境を設定する必要があります。

$ aws configure
AWS Access Key ID [None]: {access}
AWS Secret Access Key [None]: {secret}
Default region name [None]: {region name}
Default output format [None]: json
名前 説明
access S3 API認証情報アクセスキー
secret S3 API認証情報シークレットキー
region name KR1 - 韓国(パンギョ)リージョン
KR2 - 韓国(ピョンチョン)リージョン
KR3 - 韓国(光州)リージョン
JP1 - 日本(東京)リージョン
US1 - 米国(カリフォルニア)リージョン

S3コマンド使用方法

aws --endpoint-url={endpoint} s3 {command} s3://{bucket}
名前 説明
endpoint https://kr1-api-object-storage.nhncloudservice.com - 韓国(パンギョ)リージョン
https://kr2-api-object-storage.nhncloudservice.com - 韓国(ピョンチョン)リージョン
https://kr3-api-object-storage.nhncloudservice.com - 韓国(光州)リージョン
https://jp1-api-object-storage.nhncloudservice.com - 日本(東京)リージョン
https://us1-api-object-storage.nhncloudservice.com - 米国(カリフォルニア)リージョン
command AWSコマンドラインインターフェイスコマンド
bucket バケット名

[参考] AWSコマンドラインインターフェイスはAWSを使用するために提供されるツールのため、AWSドメインを使用するように設定されています。したがってTAOSTオブジェクトストレージを使用するには必ずコマンドごとにエンドポイントを指定する必要があります。 AWSコマンドラインインターフェイスコマンドはAWS CLIで高レベル(s3)コマンド使用文書を参照してください。

バケット作成
$ aws --endpoint-url=https://kr1-api-object-storage.nhncloudservice.com s3 mb s3://example-bucket
make_bucket: example-bucket
バケットリスト照会
$ aws --endpoint-url=https://kr1-api-object-storage.nhncloudservice.com s3 ls
2020-07-13 10:07:13 example-bucket
バケット照会
$ aws --endpoint-url=https://kr1-api-object-storage.nhncloudservice.com s3 ls s3://example-bucket
2020-07-13 10:08:49     104389 0428b9e3e419d4fb7aedffde984ba5b3.jpg
2020-07-13 10:09:09      74448 6dd6d48eef889a5dab5495267944bdc6.jpg
バケット削除
$ aws --endpoint-url=https://kr1-api-object-storage.nhncloudservice.com s3 rb s3://example-bucket
remove_bucket: example-bucket
オブジェクトアップロード
$ aws --endpoint-url=https://kr1-api-object-storage.nhncloudservice.com s3 cp ./3b5ab489edffdea7bf4d914e3e9b8240.jpg s3://example-bucket/3b5ab489edffdea7bf4d914e3e9b8240.jpg
upload: ./3b5ab489edffdea7bf4d914e3e9b8240.jpg to s3://example-bucket/3b5ab489edffdea7bf4d914e3e9b8240.jpg
[参考]
オブジェクトの容量が8MB以上の場合、AWSコマンドラインインタフェースはオブジェクトを複数のパートに分けてアップロードします。パートオブジェクトは {bucket}+segmentsというバケットに {object-name}/{upload-id}/{part-number}の形の名前で保存され、すべてのパートアップロードが終わったらアップロードをリクエストしたバケットにパートオブジェクトを接続したオブジェクトが作られます。

パートオブジェクトが保存される{bucket}+segments バケットはS3互換APIではアクセスできず、Object Storage APIまたはコンソールからアクセスできます。

マルチパートオブジェクトのEtagは、各パートオブジェクトのETag値をバイナリデータに変換し、順番に接続して(concatenate) MD5ハッシュした値です。
[注意]
マルチパートでアップロードしたオブジェクトの一部または全体のパートオブジェクトを削除すると、オブジェクトにアクセスできなくなります。
オブジェクトダウンロード
$ aws --endpoint-url=https://kr1-api-object-storage.nhncloudservice.com s3 cp s3://example-bucket/3b5ab489edffdea7bf4d914e3e9b8240.jpg ./3b5ab489edffdea7bf4d914e3e9b8240.jpg
download: s3://example-bucket/0428b9e3e419d4fb7aedffde984ba5b3.jpg to ./0428b9e3e419d4fb7aedffde984ba5b3.jpg
オブジェクト削除
$ aws --endpoint-url=https://kr1-api-object-storage.nhncloudservice.com s3 rm s3://example-bucket/3b5ab489edffdea7bf4d914e3e9b8240.jpg
delete: s3://example-bucket/3b5ab489edffdea7bf4d914e3e9b8240.jpg

AWS SDK

AWSは多くのプログラミング言語用のSDKを提供しています。S3互換APIを利用してAWS SDKでNHN Cloudオブジェクトストレージを使用できます。

[参考] 詳細についてはAWS SDK文書を参照してください。

AWS SDKを使用するために必要な主要パラメータは次のとおりです。

名前 説明
access S3 API認証情報アクセスキー
secret S3 API認証情報シークレットキー
region name KR1 - 韓国(パンギョ)リージョン
KR2 - 韓国(ピョンチョン)リージョン
KR3 - 韓国(光州)リージョン
JP1 - 日本(東京)リージョン
US1 - 米国(カリフォルニア)リージョン
endpoint https://kr1-api-object-storage.nhncloudservice.com - 韓国(パンギョ)リージョン
https://kr2-api-object-storage.nhncloudservice.com - 韓国(ピョンチョン)リージョン
https://kr3-api-object-storage.nhncloudservice.com - 韓国(光州)リージョン
https://jp1-api-object-storage.nhncloudservice.com - 日本(東京)リージョン
https://us1-api-object-storage.nhncloudservice.com - 米国(カリフォルニア)リージョン

Boto3 - Python SDK

[参考] 詳細についてはAWS SDK for Python(Boto3)説明書文書を参照してください。

Context

Boto3クライアントクラス
# boto3example.py
from boto3 import client
from boto3.s3.transfer import TransferConfig
from botocore.exceptions import ClientError


class Boto3Example(object):
    _REGION = '{region name}'
    _ENDPOINT = '{endpoint}'
    _ACCESS = '{access}'
    _SECRET = '{secret}'

    def __init__(self):
        self.s3 = client(service_name='s3',
                         region_name=self._REGION,
                         endpoint_url=self._ENDPOINT,
                         aws_access_key_id=self._ACCESS,
                         aws_secret_access_key=self._SECRET)
バケット作成
    def create_bucket(self, bucket_name):
        return self.s3.create_bucket(Bucket=bucket_name)
バケットリスト照会
def create_bucket(self, bucket_name):
    try:
        return self.s3.create_bucket(Bucket=bucket_name)
    except ClientError as e:
        raise RuntimeError(e)
バケット照会(オブジェクトリスト照会)
def list_buckets(self):
    try:
        return self.s3.list_buckets().get('Buckets')
    except ClientError as e:
        raise RuntimeError(e)
バケット削除
def delete_bucket(self, bucket_name):
    try:
        return self.s3.delete_bucket(Bucket=bucket_name)
    except ClientError as e:
        raise RuntimeError(e)
オブジェクトアップロード

[参考] パーツオブジェクトの数は、アップロードするオブジェクトの容量と設定したパーツサイズによって決まります。デフォルトのパーツサイズは8MiBで、最小5MiBから指定できます。パーツオブジェクトの最大個数は10,000個までです。

def upload(self, bucket_name, key, filename, part_size):
    config = TransferConfig(multipart_chunksize=part_size)
    try:
        self.s3.upload_file(Filename=filename,
                            Bucket=bucket_name,
                            Key=key,
                            Config=config)
    except ClientError as e:
        raise RuntimeError(e)
オブジェクトダウンロード
def download(self, bucket_name, key, filename):
    try:
        response = self.s3.get_object(Bucket=bucket_name, Key=key)
        with io.FileIO(filename, 'w') as fd:
            for chunk in response['Body']:
                fd.write(chunk)
        response.pop('Body')
    except ClientError as e:
        raise RuntimeError(e)
    except OSError as e:
        raise RuntimeError(e)

    return response
オブジェクト削除
def delete(self, bucket_name, key):
    try:
        return self.s3.delete_object(Bucket=bucket_name, Key=key)
    except ClientError as e:
        raise RuntimeError(e)

Java SDK

[参考] 詳細についてはAWS SDK for Java説明書文書を参照してください。

Context

Java SDKクライアントクラス
// AwsSdkExample.java
public class AwsSdkExample {
    private static final String access = "{access}";
    private static final String secret = "{secret}";
    private static final String region = "{region name}";
    private static final String ednpoint = "{endpoint}";

    private AmazonS3 s3Client;

    public AwsSdkExample() {
        BasicAWSCredentials awsCredentials =
            new BasicAWSCredentials(access, secret);
        s3Client = AmazonS3ClientBuilder.standard()
            .withEndpointConfiguration(
                new AwsClientBuilder.EndpointConfiguration(ednpoint, region)
            )
            .withCredentials(
                new AWSStaticCredentialsProvider(awsCredentials)
            )
            .enablePathStyleAccess()
            .disableChunkedEncoding()
            .build();        
    }
}
バケット作成
public String createBucket(String bucketName) throws RuntimeException {
    try {
        return s3Client.createBucket(bucketName).toString();
    } catch (AmazonServiceException e) {
        throw new RuntimeException(e);
    } catch (SdkClientException e) {
        throw new RuntimeException(e);
    }
}
バケットリスト照会
public List<Bucket> listBuckets() throws RuntimeException {
    try {
        return s3Client.listBuckets();
    } catch (AmazonServiceException e) {
        throw new RuntimeException(e);
    } catch (SdkClientException e) {
        throw new RuntimeException(e);
    }
}
バケット照会(オブジェクトリスト照会)
public ListObjectsV2Result listObjects(
    String bucketName
) throws RuntimeException {
    try {
        return s3Client.listObjectsV2(bucketName);
    } catch (AmazonServiceException e) {
        throw new RuntimeException(e);
    } catch (SdkClientException e) {
        throw new RuntimeException(e);
    }
}
    }
バケット削除
public void deleteBucket(String bucketName) throws RuntimeException {
    try {
        s3Client.deleteBucket(bucketName);
    } catch (AmazonServiceException e) {
        throw new RuntimeException(e);
    } catch (SdkClientException e) {
        throw new RuntimeException(e);
    }
}
    }
オブジェクトアップロード

[参考] パーツオブジェクトの数は、アップロードするオブジェクトの容量と設定したパーツサイズによって決まります。デフォルトのパーツサイズは5MiBで、最小5MiBから指定できます。パーツオブジェクトの最大個数は1,000個までです。

public void uploadObject(String bucketName, String objectKey, String filePath, long partSize) {
    TransferManager tm = TransferManagerBuilder.standard()
        .withS3Client(s3Client)
        .withMinimumUploadPartSize(partSize)
        .build();
    Upload upload = tm.upload(bucketName, objectKey, new File(filePath));

    try {
        upload.waitForCompletion();
    } catch (AmazonServiceException e) {
        upload.abort();
    } catch (AmazonClientException e) {
        upload.abort();
    } catch (InterruptedException e) {
        upload.abort();
    }
}
オブジェクトダウンロード
public String downloadObject(
    String bucketName, String objKeyName, String filePath
) throws RuntimeException {
    try {
        return s3Client.getObject(
            new GetObjectRequest(bucketName, objKeyName),
            new File(filePath)
        ).getETag();
    } catch (NoSuchKeyException e) {
        throw new RuntimeException(e);
    } catch (InvalidObjectStateException e) {
        throw new RuntimeException(e);
    } catch (S3Exception e) {
        throw new RuntimeException(e);
    } catch (AwsServiceException e) {
        throw new RuntimeException(e);
    } catch (SdkClientException e) {
        throw new RuntimeException(e);
    }
}
オブジェクト削除
public void deleteObject(
    String bucketName, String objKeyName
) throws RuntimeException {
    try {
        s3Client.deleteObject(bucketName, objKeyName);
    } catch (AmazonServiceException e) {
        throw new RuntimeException(e);
    } catch (SdkClientException e) {
        throw new RuntimeException(e);
    }
}

.NET SDK

[参考] 詳細についてはAWS SDK for .NET説明書文書を参照してください。

Context

.NET SDKクライアントクラス
class S3SDKExample
{
    private static string endpoint = "{endpoint}";
    private static string regionName = "{region name}";
    private static string accessKey = "{access}";
    private static string secretKey = "{secret}";
    private static AmazonS3Client GetS3Client()
    {
        var amazonS3Config =
            new AmazonS3Config
            {
                ServiceURL = endpoint,
                AuthenticationRegion = regionName,
                ForcePathStyle = true,
            };
        var basicAWSCredentials = new BasicAWSCredentials(accessKey, secretKey);
        return new AmazonS3Client(basicAWSCredentials, amazonS3Config);
    }
}
バケットの作成
static async Task<PutBucketResponse> CreateBucketAsync(
    AmazonS3Client s3Client,
    string bucketName)
{
    try
    {
        if (!(await AmazonS3Util.DoesS3BucketExistAsync(s3Client, bucketName)))
        {
            var putBucketRequest =
                new PutBucketRequest
                {
                    BucketName = bucketName,
                    UseClientRegion = true
                };
            return await s3Client.PutBucketAsync(putBucketRequest);
        }
        throw new Exception("Bucket already exist.");
    }
    catch (AmazonS3Exception e)
    {
        throw e;
    }
}
バケットリストの照会
static async Task<ListBucketsResponse> ListBucketsAsync(AmazonS3Client s3Client)
{
    try
    {
        return await s3Client.ListBucketsAsync();
    }
    catch (AmazonS3Exception e)
    {
        throw e;
    }
}
バケットの照会(オブジェクトリスト照会)
static async Task<List<ListObjectsV2Response>> ListBucketContentsAsync(
    AmazonS3Client s3Client,
    string bucketName)
{
    try
    {
        List<ListObjectsV2Response> responses =
            new List<ListObjectsV2Response>();
        var request =
            new ListObjectsV2Request
            {
                BucketName = bucketName,
                MaxKeys = 5,
            };
        var response = new ListObjectsV2Response();

        do
        {
            responses.Add(await s3Client.ListObjectsV2Async(request));
            request.ContinuationToken = response.NextContinuationToken;
        }
        while (response.IsTruncated);

        return responses;
    }
    catch (AmazonS3Exception e)
    {
        throw e;
    }
}
バケットの削除
static async Task<DeleteBucketResponse> DeleteBucketAsync(
    AmazonS3Client s3Client,
    string bucketName)
{
    try
    {
        return await s3Client.DeleteBucketAsync(
            new DeleteBucketRequest
            {
                BucketName = bucketName
            });
    }
    catch (AmazonS3Exception e)
    {
        throw e;
    }
}
オブジェクトのアップロード

[参考] パーツオブジェクトの数は、アップロードするオブジェクトの容量と設定したパーツサイズによって決まります。デフォルトのパーツサイズは5MiBで、最小5MiBから指定できます。パーツオブジェクトの最大個数は10,000個までです。

private static async Task UploadObjectAsync(
    AmazonS3Client s3Client,
    string bucketName,
    string keyName,
    string filePath,
    int partSize)
{
    try
    {
        TransferUtility uploader = new TransferUtility(s3Client);
        TransferUtilityUploadRequest uploadRequest = new TransferUtilityUploadRequest()
        {
            FilePath = filePath,
            BucketName = bucketName,
            Key = keyName,
            PartSize = partSize
        };
        uploader.Upload(uploadRequest);
    }
    catch (AmazonS3Exception e)
    {
        throw e;
    }
}
オブジェクトのダウンロード
static async Task ReadObjectDataAsync(
    AmazonS3Client s3Client,
    string bucketName,
    string keyName,
    string filePath)
{
    try
    {
        GetObjectRequest request =
            new GetObjectRequest
            {
                BucketName = bucketName,
                Key = keyName
            };

        ResponseHeaderOverrides responseHeaders =
            new ResponseHeaderOverrides();
        responseHeaders.CacheControl = "No-cache";

        request.ResponseHeaderOverrides = responseHeaders;
        var appendToFile = false;

        using (var response = await s3Client.GetObjectAsync(request))
        await response.WriteResponseStreamToFileAsync(
            filePath, appendToFile, CancellationToken.None);
    }
    catch (AmazonS3Exception e)
    {
       throw e;
    }
}
オブジェクトの削除
static async Task<DeleteObjectResponse> DeleteObjectNonVersionedBucketAsync(
    AmazonS3Client s3Client,
    string bucketName,
    string keyName)
{
    try
    {
        var deleteObjectRequest =
            new DeleteObjectRequest
            {
                BucketName = bucketName,
                Key = keyName
            };

        return await s3Client.DeleteObjectAsync(deleteObjectRequest);
    }
    catch (AmazonS3Exception e)
    {
        throw e;
    }
}
TOP