【AWS】AWS Cloud9でPython3の環境構築してboto3で遊んでみた
はじめに
こんにちは、がんがんです。直近の作業でboto3を扱う必要がありました。
Dockerでboto3の環境を構築中ですがまずはboto3を使ってみたいと思いました。
参考
- AWS Educateアカウントを用いてCloud9環境を構築
- AWS Cloud9のユーザーガイド
https://docs.aws.amazon.com/ja_jp/cloud9/latest/user-guide/open-environment.html
AWS Cloud9とは
AWS Cloud9はAWSが提供しているIDE環境です。
aws.amazon.com
STEP1 Cloud9の環境構築
まずはコンソール
からCloud9
を選択し環境を構築していきます。Create environment
ボタンを選択すると、下記のような画面が表示されます。
私はeducateアカウントを使用しているのでリージョンとしてはバージニア北部(us-east-1)を使用しています。こちらについては参考資料を参照ください。
STEP2の画面はこんな感じです。
構築を選択すると下記の画面が表示されます。普通にかっこいいWebデザインですね。IDE画面が表示されたらOKです。
STEP2 Cloud9でPythonの実験
公式ドキュメントを参照しながら実験を行っていきます。ドキュメントは下記に置いておきます。
https://docs.aws.amazon.com/ja_jp/cloud9/latest/user-guide/sample-python.html
無料枠で実験を行っていきたいので下記を選択しております。EC2の料金に関する話はAmazon EC2の料金ページを参照ください。
・Instance type : t2.micro ・Platform : Amazon Linux
Pythonが入っているかどうかを確認してみましょう。Python3.6が入っていればドキュメントのステップ2
に進みます。
$ python -V ($ python --version) Python 3.6.10
ドキュメントのステップ2では非常に簡単なコードが書かれていました。
hello.py |
import sys print("Hello World!") print("The sum of 2 and 3 is 5.") sum = int(sys.argv[1]) + int(sys.argv[2]) print( "The sum of {0} and {1} is {2}".format(sys.argv[1], sys.argv[2], sum) )
コンソールで実行して問題なく計算できればとりあえずOKです。
$ python hello.py 5 9 Hello World! The sum of 2 and 3 is 5. The sum of 5 and 9 is 14.
STEP3 Cloud9でboto3の実験
いよいよ本題に入っていきます。pipのバージョンを確認すると、Python2系のものでした。そのため、ドキュメントのステップ3を参考にしながらpipのバージョンを整え、boto3を入れていきます。使用コードとしては以下の通りです。
s3.py |
import boto3 import sys from botocore.exceptions import ClientError def list_my_buckets(s3): """ s3の中身を表示 """ print("Buckets:\n\t", *[b.name for b in s3.buckets.all()], sep="\n\t") def create_and_delete_my_bucket(bucket_name, region, keep_bucket): """ s3で新規作成および削除 """ s3 = boto3.resource( "s3", region_name=region ) list_my_buckets(s3) try: print("\nCreating new bucket:", bucket_name) bucket = s3.create_bucket( Bucket=bucket_name, CreateBucketConfiguration={ "LocationConstraint": region } ) except ClientError as e: print(e) sys.exit("Exiting the script because bucket creation failed.") bucket.wait_until_exists() list_my_buckets(s3) if not keep_bucket: print("\nDeleting bucket:", bucket.name) bucket.delete() bucket.wait_until_not_exists() list_my_buckets(s3) else: print("\nKeeping bucket:", bucket.name) def main(): import argparse parser = argparse.ArgumentParser() parser.add_argument( "bucket_name", help="The name of the bucket to create." ) parser.add_argument( "region", help="The region in which to create your bucket." ) parser.add_argument( "--keep_bucket", help="Keeps the created bucket. When not specified, the bucket is deleted.", action="store_true" ) args = parser.parse_args() create_and_delete_my_bucket(args.bucket_name, args.region, args.keep_bucket) if __name__ == '__main__': main()
実行させてみると、以下のようなエラーが出ました。
botocore.exceptions.ClientError: An error occurred (AccessDenied) when calling the ListBuckets operation: Access Denied
調べてみると、IAMの設定不足でした。
qiita.com
IAMロールの設定を解決すると無事に実行されました。