Serverless Frameworkのコードを少しずつ書いていきます。
チュートリアルのコードをそのまま実行する時と違って、様々なエラーが発生しましたが、こういう上手くいかない体験を積み重ねることで理解が深まると思うのでグダグダになろうともやってみたいと思います。
まずは以下のコマンドでServerless Frameworkのテンプレートを出力しました。
serverless create --template aws-python3
すると想定通り以下のディレクトリが作成されました。
作成直後のserverless.ymlとhandler.pyのコードは以下です。(コメントは削除済み)
[serverless.yml] service: serverless-python-s3-practice frameworkVersion: '2' provider: name: aws runtime: python3.8 lambdaHashingVersion: 20201221 functions: hello: handler: handler.hello
[handler.py] import json def hello(event, context): body = { "message": "Go Serverless v1.0! Your function executed successfully!", "input": event } response = { "statusCode": 200, "body": json.dumps(body) } return response
そして、とりあえずデプロイしてブラウザにメッセージが表示されるのまで確認してみたいと思い以下のコマンドを実行しました。
オブションはうろ覚えのまま実行しましたが、無事ap-northeast-1にデプロイはできました。
sls deploy --stage dev --region ap-northeast-1
自分の想定では上記コマンド実行後にターミナルにURLが出力されると思ってましたが、特に何も表示されませんでした。
自分が以前試したコードでは確かURL出力されてたよなと思い、以前実行したコード確認するとserverless.ymlで以下のようにeventsプロパティを設定していました。
service: serverless-tutorial frameworkVersion: '2' provider: name: aws runtime: python3.8 versionFunctions: false lambdaHashingVersion: 20201221 memorySize: 128 region: ap-notheast-1 functions: hello: handler: handler.hello events: - http: path: echo/hello method: get
eventsプロパティが設定されていないとpathもないのでアクセスしようがない感じになるのかなと思いました。予想ですが、eventsがあるとserverless deployした時にAPI Gatewayも作成されるようになるかと推測しました。
これは間違えたのでやり直したいと思い、一度デプロイしたserveless frameworkを以下のコマンドでremoveしたかったのですが、エラーになりました。
sls remove --stg dev Serverless Error ---------------------------------------- Stack 'serverless-python-s3-practice-dev' does not exist
以前は上記コマンドで特にアプリケーション名は気にせずに削除できていたので、原因がよくわからず手動で各リソースを削除しました。 が、絶対コマンドでまとめて削除した方がいいと思うので再度調べます。(ブログ書きながら思いましたが、regionを指定していないのが原因かな)
自分で考えながらコード書くといろいろ見えてくるなと思いました。チュートリアルのコードを参考にしつつ少しずつコーディングしていきます。