Serverless Frameworkとは
Serverless Frameworkとは、erverless Applicationを構成管理デプロイするためのツールで、ローカルでのデバッグや、デプロイなんかもアッという間にできてしまうツールです。オープンソースというのは素晴らしいですね。
ということで、今更な気もしますが、実際に使ってみたいと思います。
環境
Windows10
WSL2
Ubuntu 20.04 LTS
Node.js 12.18.3
インストール
Node.jsを使うので、環境がない場合は、事前にこちらを
やっておくと便利です。
次に、Serverless Frameworkをインストールします。
$ npm install -g serverless
┌───────────────────────────────────────────────────┐
│ │
│ Serverless Framework successfully installed! │
│ │
│ To start your first project run 'serverless'. │
│ │
└───────────────────────────────────────────────────┘
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@~2.1.2 (node_modules/serverless/node_modules/chokidar/node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@2.1.3: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})
+ serverless@1.79.0
added 747 packages from 502 contributors in 27.15s
警告が若干出ますが、Macしか対応していない模様なのと、「OPTIONAL DEVENDENCY」なので無視します。
$ serverless --version
Framework Core: 1.79.0
Plugin: 3.7.1
SDK: 2.3.1
Components: 2.34.6
無事インストールができました。
プロジェクトの作成
無事インストールできたので、次にプロジェクトを作成していきます。
$ serverless create -t aws-python3 -n myapp -p myapp
Serverless: Generating boilerplate...
_______ __
| _ .-----.----.--.--.-----.----| .-----.-----.-----.
| |___| -__| _| | | -__| _| | -__|__ --|__ --|
|____ |_____|__| \___/|_____|__| |__|_____|_____|_____|
| | | The Serverless Application Framework
| | serverless.com, v1.79.0
-------'
Serverless: Successfully generated boilerplate for template: "aws-python3"
無事作成できました。
-tでテンプレートを指定します。ここの指定で利用言語も決まります。詳細はこちら
myapp配下に、serverless.yml、handler.pyが作成されていれば、成功です。
AWS にデプロイする
アカウントの設定
事前にServerless framework用のアカウントを作成しておきます。
IAMユーザにAdministratorAccessの管理ポリシーを与えれば、大丈夫ですが、細かい設定はまたの機会に勉強したいともいます。
serverless config credentials --provider aws --key {アクセスキーID} --secret {シークレットアクセスキー}
アクセスキーID、シークレットアクセスキーには作成したIAMアカウントのものを設定してください。
設定がされているかどうかは以下のコマンドで確認が可能です。
$ cat ~/.aws/credentials
[default]
aws_access_key_id=XXXXXXXXXXXXXXXXXXXX
aws_secret_access_key=YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
デプロイ
そのままデプロイしてもいいのですが、デフォルトだと、API Gatewayも利用されないので
少しだけ変更してみます。
functions:
hello: ・・・ 関数名を指定
handler: handler.hello ・・・ Handler関数を指定
events:
- http:
path: sample/hello ・・・ APIのリソースを指定
method: get ・・・ HTTPのメソッド
次にデプロイを実行します。
$ serverless deploy -v
Serverless: Stack update finished...
Service Information
service: myapp
stage: dev
region: us-east-1
stack: myapp-dev
resources: 12
api keys:
None
endpoints:
GET - https://qcispp8ggg.execute-api.us-east-1.amazonaws.com/dev/sample/hello
functions:
hello: myapp-dev-hello
layers:
None
Stack Outputs
HelloLambdaFunctionQualifiedArn: arn:aws:lambda:us-east-1:767994070137:function:myapp-dev-hello:1
ServiceEndpoint: https://qcispp8ggg.execute-api.us-east-1.amazonaws.com/dev
ServerlessDeploymentBucketName: myapp-dev-serverlessdeploymentbucket-1xu5hoa9udend
途中、CloudFormationやらのログが出ますが、無事デプロイされると上記のようなログが出力されます。
疎通確認
上記ログを見るとendpointsに作成されたAPIのパスが表示されていますので、
呼び出してみます。(ブラウザでも、CurlでもOK)
最後に
ここまで、10分もあれば終わりました。AWSのアカウント周りとか若干厄介ですが、かなりラクチンですね。