amazon linux2にpython3とboto3を入れる

この記事ではpython3とboto3を入れて簡単なサンプルコードを動かすところまで行います。

 boto3とは

AWS SDK for Python (Boto3)

AWS SDK for Python (Boto3) を使用すると、AWS の使用を迅速に開始できます。Boto3 を使用することで、Python のアプリケーション、ライブラリ、スクリプトを AWS の各種サービス(Amazon S3、Amazon EC2、Amazon DynamoDB など)と容易に統合できます。

awsのサービスを簡単にPythonからイジれるようにできるってことです。

導入手順

導入手順。まずはboto3の前にPython3を入れます。

何が入るのかを確認。

# yum list available | grep "python" | grep "libs"
audit-libs-python.x86_64                2.7.6-3.amzn2                 amzn2-core
libselinux-python.x86_64                2.5-12.amzn2.0.1              amzn2-core
libsemanage-python.x86_64               2.5-8.amzn2                   amzn2-core
lvm2-python-libs.x86_64                 7:2.02.177-4.amzn2            amzn2-core
python-libs.i686                        2.7.14-58.amzn2.0.3           amzn2-core
python-libsss_nss_idmap.x86_64          1.15.2-50.amzn2.8             amzn2-core
python3-libs.i686                       3.7.0-0.20.rc1.amzn2.0.1      amzn2-core

そのまま入れると2.7が入るようなので、3系を入れるため、python3を入れましょう。

# yum install python3
~~~~~~~~~~~~~~~~~~~~~
Total download size: 11 M
Installed size: 51 M
Is this ok [y/d/N]: y
Downloading packages:
(1/4): python3-libs-3.7.0-0.20.rc1.amzn2.0.1.x86_64.rpm  | 8.0 MB  00:00:00     
(2/4): python3-pip-9.0.3-1.amzn2.0.1.noarch.rpm          | 1.9 MB  00:00:00     
(3/4): python3-setuptools-38.4.0-3.amzn2.0.6.noarch.rpm  | 617 kB  00:00:00     
(4/4): python3-3.7.0-0.20.rc1.amzn2.0.1.x86_64.rpm       |  64 kB  00:00:02     
-

pipも入ったので、こちらからboto3を入れてあげます。

# pip3 install boto3

無事入ったら、試しにboto3が動くか確認してみます。

今回はboto3の公式ドキュメントからS3のバケット一覧取得を動かしてみます。

Creating and Using Amazon S3 Buckets

test.py

import boto3

# Create an S3 client
s3 = boto3.client('s3')

# Call S3 to list current buckets
response = s3.list_buckets()

# Get a list of all bucket names from the response
buckets = [bucket['Name'] for bucket in response['Buckets']]

# Print out the bucket list
print("Bucket List: %s" % buckets)

公式まんまです。こちらを動かす場合には、アクセスキーとシークレットアクセスキー、リージョンの指定が必要です。もし、記入がない場合には、以下のようなエラーが出ます。

botocore.exceptions.NoCredentialsError: Unable to locate credentials

ソースコードの中に書くこともできますが、Quickstartの指示どおりにファイルに記憶させておきましょう。

Quickstart

# vim ~/.aws/config
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[default]
aws_access_key_id = hogehogehogehoge
aws_secret_access_key =hogehogehogehoge
region=ap-northeast-1

各キーに関してはIAMでユーザーを作成して取得して下さい。

リージョンはメインで使うのが東京のためap-northeast-1を指定しました。

これで実行準備が整いました。実際にS3のバケットリストを取得してみましょう。

S3のGUIは画像のような表示で、2つのバケットを作成しました。

この環境で実行した結果がこちら。

# python3 test.py 
Bucket List: ['test-reko-test', 'test-s3-hacknote-20180910']

バケット名の取得が問題なくできていることがわかります。

もし、ユーザーに必要な権限(ロール)がない場合には以下のようなエラーになります

botocore.exceptions.ClientError: An error occurred (AccessDenied) when calling the ListBuckets operation: Access Denied

ListBucketsの権限が無く、アクセス拒否をされています。その場合には適切なユーザーのキーに変えるか、ユーザーに権限を正しく付与し直してください。

AWS CLIでできる操作は殆どができると思いますので、Pythonでいろいろと自動的に処理を走らせたい場合にはboto3を使うことになると思います。

awsを使う場合には非常に便利ですので、導入してみてください。