[Boto3 Adv-Cal DAY1]boto3について調べてみた

boto3 で楽しむ AWS PythonLife 一人AdventCalendarです。

boto3のドキュメントを通して、サービス別にどういった事が出来るのかを理解したり、管理コンソールを通さずにTerminalだけで完結できるように検証していくことが目的になります。

1日目はboto3そのものについてまとめてみました。

boto3とは

AWS SDK for Pythonです。名前はアマゾンカワイルカ(英名:Boto)に由来しています。

It was named after the fresh water dolphin native to the Amazon river. I wanted something short, unusual, and with at least some kind of connection to Amazon. Boto seemed to fit the bill 8^)

インストール方法

PyPiからインストールします。awscliを併用してアカウント設定を簡略化します。

% pipenv install boto3 awscli
% pipenv shell
% aws configure --profile advent_calendar
AWS Access Key ID [None]: XXXXXXXXXXXXXXXXXXXXXXXX
AWS Secret Access Key [None]: XXXXXXXXXXXXXXXXXXXXXXXX
Default region name [None]: us-east-1
Default output format [None]: json

今回はadvent_calendarの名称で設定しました。 roleの指定が必要な場合は以下の手順で指定します。

% vim ~/.aws/config
[profile advent_calendar]
role_arn arn:aws:iam::XXXXXXXXXXXX:role/XXXXXXXXXXXXX

roleは以下のコマンドで確認できます。

% aws iam list-roles | jq '.Roles[].Arn'

関連するモジュール

pipenv graphで分かる依存関係は以下の通りです。boto及びaws関連のみ表示するため、幾つか割愛しています。

% pipenv graph
aws-shell
  - awscli
    - botocore
    - s3transfer
      - botocore
  - boto3
    - botocore
    - s3transfer
      - botocore

botocore

boto3のコア実装です。

s3transfer

S3の転送をPythonコードにて実施するためのライブラリです。

aws-cli

AWSを操作するコマンドラインのインターフェイスライブラリです。

aws-shell

シェルのような補完機能がある、AWSサービスを操作するライブラリです。

使い方

aws configureにて設定したプロファイルを利用した場合は以下の様になります。

import boto3
session = boto3.Session(profile_name='advent_calendar')

また、リソースを対象とするのか、サービスを対象とするのかによって呼び出し方が異なってきます。必要に応じて、

  • リソースを使う場合はget_available_resources()
  • サービスを使う場合はget_available_services()

にて確認しておきましょう。

import boto3
target_resource_name = "s3"
target_service_name = "s3"
session = boto3.Session(profile_name='advent_calendar')
if target_resource_name not in session.get_available_resources():
    for resource in session.get_available_resources():
      print("- {}".format(resource))
    raise Exception("Not exist in resources : {}".format(target_resource_name))
if target_service_name not in session.get_available_services():
    for service in session.get_available_services():
      print("- {}".format(service))
    raise Exception("Not exist in services : {}".format(target_service_name))

対象サービス

AWS上でboto3による利用アナウンスが存在している状態ながら実際に使えない場合は、boto3のアップデートが必要です。

対象リソース

対象サービスよりも対象が絞られています。

import boto3
session = boto3.Session(profile_name='advent_calendar')
for resource in session.get_available_resources():
    print("- {}".format(resource))
  • cloudformation
  • cloudwatch
  • dynamodb
  • ec2
  • glacier
  • iam
  • opsworks
  • s3
  • sns
  • sqs

各サービス毎の使い方

サービス及びリソース別での使い方は公式ドキュメントに全て記載されているため、必要に応じて参照してください。

まとめ

awscliを使ってshellによる操作で完了させている場合はboto3に触ることが少ないかもしれません。

Pythonでのコーディングを行っていながらもAWSのサービス操作はawscli経由のみだった方には特に使ってみることをお勧めします。