ひさふぃの日記

DjangoとPythonとLaravelが好き。大阪でフリーランスエンジニアやってます。

AWS Lambda入門したのでメモ

一年前に半日ほど触ったが、ケツが決まっててとりあえず動かせ!だったので復習がてら勉強
ついでにIAMもある程度学んだ。IAMがAWSの敷居を上げてる気がする

読んだ and 役立った

AWS初心者入門 第7回 「Lambda」ってなにがスゴイんですか? | 連載コラム 元SEママの情シスなりきりAWS奮闘記 | マネージドクラウド with AWS
全くわかっていない人目線で書いてくれている

AWS Lambda (サーバーレスでコードを実行・自動管理) | AWS
3分の動画見れば大体わかる

ASCII.jp:エンジニアを魅了してきたAWS Lambda、その4年間の軌跡 (2/2)
企業でのユースケースを書いてくれている
どう活用するかというイメージがついた

AWS を安全に使うために(IAM のベストプラクティス) | DevelopersIO
IAMの具体例

AWS Lambda とは - AWS Lambda
AWSの公式ページ-Lambda関数の呼び出し-まで
SAM・VPC関連は飛ばした。
とはいえ、絶対に自動化したくなるだろうからSAMは近いうちに試したい。

何がイケてるのか

環境構築を気にせずコードに集中できる(ただしIAMは分かりづらいし面倒)
起動時間だけ課金なので経済的
スケーリングを自動でやってくれる

単語のゆるふわ理解

手を動かした

以下、メモ

aws-cliのインストールでは--userオプションは外した。
systemではなくpyenvのpythonでインストールしたので壊れてもいいかと。それより環境PATHはなるべくいじりたくない。
忘れないようにしておこう。

printとloggingはログに表示される。
テスト時はコンソールのLog outputを見ればいいし、CloudWatchLogにすべて保存される。

import logging
logger = logging.getLogger()
logger.setLevel(logging.INFO)
def my_logging_handler(event, context):
    print("print:get event {}".format(event))
    logger.info('logging:got event{}'.format(event))
    logger.error('logging:error')
    return 'Hello from Lambda!'

venvでインストールしたパッケージを使いたい場合、site-packageディレクトリをzip化

zip -r9 module_name.zip env/lib/python3.6/site-packages
zip -g module_name.zip module_name.py

S3のユースケースでPillowを使うのだが、デプロイ後にimportエラーが出て2時間くらいドハマリした。
Macで作業してデプロイしようとしていたのだが、OSによってpipで用いるランタイムやパッケージが異なりsite-packagesの構成が変わるよう。
それでユースケースではlinux(EC2)環境にて作業していたのだ。ちゃんと意味があるのね。
こういう場面に遭遇すると表面的な対処ばかりしてきた自身の力不足を痛感する。まぁ勉強になったから良しとしよう。