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を使用することを推奨します。
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認証情報を照会します。
[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認証情報を削除します。
[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を返します。
S3 APIを使用するには、認証情報を利用して署名を作成する必要があります。署名の作成方法はAWS signature V4文書を参照してください。
署名の作成に必要な情報は次のとおりです。
名前 | 値 |
---|---|
アルゴリズム | AWS4-HMAC-SHA256 |
署名時刻 | YYYYMMDDThhmmssZ形式 |
サービス名 | s3 |
リージョン名 | KR1 - 韓国(パンギョ)リージョン KR2 - 韓国(ピョンチョン)リージョン KR3 - 韓国(光州)リージョン JP1 - 日本(東京)リージョン US1 - 米国(カリフォルニア)リージョン |
シークレットキー | 認証情報シークレットキー |
バケットを作成します。バケット名は次のようにAmazon S3の命名ルールに従う必要があります。
詳細な内容は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を返します。
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 - 米国(カリフォルニア)リージョン |
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を提供しています。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 - 米国(カリフォルニア)リージョン |
[参考] 詳細についてはAWS SDK for Python(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)
[参考] 詳細についてはAWS SDK for Java説明書文書を参照してください。
// 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);
}
}
[参考] 詳細についてはAWS SDK for .NET説明書文書を参照してください。
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;
}
}