Serverless Frameworkでサーバレスアプリをデプロイする方法
2021年5月16日
目次
Open TOC
link
Serverless Frameworkとは

Serverless Frameworkはサーバレスアプリケーションを作成、デプロイするためのツールです。

デプロイ先はAWSやAzureだけでなく、Cloudflare、Kubelessなどにもデプロイできるそうです。

cf. https://github.com/serverless/serverless/tree/master/docs/providers

link
セットアップ方法

基本的にはこちらに書かれた方法でセットアップできます。

1
$ npm install -g serverless
2
$ serverless --version
3
Framework Core: 2.57.0
4
Plugin: 5.4.4
5
SDK: 4.3.0
6
Components: 3.17.0
link
デプロイ

使用できるテンプレートの一覧は以下で確認できます (大量のテンプレートがあります)。

1
$ sls create --help
2
Template for the service. Available templates:
3
"aws-clojure-gradle", "aws-clojurescript-gradle", "aws-nodejs", "aws-nodejs-docker", "aws-nodejs-typescript", "aws-alexa-typescript", "aws-nodejs-ecma-script", "aws-python","aws-python3", "aws-python-docker", "aws-groovy-gradle", "aws-java-maven", "aws-java-gradle", "aws-kotlin-jvm-maven", "aws-kotlin-jvm-gradle", "aws-kotlin-jvm-gradle-kts", "aws-kotlin-nodejs-gradle", "aws-scala-sbt", "aws-csharp", "aws-fsharp", "aws-go", "aws-go-dep", "aws-go-mod", "aws-ruby", "aws-provided", "tencent-go", "tencent-nodejs", "tencent-python", "tencent-php", "azure-csharp", "azure-nodejs", "azure-nodejs-typescript", "azure-python", "cloudflare-workers", "cloudflare-workers-enterprise", "cloudflare-workers-rust", "fn-nodejs", "fn-go", "google-nodejs", "google-nodejs-typescript", "google-python", "google-go", "kubeless-python", "kubeless-nodejs", "knative-docker", "openwhisk-java-maven", "openwhisk-nodejs", "openwhisk-php", "openwhisk-python", "openwhisk-ruby", "openwhisk-swift", "spotinst-nodejs", "spotinst-python", "spotinst-ruby", "spotinst-java8", "twilio-nodejs", "aliyun-nodejs", "plugin","hello-world"

それでは、typescriptでAWSにデプロイするためのテンプレートを作成してみます。

1
$ sls create --template aws-nodejs-typescript --path <project_name>
2
Serverless: Generating boilerplate...
3
Serverless: Generating boilerplate in "/Users/kusakabe/projects/serverless-sample/test"
4
_______ __
5
| _ .-----.----.--.--.-----.----| .-----.-----.-----.
6
| |___| -__| _| | | -__| _| | -__|__ --|__ --|
7
|____ |_____|__| \___/|_____|__| |__|_____|_____|_____|
8
| | | The Serverless Application Framework
9
| | serverless.com, v2.57.0
10
-------'
11
12
Serverless: Successfully generated boilerplate for template: "aws-nodejs-typescript"

cf. https://www.serverless.com/framework/docs/providers/aws/cli-reference/create/

link
serverless.tsの設定

こんな感じのファイルが作成されます。 他の言語でテンプレートを作成すると、serverless.ymlになります。 基本的な書き方は以下を参考にすると良いです。 cf. https://www.serverless.com/framework/docs/providers/aws/guide/intro/

serverless.ts
1
import type { AWS } from '@serverless/typescript';
2
3
import hello from '@functions/hello';
4
5
const serverlessConfiguration: AWS = {
6
service: '<project_name>',
7
frameworkVersion: '2',
8
custom: {
9
webpack: {
10
webpackConfig: './webpack.config.js',
11
includeModules: true,
12
},
13
},
14
plugins: ['serverless-webpack'],
15
provider: {
16
name: 'aws',
17
runtime: 'nodejs14.x',
18
apiGateway: {
19
minimumCompressionSize: 1024,
20
shouldStartNameWithService: true,
21
},
22
environment: {
23
AWS_NODEJS_CONNECTION_REUSE_ENABLED: '1',
24
},
25
lambdaHashingVersion: '20201221',
26
},
27
// import the function via paths
28
functions: { hello },
29
};
30
31
module.exports = serverlessConfiguration;
link
入れておくと良いプラグイン

以下のサイトで使用できるプラグインを確認できます。 https://www.serverless.com/plugins

serverless-offlineはローカルでserverlessアプリを動かすのに使います。 serverless-dotenv-pluginはdotenvを使うためのプラグインです。

他にもデプロイ済みのものと、デプロイ前のものの差分を表示する serverless-plugin-diff などもありますが、 こちらは1.xでのみ対応で2.xや3.xでは利用できません。

- plugins: ['serverless-webpack'],

+ plugins: ['serverless-webpack', 'serverless-offline', 'serverless-dotenv-plugin'],
link
デプロイ

dry runを実行したいところですが、残念ながらServerlessにはその機能はありません。 前までは--noDeployというオプションがありましたが、削除されました。。

気を取り直して、以下でデプロイします。

1
$ sls deploy --stage <デプロイする環境 dev|staging|production> --aws-profile <aws_profile>
link
削除

削除は以下でできます。

1
$ sls remove --stage <デプロイする環境 dev|staging|production> --aws-profile <aws_profile>

以上。

link
追記予定の記事

Serverlessでのコンテナデプロイの方法

自己紹介
はじめまして Pilefortです。
東京でエソジニアをしてます。
興味のあるスタックは、JavaScript (React, Vue), TypeScript, Rust, WebAssembly, AWS, Pulumi, Serverless Frameworkです。
このブログでは、普段の業務や趣味で気になったことをまとめたり、フロントやAWS, GitHubやTwitterで見かけた面白い記事やニュースをまとめるためのものです。少しでも何かの役に立てば幸いです。
サイトマップ
Notes
業務や趣味での気づき・メモ
Snippets
記事にするまでもないけど、便利なコマンドや豆知識
Works
同人誌一覧