serverless framework入門(2)

programming-gogogogo.hatenablog.com

前回の記事でserverless frameworkの概要を調べたので、今回はチュートリアル動画を見ながら手を動かしました。

こちらの動画を参考にしました。

www.youtube.com

自分はnpmが入っている状態から始めましたが、npmが入っていない場合は公式ページにあるようにnpmのインストールから行います。

npm install -g serverless

www.serverless.com

次に以下のコマンドでserverlessプロジェクトを作成しました。

serverless create --template aws-python3

templateオプションで言語を指定できます。

serverless createコマンド実行後、作業ディレクトリにhandler.py、serverless.yml、.npmignoreが作成されていました。
f:id:JunpeiNakasone:20220112060451p:plain

serverless.ymlはコメントを消すとコードの内容としては以下のようになっていました。

service: serverless-tutorial

frameworkVersion: '2'

provider:
  name: aws
  runtime: python3.8
  lambdaHashingVersion: 20201221


functions:
  hello:
    handler: handler.hello

なんとなく読んだだけでもhandler.pyに定義されてるhello関数を呼び出しそうな感じが見て取れます。

より詳細な説明は公式ページなどを読むと良さそうでした。
必要になったら深掘りしていこうと思います。

www.serverless.com

serverless.ymlを動画に倣って以下のように編集しました。

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

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

このままがわかりやすそうなので変更は加えませんでした。

次にAWSのコンソールでserverless frameworkで使用するためのaws-serverless-tutorialというIAMユーザーを作成し必要な権限を付与しました。

f:id:JunpeiNakasone:20220112061628p:plain

次にターミナルから以下のコマンドを実行してserverless frameworkがAWSにデプロイできるように設定しました。(serverlessはslsと省略できるようです)

sls config credentials --provider aws --key IAMユーザーのアクセスキー --secret IAMユーザーのシークレットキー --profile 任意のprofile名

公式ページでのconfigの説明は以下のページにありました。

www.serverless.com

次にdeployコマンドでAWSへのデプロイを実行しました。

sls deploy --stage dev

公式ページでのdeployの説明は以下のページにありました。

www.serverless.com

環境を指定するstageオプションを使えるのは便利そうです。

ちょっと待つと以下のようにターミナルに出力されました。

Serverless: Stack update finished...
Service Information
service: serverless-tutorial
stage: dev
region: ap-northeast-1
stack: serverless-tutorial-dev
resources: 11
api keys:
  None
endpoints:
  GET - https://0uqnx33fcj.execute-api.ap-northeast-1.amazonaws.com/dev/echo/hello
functions:
  hello: serverless-tutorial-dev-hello
layers:
  None

endpointに出力されたURLにアクセスするとhandler.pyのhello関数の結果が表示されました。
f:id:JunpeiNakasone:20220112062531p:plain

また、作業ディレクトリに.serverlessディレクトリが生成されていて、中にはcloudformationのテンプレートがありました。
f:id:JunpeiNakasone:20220112062743p:plain

clfテンプレートにはLambda、API Gateway、S3、IAMなどserverless frameworkで使われるリソースが定義されていました。

少しserverless frameworkのイメージが掴めたので、もう少し深掘りしてみようと思います。