Serverless Framework入門(7)自分でコード書き始め

Serverless Frameworkのコードを少しずつ書いていきます。
チュートリアルのコードをそのまま実行する時と違って、様々なエラーが発生しましたが、こういう上手くいかない体験を積み重ねることで理解が深まると思うのでグダグダになろうともやってみたいと思います。

まずは以下のコマンドでServerless Frameworkのテンプレートを出力しました。

serverless create --template aws-python3

すると想定通り以下のディレクトリが作成されました。
f:id:JunpeiNakasone:20220119065227p:plain

作成直後の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を指定していないのが原因かな)

自分で考えながらコード書くといろいろ見えてくるなと思いました。チュートリアルのコードを参考にしつつ少しずつコーディングしていきます。