AWS Lambda Python !!!
週末更新、吉田です。
nodeの非同期は僕にはオーバーテクノロジ過ぎたのでAWS LambdaはPythonを使っています(Javaという選択肢は僕にはなかった)。
AWS Lambdaの関数をそこそこ書いてきて、なんとなく使い方はつかめてきたのでよく使うのをまとめてみました。
###import
使用するモジュールを
import モジュール名
の形式でインポートします。
Pythonには様々な外部モジュールが存在していて、importすることで使用することが出来ます。
AWS Lambdaで使う上で最も使うのは boto3 ではないかと思います。
boto はAWSのAPIを扱うためのPython版のSDKです。
import boto3
ec2 = boto3.resource('ec2')
モジュール名.メソッド(’与える引数’)
みたいに使っていけば使えるはずです。
上記例では変数【ec2】に格納することで、ec2.hogehoge でec2のメソッドを使用できるようにしています。
###変数
Pythonで変数を使用は
変数 = 'hogehoge'
のように使用します。
Javaとかみたいに型の宣言とかは不要です。
Pythonに定数はないため、お作法的に全部大文字の変数は定数とするようです。
###配列
リスト型の変数は以下のようにして使用します
array = ["hoge","fuga","bar"]
配列は[ ]を使用します配列の要素は0から格納されるため、上記の例で要素”hoge”にアクセスするには
array = ["hoge","fuga","bar"]
sample = array[0]
こんな感じにするとsampleにarrayの要素番号0(hoge)が格納されます
配列への要素の追加
.appendを使用することで配列(リスト)の末尾に要素を追加することが出来ます
array = ["hoge","fuga","bar"]
array.append("hogeeeee")
こうすることで配列(array)は
array = ["hoge","fuga","bar","hogeeeee"]
となります。
配列から要素の削除
.popを使用することで配列(リスト)の要素を削除することが出来ます
.pop(要素番号)で指定の要素を削除します。
.pop()と要素番号を指定しないと末尾が削除されます
.popは削除した要素を返します
array = ["hoge","fuga","bar","hogeeeee"]
var = array.pop()
array = ["hoge","fuga","bar"]
var = "hogeeeee"
こうなります。
###辞書型の配列
キーと値のセットを配列として保持し、キーを指定して値を取り題したい
こんな時に使うのが辞書型です。
dic = {"id":"i-hogehoge","type":"4xlarge"}
みたいに使います。
リスト型と違い{ }で括ることで辞書型として使用できます。
キーに対する値を取り出します
dic = {"id":"i-hogehoge","type":"4xlarge"}
dic["id"]
i-hogehoge
というように 辞書型配列名[キー名] でキーに対する値を取得します。
辞書型の配列の総素数を取得するときは len() 関数を使用します。
dic = {"id":"i-hogehoge","type":"4xlarge"}
dic_num = len(dic)
for文でぶん回す時なんかに便利
ちなみに、辞書・リスト・タプル全部lenで大丈夫
要素の追加と削除
追加
dic = {"id":"i-hogehoge","type":"4xlarge"}
dic["AZ"] = "a"
dic["type"] = "xlarge"
dic = {"id":"i-hogehoge","type":"xlarge","AZ":"a"}
こんな感じで追加します。
注意点は、存在しないキーを指定すれば新しく作りますが、
既に存在するキーを指定すると上書きします。
削除
.pop(キー名)で削除します。
dic = {"id":"i-hogehoge","type":"4xlarge"}
dic.pop('type')
###関数
Pythonで関数を利用するときは def を使用して関数を定義します。
def sample1(content1, content2):
print(content1)
print(content2)
こんな形になります。
de中の( )内に関数に渡す引数を定義します。,区切りで複数指定することが出来ます。
関数の使用は 関数名(引数1, 引数2) というように使用します。
また、関数内の処理の結果を返すことができます。
結果を返す場合は return 文を使用することで関数の処理結果を呼び出し元に返却します。
def lambda_handler(event, context):
kansu_kekka = kansu1(hoge, hoge)
print(kansu_kekka)
def kansu1(hikisu1, hikisu2):
moji_1 = hikisu1
moji_2 = hikisu2
kekka = moji_1 + moji_2
return kekka
hogehoge
みたいなイメージです。
複数の値を返したいときはリスト・タプル・辞書型を使用すればいけます。
kekka_array = [hoge, bar, fuga]
retrun kekka_array
こんな感じですね。辞書やタプルもおんなじ感覚
###for文
個人的にAWS Lambdaを使っていてforの利用法としてはリストの要素をぶん回すeach的な感じ。
その方法について
array = ["hoge","fuga","bar","hogeeeee"]
count = len(array)
for i in range(0, count):
<繰り返したい処理>
###if文
type = 't2.micro'
if type == 'm4.4xlarge':
print("NOOOOOOOOOOOO!!!!!")
elif type == 'm4.xlarge':
print("OK")
else:
print(type)
比較演算子はこんな感じ
演算子 | 意味 |
---|---|
== | 等しい |
!= | 等しくない |
> | 大きい |
>= | 大きいか等しい |
< | 小さい |
<= | 小さいか等しい |
###関数:lambda_handler(event, context)
Pythonの基本的なお話からAWS Lambdaのお話に移ります。
AWS Lambda(Python2.7)を初めて触り、一番謎なのがこの文章。
AWS Lambdaが実行されるとき、AWS Lambdaは指定したプログラム中のこの関数を実行します。
この関数名は変更可能ですが、変更した際はAWS Lambdaのコンソールで実行関数の名前を変更しないといけません。
特別に何か理由がない限りはデフォルトのままこの名前を使用するべきでしょう。
引数で指定されている event はAWS Lambda関数が実行される際にAWS Lambdaに渡される情報がJSON形式で格納されています。
イベント・ドリブンでAWS Lambdaを実行する場合、このeventの中に何らかのイベント情報が格納されているのでこのJSONをゴリゴリしていけば欲しい情報は手に入ります。
contextはとりあえず気にしない方がいいです。
Context オブジェクト (Python)に書いてあるよう有益な情報を取得できますが、混乱します。
必要になるであろうときまで頭の片隅においておきましょう。使うときに調べれば良いのです。いつかそんな時が来る。
だーーーーーっと書いていきましたがこの辺とJSONでゴリゴリする方法がわかっていればAWS Lambdaのはじめの一歩を踏み出せるかと思います。
JSONについては以前この記事に書いているのでよければ参考にしてください。
個人的なメモ感が強いのでもう少しブラッシュアップしたらエンジニアブログに書こうかなー