LoginSignup
4
1

More than 3 years have passed since last update.

今更だけど、Serverless Frameworkを使う

Posted at

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も利用されないので
少しだけ変更してみます。

serverless.yml
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)

image.png

最後に

ここまで、10分もあれば終わりました。AWSのアカウント周りとか若干厄介ですが、かなりラクチンですね。

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1