Serverless Frameworkとは

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

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

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

セットアップ方法

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

$ npm install -g serverless
$ serverless --version
Framework Core: 2.57.0
Plugin: 5.4.4
SDK: 4.3.0
Components: 3.17.0

デプロイ

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

$ sls create --help
Template for the service. Available templates:
"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にデプロイするためのテンプレートを作成してみます。

$ sls create --template aws-nodejs-typescript --path <project_name>
Serverless: Generating boilerplate...
Serverless: Generating boilerplate in "/Users/kusakabe/projects/serverless-sample/test"
 _______                             __
|   _   .-----.----.--.--.-----.----|  .-----.-----.-----.
|   |___|  -__|   _|  |  |  -__|   _|  |  -__|__ --|__ --|
|____   |_____|__|  \___/|_____|__| |__|_____|_____|_____|
|   |   |             The Serverless Application Framework
|       |                           serverless.com, v2.57.0
 -------'

Serverless: Successfully generated boilerplate for template: "aws-nodejs-typescript"

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

serverless.tsの設定

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

serverless.ts
import type { AWS } from '@serverless/typescript';

import hello from '@functions/hello';

const serverlessConfiguration: AWS = {
		service: '<project_name>',
		frameworkVersion: '2',
		custom: {
				webpack: {
						webpackConfig: './webpack.config.js',
						includeModules: true,
				},
		},
		plugins: ['serverless-webpack'],
		provider: {
				name: 'aws',
				runtime: 'nodejs14.x',
				apiGateway: {
						minimumCompressionSize: 1024,
						shouldStartNameWithService: true,
				},
				environment: {
						AWS_NODEJS_CONNECTION_REUSE_ENABLED: '1',
				},
				lambdaHashingVersion: '20201221',
		},
		// import the function via paths
		functions: { hello },
};

module.exports = serverlessConfiguration;

入れておくと良いプラグイン

以下のサイトで使用できるプラグインを確認できます。 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'],

デプロイ

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

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

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

削除

削除は以下でできます。

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

以上。


コメント