Serverless Frameworkの`serverless.yaml`を`serverless.ts`に変換する
いつのまにか、sls create -t aws-nodejs-typescriptで作られる定義ファイルがYAMLからTypeScriptになっていました。 PythonなどではYAMLのままなので、一部テンプレートの […]
広告ここから
広告ここまで
目次
いつのまにか、sls create -t aws-nodejs-typescript
で作られる定義ファイルがYAMLからTypeScriptになっていました。
import type { Serverless } from 'serverless/aws';
const serverlessConfiguration: Serverless = {
service: {
name: 'scp-db',
// app and org for use with dashboard.serverless.com
// app: your-app-name,
// org: your-org-name,
},
frameworkVersion: '2',
custom: {
webpack: {
webpackConfig: './webpack.config.js',
includeModules: true
}
},
// Add the serverless-webpack plugin
plugins: ['serverless-webpack'],
provider: {
name: 'aws',
runtime: 'nodejs12.x',
apiGateway: {
minimumCompressionSize: 1024,
},
environment: {
AWS_NODEJS_CONNECTION_REUSE_ENABLED: '1',
},
},
functions: {
hello: {
handler: 'handler.hello',
events: [
{
http: {
method: 'get',
path: 'hello',
}
}
]
}
}
}
module.exports = serverlessConfiguration;
PythonなどではYAMLのままなので、一部テンプレートのみの様子です。
ちょっとびっくりするかもしれませんが、書き方が変わるわけではないので慣れましょう。
既存のYAMLを変換する
で、TypeScriptユーザーの場合「これまでのYAMLもTSで管理したい」という気持ちになると思います。
変換操作をやるのが面倒だったので、雑なCLIを作ってみました。
変換前のYAML
service:
name: example-project
frameworkVersion: '2'
custom:
webpack:
webpackConfig: ./webpack.config.js
includeModules: true
plugins:
- serverless-webpack
provider:
name: aws
runtime: nodejs12.x
apiGateway:
minimumCompressionSize: 1024
environment:
AWS_NODEJS_CONNECTION_REUSE_ENABLED: 1
functions:
hello:
handler: handler.hello
events:
- http:
method: get
path: hello
変換コマンド
npx serverless-yaml2ts
を実行すると、実行したディレクトリにあるserverless.yml
またはserverless.yaml
を探してserverless.ts
を作ります。
% npx serverless-yaml2ts
npx: 78個のパッケージを3.656秒でインストールしました。
Loading: /Users/development/my-services/scp-db/serverless.yaml
serverless.yaml not found.
Loading: /Users/development/my-services/scp-db/serverless.yml
serverless.ts created
変換後のTSファイル
import { Serverless } from 'serverless/aws';
export const service: Serverless = {
"service": {
"name": "example-project"
},
"frameworkVersion": "2",
"custom": {
"webpack": {
"webpackConfig": "./webpack.config.js",
"includeModules": true
}
},
"plugins": [
"serverless-webpack"
],
"provider": {
"name": "aws",
"runtime": "nodejs12.x",
"apiGateway": {
"minimumCompressionSize": 1024
},
"environment": {
"AWS_NODEJS_CONNECTION_REUSE_ENABLED": 1
}
},
"functions": {
"hello": {
"handler": "handler.hello",
"events": [
{
"http": {
"method": "get",
"path": "hello"
}
}
]
}
}
}
module.exports = service