BBH
-Biz Branding Hub-
投稿日 : 
2019/11/10
更新日 : 
2019/11/10

【AWS】Lambdaでのbotoの使い方と最新botoの使用方法

botoとは

AWS Lambdaでは、AWSリソースを簡単に使用するためのpython用のSDKとしてbotoというものを使用できます。
このライブラリを使うことで、AWSリソースの使用(DynamoDBへのアイテム挿入やEC2の起動、停止など)を簡単に行えます。

例えばDynamoDBのテーブルを削除するようなプログラムは以下のようにして書くことが可能です。

test.py

import botocore
import boto3

def lambda_handler(event, context):
  # DynamoDBを削除するサンプル
  response = dynamoClient.delete_table(
    TableName=tableName
  )

ちなみにbotocoreというのは、botoのコア実装に当たり、botoはbotocoreに依存しています。

最新バージョンのbotoを使用する

Lambdaでは、先ほどの例のように「import boto3」のように書くことでbotoを使用することができます。
しかし、botoの最新バージョンが出た直後などは、Lambdaが最新バージョンに対応しておらず、importされるbotoのバージョンが古い場合があります。
その場合、botoの最新機能が使用できないという場合があります。

現在のbotoのバージョンを確認する

以下のようにしてLambdaで参照されているbotoのバージョンを確認できます。

test.py

import json
import botocore
import boto3

def lambda_handler(event, context):
    # botoのバージョンを確認する
    print('botocore vertion is {0}'.format(botocore.__version__))
    print('boto3 vertion is {0}'.format(boto3.__version__))

出力例

botocore vertion is 1.12.221
boto3 vertion is 1.9.221

例えば、2019年10月現在、
botocoreは、1.12.243、
botoは、1.9.243
が最新バージョンとなっています。

botoの最新化

これを最新化するためには、LambdaLayerを使って自前で最新のboto及びbotocoreを用意してやる必要があります。
botoはbotocoreに依存しているため、botoのバージョン上げる場合はbotocoreのバージョンを上げる必要があります。
上げなくても動くかもしれませんが、基本はbotocoreも最新にしておいた方が無難です。

botoを最新化するためにまずは、boto及びbotocoreの最新バージョンを入手しましょう。
以下のコマンドで入手することが可能です。

cd [ダウンロードしたいディレクトリ]
pip install -t ./python boto3==[最新バージョン]
pip install -t ./python botocore==[最新バージョン]

※pipコマンドを使用できる必要があります。

ディレクトリにbotoライブラリがダウンロードされますので、それをzip圧縮します。
圧縮の際は、以下の記事と同様にpythonフォルダに入れて、python.zipの形式にする必要があります。
アップロードの方法も以下の記事を参考にしてください。
【AWS】LambdaLayerの作成方法

最新バージョンをLambdaLayerにアップできたら、それをLambdaから呼び出します。
まず、先ほどの記事と同じようにLambdaLayerの参照を追加します。

そのあとは、以下のようにLambdaLayerを参照します。
LambdaLayerの参照を追加していることによって、「import boto3」で最新のLambdaLayerを参照できるようになっています。
(Lambdaに組み込まれている標準のboto3ではなく、LmabdaLayerとしてアップロードしたboto3の方が読み込まれる。)

test.py

import json
import botocore
import boto3

def lambda_handler(event, context):
    # botoのバージョンを確認する
    print('botocore vertion is {0}'.format(botocore.__version__))
    print('boto3 vertion is {0}'.format(boto3.__version__))

正常に参照できているかの確認バージョン情報を見ればわかります。

出力例

botocore vertion is 1.12.243
boto3 vertion is 1.9.243

少し手順が複雑ですが、これでLambdaから最新のbotoを使用することができます。

Profile

管理人プロフィール

都内でITエンジニアをやってます。
変遷:中規模SES→独立系SIer→Webサービス内製開発
使用技術はその時々でバラバラですが、C#、AWSが長いです。
どちらかと言うとバックエンドより開発が多かったです。
顧客との折衝や要件定義、マネジメント(10名弱程度)の経験あり。
最近はJava+SpringBootがメイン。

Recommend