botoとは
AWS Lambdaでは、AWSリソースを簡単に使用するためのpython用のSDKとしてbotoというものを使用できます。
このライブラリを使うことで、AWSリソースの使用(DynamoDBへのアイテム挿入やEC2の起動、停止など)を簡単に行えます。
例えばDynamoDBのテーブルを削除するようなプログラムは以下のようにして書くことが可能です。
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のバージョンを確認できます。
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の方が読み込まれる。)
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を使用することができます。