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

    広告ここから
    広告ここまで
    Home
    Search
    Bookmark