Serverless FrameworkでLambdaを管理
以前、Lambda関数を作った時に、気になっていたServerless Frameworkで構成管理してみることにしたのでメモです。
Infrastructure as Codeで、ansibleのようにコードでインフラ構成管理していくイメージです。
install
nodejsが実行できる状態で、npm install -g serverless
https://www.serverless.com/framework/docs/getting-started
プロジェクト作成
serverless create --template aws-python3 --name serverless-check-audrey
実行すると、serverless-check-audrey
ディレクトリ内に必要なファイルが作成される。
- serverless.yml : 設定を記述していくファイル
- handler.py : 実際にLambdaで実行するプログラム
serverless.ymlの設定
設定した内容は以下です。(おそらく最低限の設定)
timeoutやmemorySizeは、デフォルトで書いたものが設定されるので適したもの指定する。
コードは、handler.py
に記述して、functions
の名前をよしなに変更する。(デフォルトは、helloという名前になっている)
service: serverless-check-audrey
frameworkVersion: '3'
provider:
name: aws
runtime: python3.7
timeout: 480 # default is 6
memorySize: 256 # default is 1024
region: ap-northeast-1
functions:
check:
handler: handler.check
layers:
- arn:aws:lambda:XXXXX:chromeのlayer
- arn:aws:lambda:XXXXX:slackwebのlayer
- arn:aws:lambda:XXXXX:seleniumのlayer
events:
- schedule: cron(0 11 * * ? *)
# plugins:
# - serverless-python-requirements
ハマりポイント
seleniumがpython3.9で動かない
AmazonLinux2だと、一部のライブラリが動かない?(あいまいです)ようで、3.7にして解決
scheduleのcronの書き方
Linuxのcron設定の引数の数が異なっていて、ずっと間違えていました。
ただ、eventsでscheduleを書くだけで、EventBridge (CloudWatch Events)が勝手に作成・紐付けされて、スゴイです。
これから
layer部分は、前回でも使用していたものをそのまま使ってしまいましたが、ここもserverlessで管理することができるのでこちらもやる予定です。