Serverless Frameworkはサーバレスアプリケーションを作成、デプロイするためのツールです。
デプロイ先はAWSやAzureだけでなく、Cloudflare、Kubelessなどにもデプロイできるそうです。
cf. https://github.com/serverless/serverless/tree/master/docs/providers
基本的にはこちらに書かれた方法でセットアップできます。
1$ npm install -g serverless2$ serverless --version3Framework Core: 2.57.04Plugin: 5.4.45SDK: 4.3.06Components: 3.17.0
使用できるテンプレートの一覧は以下で確認できます (大量のテンプレートがあります)。
1$ sls create --help2Template 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>2Serverless: Generating boilerplate...3Serverless: Generating boilerplate in "/Users/kusakabe/projects/serverless-sample/test"4_______ __5| _ .-----.----.--.--.-----.----| .-----.-----.-----.6| |___| -__| _| | | -__| _| | -__|__ --|__ --|7|____ |_____|__| \___/|_____|__| |__|_____|_____|_____|8| | | The Serverless Application Framework9| | serverless.com, v2.57.010-------'1112Serverless: Successfully generated boilerplate for template: "aws-nodejs-typescript"
cf. https://www.serverless.com/framework/docs/providers/aws/cli-reference/create/
こんな感じのファイルが作成されます。 他の言語でテンプレートを作成すると、serverless.ymlになります。 基本的な書き方は以下を参考にすると良いです。 cf. https://www.serverless.com/framework/docs/providers/aws/guide/intro/
serverless.ts1import type { AWS } from '@serverless/typescript';23import hello from '@functions/hello';45const serverlessConfiguration: AWS = {6service: '<project_name>',7frameworkVersion: '2',8custom: {9webpack: {10webpackConfig: './webpack.config.js',11includeModules: true,12},13},14plugins: ['serverless-webpack'],15provider: {16name: 'aws',17runtime: 'nodejs14.x',18apiGateway: {19minimumCompressionSize: 1024,20shouldStartNameWithService: true,21},22environment: {23AWS_NODEJS_CONNECTION_REUSE_ENABLED: '1',24},25lambdaHashingVersion: '20201221',26},27// import the function via paths28functions: { hello },29};3031module.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というオプションがありましたが、削除されました。。
気を取り直して、以下でデプロイします。
1$ sls deploy --stage <デプロイする環境 dev|staging|production> --aws-profile <aws_profile>
削除は以下でできます。
1$ sls remove --stage <デプロイする環境 dev|staging|production> --aws-profile <aws_profile>
以上。
Serverlessでのコンテナデプロイの方法