[Cloudian #3] Python(boto3)で、オブジェクトストレージのバケットを新規作成してみる


## はじめに
[Cloudian](https://cloudian.com/jp/)は、AWSのS3完全互換のAPIを持ったオブジェクトストレージです。
[前回](https://qiita.com/Akanechan/items/683a5e9eed43a09993d1)は、Python(boto3)で、作成済みバケットをいろんなパターンで表示してみました。

今回は、Python(boto3)で、オブジェクトストレージのバケットを新規作成してみたいと思います。

## バケットの新規作成 / create_bucket()
オブジェクトストレージ/Cloudianにバケットを新規作成します。


## 1. シンプルなバケット作成例(属性は全てデフォルト)
以下の例では、create_bucket() の引数に作成するバケット名( Bucket=’pythonbucket1’ )のみを設定し、属性値は全てデフォルトを使用してバケットを作成しています。

```python:test1.py
import boto3

client = boto3.client(
    's3',
    endpoint_url='https://xxx.yyy.com'
)

# バケットの新規作成
client.create_bucket(Bucket='pythonbucket1')
```

```shell
{'ResponseMetadata': {'RequestId': '9dad4484-0e30-1dbc-a754-06bdfcde1d5e',
  'HostId': '3d5c05376530a2eb49e3e90576f83c5b',
  'HTTPStatusCode': 200,
  'HTTPHeaders': {'date': 'Mon, 14 Dec 2020 01:51:29 GMT',
   'x-amz-request-id': '9dad4484-0e30-1dbc-a754-06bdfcde1d5e',
   'location': 'http://pythonbucket1.s3-region1.admin-tech.tokyo',
   'x-amz-id-2': '3d5c05376530a2eb49e3e90576f83c5b',
   'content-length': '0',
   'server': 'CloudianS3'},
  'RetryAttempts': 0},
 'Location': 'http://pythonbucket1.s3-region1.admin-tech.tokyo'}

```

list_buckets()からは非常に多くの情報が返されるため、以降の例では出力を絞り込んで 表示させていきます。


## 2. 属性を指定したバケット作成例①  
以下の例では 、create_bucket() の引数に作成するバケット名 ( Bucket=’pythonbucket1’ )とそのバケットの ACL( ACL=’public-read’ )を設定して、バケットを作成しています。

```python:test2.py
import boto3

client = boto3.client(
    's3',
    endpoint_url='https://xxx.yyy.com'
)

# バケットの新規作成
client.create_bucket(
    ACL='public-read',
    Bucket='pythonbucket1'
)
```

```shell
{'ResponseMetadata': {'RequestId': '9dad4487-0e30-1dbc-a754-06bdfcde1d5e',
  'HostId': '3d5c05376530a2eb49e3e90576f83c5b',
  'HTTPStatusCode': 200,
  'HTTPHeaders': {'date': 'Mon, 14 Dec 2020 01:51:30 GMT',
   'x-amz-request-id': '9dad4487-0e30-1dbc-a754-06bdfcde1d5e',
   'location': 'http://pythonbucket1.s3-region1.admin-tech.tokyo',
   'x-amz-id-2': '3d5c05376530a2eb49e3e90576f83c5b',
   'content-length': '0',
   'server': 'CloudianS3'},
  'RetryAttempts': 0},
 'Location': 'http://pythonbucket1.s3-region1.admin-tech.tokyo'}
```


## 3. 属性を指定したバケット作成例②
以下の例では、create_bucket() の引数に作成するバケット名( Bucket=’bucket2’ )とバケットのACL( ACL=’private’ )、およびロケーションコンストレイント ( CreateBucketConfiguration={‘LocationConstraint’: ‘region1’} )を設定してバケットを作成しています。


```python:test3.py
import boto3

client = boto3.client(
    's3',
    endpoint_url='https://xxx.yyy.com'
)

# バケットの新規作成
client.create_bucket(
    ACL='private',
    Bucket='pythonbucket1',
    CreateBucketConfiguration={
        'LocationConstraint': 'region1'
    }
)
```

```shell
{'ResponseMetadata': {'RequestId': '9dad448a-0e30-1dbc-a754-06bdfcde1d5e',
  'HostId': '3d5c05376530a2eb49e3e90576f83c5b',
  'HTTPStatusCode': 200,
  'HTTPHeaders': {'date': 'Mon, 14 Dec 2020 01:51:31 GMT',
   'x-amz-request-id': '9dad448a-0e30-1dbc-a754-06bdfcde1d5e',
   'location': 'http://pythonbucket1.s3-region1.admin-tech.tokyo',
   'x-amz-id-2': '3d5c05376530a2eb49e3e90576f83c5b',
   'content-length': '0',
   'server': 'CloudianS3'},
  'RetryAttempts': 0},
 'Location': 'http://pythonbucket1.s3-region1.admin-tech.tokyo'}
```

datetime 型で戻される作成日付(CreationDate)を、Python 標準モジュールに含まれる strftime()を使って見やすいように整形して出力しています。


## 4. まとめ
Python(boto3)で、いろんなパターンでバケットを新規作成してみました。

[次回](https://qiita.com/yamahiro/items/18d6fe34539d78b706dd)も、Pythonでオブジェクトストレージ/Cloudianをいろいろ操作していきたいと思います。