【AWS】AWS Cloud9でPython3の環境構築してboto3で遊んでみた

はじめに

こんにちは、がんがんです。直近の作業でboto3を扱う必要がありました。
Dockerでboto3の環境を構築中ですがまずはboto3を使ってみたいと思いました。

そこで、AWSIDE環境であるAWS Cloud9を用いてboto3の体験をしてみたいと思います。

目的

  • (STEP1) AWS Cloud9の環境構築
  • (STEP2) Cloud9でPythonの実験
  • (STEP3) Cloud9でAWS SDK for Python(boto3)の実験

参考

  • AWS Educateアカウントを用いてCloud9環境を構築

aws.amazon.com

  • AWS Cloud9のユーザーガイド

https://docs.aws.amazon.com/ja_jp/cloud9/latest/user-guide/open-environment.html

AWS Cloud9とは

AWS Cloud9AWSが提供しているIDE環境です。
aws.amazon.com

STEP1 Cloud9の環境構築

まずはコンソールからCloud9を選択し環境を構築していきます。Create environmentボタンを選択すると、下記のような画面が表示されます。

f:id:gangannikki:20200221142735j:plain
Cloud9のSTEP1画面

私はeducateアカウントを使用しているのでリージョンとしてはバージニア北部(us-east-1)を使用しています。こちらについては参考資料を参照ください。


STEP2の画面はこんな感じです。

f:id:gangannikki:20200221163939j:plain
Cloud9のSTEP2画面



構築を選択すると下記の画面が表示されます。普通にかっこいいWebデザインですね。IDE画面が表示されたらOKです。
f:id:gangannikki:20200221165205j:plain

f:id:gangannikki:20200221165306j:plain
表示されたIDE画面

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ロールの設定を解決すると無事に実行されました。

おわりに

今回はAWS Cloud9を用いてPythonの環境を構築し、boto3の実験を行いました。
Cloud9は思ったよりも簡単に使えたので非常に便利ですね。