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.cloud.toast.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認証情報キーが漏洩すると、誰でも漏洩したキーを利用してオブジェクトにアクセスできます。キーが漏洩した場合は漏洩した認証情報を削除して、新しく発行して使用することを推奨します。
{
"tenant_id": "84c9e9a51aea402e95389c08ac562ac5"
}
名前 | 種類 | 形式 | 説明 |
---|---|---|---|
access | Body | String | S3 API認証情報アクセスキー |
secret | Body | String | S3 API認証情報シークレットキー |
{
"credential": {
"access": "253a3c7ca27f4731a9c757addfac29ca",
"tenant_id": "84c9e9a51aea402e95389c08ac562ac5",
"secret": "be057f235abf45ee8e2ba14edc5fb253",
"user_id": "84db0c80-3c39-11e7-b29c-005056ac1497",
"trust_id": null
}
}
発行されたS3 API認証情報を照会します。
[Method, URL]
GET https://api-identity.infrastructure.cloud.toast.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 | 認証情報シークレットキー |
{
"credentials": [
{
"access": "253a3c7ca27f4731a9c757addfac29ca",
"tenant_id": "84c9e9a51aea402e95389c08ac562ac5",
"secret": "be057f235abf45ee8e2ba14edc5fb253",
"user_id": "84db0c80-3c39-11e7-b29c-005056ac1497",
"trust_id": null
}
]
}
登録したEC2認証情報を削除します。
[Method, URL]
DELETE https://api-identity.infrastructure.cloud.toast.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 - 韓国(ピョンチョン)リージョン 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認証情報アクセスキーと署名で構成 |
名前 | 種類 | 形式 | 説明 |
---|---|---|---|
ResponseMetadata | Body | Object | レスポンスメタデータオブジェクト |
ResponseMetadata.HTTPStatusCode | Body | Integer | レスポンスステータスコード |
Location | Body | String | 作成したバケットのパス |
{
"ResponseMetadata": {
"RequestId": "txfad4e17792b1432fb106f-005e5ef0e4",
"HostId": "txfad4e17792b1432fb106f-005e5ef0e4",
"HTTPStatusCode": 200,
"HTTPHeaders": {
"x-amz-id-2": "txfad4e17792b1432fb106f-005e5ef0e4",
"content-length": "0",
"x-amz-request-id": "txfad4e17792b1432fb106f-005e5ef0e4",
"content-type": "text/html; charset=UTF-8",
"location": "/new-container",
"x-trans-id": "txfad4e17792b1432fb106f-005e5ef0e4",
"x-openstack-request-id": "txfad4e17792b1432fb106f-005e5ef0e4",
"date": "Sat, 22 Feb 2020 22:22:22 GMT"
},
"RetryAttempts": 0
},
"Location": "/new-container"
}
バケットリストを照会します。
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認証情報アクセスキーと署名で構成 |
名前 | 種類 | 形式 | 説明 |
---|---|---|---|
ResponseMetadata | Body | Object | レスポンスメタデータオブジェクト |
ResponseMetadata.HTTPStatusCode | Body | Integer | レスポンスステータスコード |
Buckets.Name | Body | String | バケット名 |
Buckets.CreationDate | Body | String | 作成時刻 |
{
"ResponseMetadata": {
"RequestId": "txbf73f4d73ad34344a21bb-005e5ef141",
"HostId": "txbf73f4d73ad34344a21bb-005e5ef141",
"HTTPStatusCode": 200,
"HTTPHeaders": {
"x-amz-id-2": "txbf73f4d73ad34344a21bb-005e5ef141",
"content-length": "750",
"x-amz-request-id": "txbf73f4d73ad34344a21bb-005e5ef141",
"content-type": "application/xml",
"x-trans-id": "txbf73f4d73ad34344a21bb-005e5ef141",
"x-openstack-request-id": "txbf73f4d73ad34344a21bb-005e5ef141",
"date": "Sat, 22 Feb 2020 22:22:22 GMT"
},
"RetryAttempts": 0
},
"Buckets": [
{
"Name": "new-container",
"CreationDate": "2020-02-22T22:22:22+00:00"
}
],
"Owner": {}
}
指定したバケットの情報と内部に保存されたオブジェクトリストを照会します。
GET /{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認証情報アクセスキーと署名で構成 |
名前 | 種類 | 形式 | 説明 |
---|---|---|---|
ResponseMetadata | Body | Object | レスポンスメタデータオブジェクト |
ResponseMetadata.HTTPStatusCode | Body | Integer | レスポンスステータスコード |
Contents | Body | Object | オブジェクトリストオブジェクト |
Contents.Key | Body | String | オブジェクト名 |
Contents.LastModified | Body | String | オブジェクトの最終修正時刻、 YYYY-MM-DDThh:mm:ssZ |
Contents.ETag | Body | String | オブジェクトのMD5ハッシュ値 |
Contents.Size | Body | String | オブジェクトのサイズ |
Contents.StorageClass | Body | String | オブジェクトが保存された場所の種類 |
Name | Body | String | バケット名 |
KeyCount | Body | Integer | リストのオブジェクト数 |
{
"ResponseMetadata": {
"RequestId": "tx75a3242dac55411fac69b-005e5ef1f1",
"HostId": "tx75a3242dac55411fac69b-005e5ef1f1",
"HTTPStatusCode": 200,
"HTTPHeaders": {
"x-amz-id-2": "tx75a3242dac55411fac69b-005e5ef1f1",
"content-length": "1273",
"x-amz-request-id": "tx75a3242dac55411fac69b-005e5ef1f1",
"content-type": "application/xml",
"x-trans-id": "tx75a3242dac55411fac69b-005e5ef1f1",
"x-openstack-request-id": "tx75a3242dac55411fac69b-005e5ef1f1",
"date": "Sat, 22 Feb 2020 22:22:22 GMT"
},
"RetryAttempts": 0
},
"IsTruncated": false,
"Contents": [
{
"Key": "benjamin-ashton-Af9X4A8qMtM-unsplash.jpg",
"LastModified": "2020-02-22T22:22:22.222222+00:00",
"ETag": "\"2e95b028564c14371939358d3e88a771\"",
"Size": 3267226,
"StorageClass": "STANDARD"
}
],
"Name": "new-container",
"Prefix": "",
"MaxKeys": 1000,
"EncodingType": "url",
"KeyCount": 1
}
指定したバケットを削除します。削除するバケットは空になっている必要があります。
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認証情報アクセスキーと署名で構成 |
名前 | 種類 | 形式 | 説明 |
---|---|---|---|
ResponseMetadata | Body | Object | レスポンスメタデータオブジェクト |
ResponseMetadata.HTTPStatusCode | Body | Integer | レスポンスステータスコード |
{
"ResponseMetadata": {
"RequestId": "tx9b01c2e650e746ecba298-005e5ef28b",
"HostId": "tx9b01c2e650e746ecba298-005e5ef28b",
"HTTPStatusCode": 204,
"HTTPHeaders": {
"x-amz-id-2": "tx9b01c2e650e746ecba298-005e5ef28b",
"content-length": "0",
"x-amz-request-id": "tx9b01c2e650e746ecba298-005e5ef28b",
"content-type": "text/html; charset=UTF-8",
"x-trans-id": "tx9b01c2e650e746ecba298-005e5ef28b",
"x-openstack-request-id": "tx9b01c2e650e746ecba298-005e5ef28b",
"date": "Sat, 22 Feb 2020 22:22:22 GMT"
},
"RetryAttempts": 0
}
}
指定したバケットにオブジェクトをアップロードします。
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認証情報アクセスキーと署名で構成 |
名前 | 種類 | 形式 | 説明 |
---|---|---|---|
ResponseMetadata | Body | Object | レスポンスメタデータオブジェクト |
ResponseMetadata.HTTPStatusCode | Body | Integer | レスポンスステータスコード |
ETag | Body | String | アップロードしたオブジェクトのMD5ハッシュ値 |
{
"ResponseMetadata": {
"RequestId": "tx1d914107987d4bd98b7f3-005e5ef3ef",
"HostId": "tx1d914107987d4bd98b7f3-005e5ef3ef",
"HTTPStatusCode": 200,
"HTTPHeaders": {
"content-length": "0",
"x-amz-id-2": "tx1d914107987d4bd98b7f3-005e5ef3ef",
"last-modified": "Sat, 22 Feb 2020 22:22:22 GMT",
"etag": "\"01463f775ef4f4dbbc7525f88120df09\"",
"x-amz-request-id": "tx1d914107987d4bd98b7f3-005e5ef3ef",
"content-type": "text/html; charset=UTF-8",
"x-trans-id": "tx1d914107987d4bd98b7f3-005e5ef3ef",
"x-openstack-request-id": "tx1d914107987d4bd98b7f3-005e5ef3ef",
"date": "Sat, 22 Feb 2020 22:22:22 GMT"
},
"RetryAttempts": 0
},
"ETag": "\"01463f775ef4f4dbbc7525f88120df09\""
}
オブジェクトをダウンロードします。
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認証情報アクセスキーと署名で構成 |
名前 | 種類 | 形式 | 説明 |
---|---|---|---|
ResponseMetadata | Body | Object | レスポンスメタデータオブジェクト |
ResponseMetadata.HTTPStatusCode | Body | Integer | レスポンスステータスコード |
LastModified | Body | String | オブジェクトの最終修正時刻、 YYYY-MM-DDThh:mm:ssZ |
ContentLength | Body | String | ダウンロードしたオブジェクトのサイズ |
ETag | Body | String | オブジェクトのMD5ハッシュ値 |
ContentType | Body | String | オブジェクトのコンテンツタイプ |
Metadata | Body | Object | オブジェクトのメタデータオブジェクト |
{
"ResponseMetadata": {
"RequestId": "tx637d5de3c27f4b0a9664e-005e5ef491",
"HostId": "tx637d5de3c27f4b0a9664e-005e5ef491",
"HTTPStatusCode": 200,
"HTTPHeaders": {
"content-length": "124352",
"x-amz-id-2": "tx637d5de3c27f4b0a9664e-005e5ef491",
"last-modified": "Sat, 22 Feb 2020 22:22:22 GMT",
"etag": "\"01463f775ef4f4dbbc7525f88120df09\"",
"x-amz-request-id": "tx637d5de3c27f4b0a9664e-005e5ef491",
"content-type": "image/jpeg",
"x-trans-id": "tx637d5de3c27f4b0a9664e-005e5ef491",
"x-openstack-request-id": "tx637d5de3c27f4b0a9664e-005e5ef491",
"date": "Sat, 22 Feb 2020 22:22:22 GMT"
},
"RetryAttempts": 0
},
"LastModified": "2020-02-22T22:22:22+00:00",
"ContentLength": 124352,
"ETag": "\"01463f775ef4f4dbbc7525f88120df09\"",
"ContentType": "image/jpeg",
"Metadata": {}
}
指定したオブジェクトを削除します。
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認証情報アクセスキーと署名で構成 |
名前 | 種類 | 形式 | 説明 |
---|---|---|---|
ResponseMetadata | Body | Object | レスポンスメタデータオブジェクト |
ResponseMetadata.HTTPStatusCode | Body | Integer | レスポンスステータスコード |
{
"ResponseMetadata": {
"RequestId": "tx04a548072068487a8a5be-005e5ef648",
"HostId": "tx04a548072068487a8a5be-005e5ef648",
"HTTPStatusCode": 204,
"HTTPHeaders": {
"x-amz-id-2": "tx04a548072068487a8a5be-005e5ef648",
"content-length": "0",
"x-amz-request-id": "tx04a548072068487a8a5be-005e5ef648",
"content-type": "text/html; charset=UTF-8",
"x-trans-id": "tx04a548072068487a8a5be-005e5ef648",
"x-openstack-request-id": "tx04a548072068487a8a5be-005e5ef648",
"date": "Sat, 22 Feb 2020 22:22:22 GMT"
},
"RetryAttempts": 0
}
}
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 - 韓国(ピョンチョン)リージョン JP1 - 日本(東京)リージョン US1 - 米国(カリフォルニア)リージョン |
aws --endpoint-url={endpoint} s3 {command} s3://{bucket}
名前 | 説明 |
---|---|
endpoint | https://api-storage.cloud.toast.com - 韓国(パンギョ)リージョン https://kr2-api-storage.cloud.toast.com - 韓国(ピョンチョン)リージョン https://jp1-api-storage.cloud.toast.com - 日本(東京)リージョン https://us1-api-storage.cloud.toast.com - 米国(カリフォルニア)リージョン |
command | AWSコマンドラインインターフェイスコマンド |
bucket | バケット名 |
[参考] AWSコマンドラインインターフェイスはAWSを使用するために提供されるツールのため、AWSドメインを使用するように設定されています。したがってTAOSTオブジェクトストレージを使用するには必ずコマンドごとにエンドポイントを指定する必要があります。 AWSコマンドラインインターフェイスコマンドはAWS CLIで高レベル(s3)コマンド使用文書を参照してください。
$ aws --endpoint-url=https://api-storage.cloud.toast.com s3 mb s3://example-bucket
make_bucket: example-bucket
$ aws --endpoint-url=https://api-storage.cloud.toast.com s3 ls
2020-07-13 10:07:13 example-bucket
$ aws --endpoint-url=https://api-storage.cloud.toast.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://api-storage.cloud.toast.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://api-storage.cloud.toast.com s3 cp ./3b5ab489edffdea7bf4d914e3e9b8240.jpg s3://example-bucket/3b5ab489edffdea7bf4d914e3e9b8240.jpg
upload: ./3b5ab489edffdea7bf4d914e3e9b8240.jpg to s3://example-bucket/3b5ab489edffdea7bf4d914e3e9b8240.jpg
$ aws --endpoint-url=https://api-storage.cloud.toast.com s3 cp s3://example-bucket/3b5ab489edffdea7bf4d914e3e9b8240.jpg ./3b5ab489edffdea7bf4d914e3e9b8240.jpg
download: s3://example-bucket/0428b9e3e419d4fb7aedffde984ba5b3.jpg to ./0428b9e3e419d4fb7aedffde984ba5b3.jpg
$ aws --endpoint-url=https://api-storage.cloud.toast.com s3 rm s3://example-bucket/3b5ab489edffdea7bf4d914e3e9b8240.jpg
delete: s3://example-bucket/3b5ab489edffdea7bf4d914e3e9b8240.jpg
AWSは多くのプログラミング言語用のSDKを提供しています。S3互換APIを利用してAWS SDKでNHN Cloudオブジェクトストレージを使用できます。
[参考] この文書ではPythonとJava SDKの簡単な使用例のみ説明します。詳細な内容はAWS SDK文書を参照してください。
AWS SDKを使用するために必要な主要パラメータは次のとおりです。
名前 | 説明 |
---|---|
access | S3 API認証情報アクセスキー |
secret | S3 API認証情報シークレットキー |
region name | KR1 - 韓国(パンギョ)リージョン KR2 - 韓国(ピョンチョン)リージョン JP1 - 日本(東京)リージョン US1 - 米国(カリフォルニア)リージョン |
endpoint | https://api-storage.cloud.toast.com - 韓国(パンギョ)リージョン https://kr2-api-storage.cloud.toast.com - 韓国(ピョンチョン)リージョン https://jp1-api-storage.cloud.toast.com - 日本(東京)リージョン https://us1-api-storage.cloud.toast.com - 米国(カリフォルニア)リージョン |
# boto3example.py
import boto3
class Boto3Example(object):
_REGION = '{region name}'
_ENDPOINT = '{endpoint}'
_ACCESS = '{access}'
_SECRET = '{secret}'
def __init__(self):
self.s3 = boto3.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 list_buckets(self):
response = self.s3.list_buckets()
return response.get('Buckets')
def list_objs(self, bucket_name):
response = self.s3.list_objects_v2(Bucket=bucket_name)
return response.get('Contents')
def delete_bucket(self, bucket_name):
return self.s3.delete_bucket(Bucket=bucket_name)
def upload(self, bucket_name, key, filename):
with open(filename, 'rb') as fd:
return self.s3.put_object(Bucket=bucket_name, Key=key, Body=fd)
def download(self, bucket_name, key, filename):
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')
return response
def delete(self, bucket_name, key):
return self.s3.delete_object(Bucket=bucket_name, Key=keys)
// AwsSdkExapmple.java
public class AwsSdkExapmple {
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 AwsSdkExapmple() {
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) {
Bucket bucket = s3Client.createBucket(bucketName);
return bucket.toString();
}
public List<Bucket> listBuckets() {
return s3Client.listBuckets();
}
public ListObjectsV2Result listObjects(String bucketName) {
return s3Client.listObjectsV2(bucketName);
}
public void deleteBucket(String bucketName) {
s3Client.deleteBucket(bucketName);
}
public String uploadObject(String bucketName, String objKeyName, String filePath) {
PutObjectResult result = s3Client.putObject(bucketName, objKeyName, new File(filePath));
return result.getETag();
}
public String downloadObject(String bucketName, String objKeyName, String filePath) {
GetObjectRequest request = new GetObjectRequest(bucketName, objKeyName);
ObjectMetadata metadata = s3Client.getObject(request, new File(filePath));
return metadata.getETag();
}
public void deleteObject(String bucketName, String objKeyName) {
s3Client.deleteObject(bucketName, objKeyName);
}