[Boto3 Adv-Cal DAY19]StackOverflowでのboto3事情について調べてみた

boto3 で楽しむ AWS PythonLife 一人AdventCalendarです。19日目はStackOverflow上でのboto3事情について調べてみました。
2018.12.19

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

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

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

19日目はStackOverflow上でboto3に関して反応の多いスレッド等を調べてみました。

目次

StackOverflowについて

例外を検索している時に知る人も多いかと思われます。

2008年に開設されたナレッジコミュニティで、2014年に日本語版も登場しています。

StackOverflow上でのboto3に関する話題

boto3のタグがついていて、Voteが多い順で見てみると、boto3を利用したコードにて疑問に浮かびやすいことがスレッドとしてトップに出てきます。

Voteの多いスレッドでの話題をざっくり挙げてみます。

Boto3での例外対応

Boto3, python and how to handle errors

boto3の例外は複数のパターンが存在します。

  • botocoreに実装されているもの
  • boto3から呼び出すClientに実装されているもの

上記スレッド内Answerの引用となりますが、以下の様に組み合わせての対応が必要になってきます。

import boto3
from botocore.exceptions import ClientError, ParamValidationError
try:
    iam = boto3.client('iam')
    user = iam.create_user(UserName='fred')
    print "Created user: %s" % user
except iam.exceptions.EntityAlreadyExistsException:
    print "User already exists"
except ParamValidationError as e:
    print "Parameter validation error: %s" % e
except ClientError as e:
    print "Unexpected error: %s" % e

調査コストが大きかったこともあり、Day15までのboto3の検証では例外への対処を行っていません。

botoとboto3の違い

What is the difference between the AWS boto and boto3 [closed]

以下3つのパッケージについての関連性がAnswerにてまとめられています。

  • boto
  • boto3
  • botocore

調べていて気になっていた人は一度目を通してみるべきかもしれません。

resourceとclientとsessionの違い

Difference in boto3 between resource, client, and session?

sessionは引数の内容もあって、それほど把握に時間は掛からないと思われます。resourceclientの違いが恐らく最初に突き当たりやすい課題でしょう。

上記スレッドにAnswerとしてまとめられていますが、大まかには以下の違いとなります。

resource

  • 高水準言語、オブジェクト指向API

扱える対象のサービスは限定されます。サブリソースやコレクション等へ展開がなされ、且つ遅延評価されます。APIを直接呼ぶ必要がありません。

client

  • 低水準言語、サービスアクセス

各サービスとAPIが1対1です。1度に取得できるオブジェクトの数に上限があります。

まとめ

StackOverflowはboto3においても嵌まる箇所についてはスレッドが大体存在していると思われます。

なかなか思ったように答えが見つからない時もありますが、AWSドキュメントを読んでも分かり辛い時の駆け込み先として利用するのも手かもしれません。