Alexaスキルバックエンド向けのSAMテンプレートをジェネレートするライブラリ: sam-boilerplate をリリースしました

Alexaスキルを複数作っていると、毎回CloudFormationのテンプレートをSAMやServerless Frameworkで準備するのが意外と煩雑でした。 「いい感じにパッとひな型を作ってくれて、いらないやつだ […]

広告ここから
広告ここまで

目次

    Alexaスキルを複数作っていると、毎回CloudFormationのテンプレートをSAMやServerless Frameworkで準備するのが意外と煩雑でした。

    「いい感じにパッとひな型を作ってくれて、いらないやつだけ消す」みたいなのがあればいいなーと思ったので、サクッと作ってみました。

    @ask-utils/sam-boilerplate – npmjs.com

    使い方

    npxでtemplate.yamlを作れます。

    $ npx @ask-utils/sam-boilerplate

    入っていると便利なリソースが定義されたSAMのスタックが定義されています。

    Transform: 'AWS::Serverless-2016-10-31'
    Parameters:
      Stage:
        Type: String
        Default: production
        Description: stage
    Conditions:
      IsProduction:
        'Fn::Equals':
          - Ref: Stage
          - production
    Resources:
      LambdaPolicy7FF67BE6:
        Type: 'AWS::IAM::Policy'
        Properties:
          PolicyDocument:
            Statement:
              - Action:
                  - 'dynamodb:PutItem'
                  - 'dynamodb:DeleteItem'
                  - 'dynamodb:GetItem'
                Effect: Allow
                Resource: 'arn:aws:dynamodb:*:*:table/YOUR_TABLE'
              - Action:
                  - 's3:PutObject'
                  - 's3:GetObject'
                  - 's3:DeleteObject'
                Effect: Allow
                Resource: 'arn:aws:s3:::YOUR_BUCKET/*'
            Version: '2012-10-17'
          PolicyName: BoilerPlateStackInlinePolicy
          Roles:
            - Ref: LambdaRole3A44B857
      LambdaRole3A44B857:
        Type: 'AWS::IAM::Role'
        Properties:
          AssumeRolePolicyDocument:
            Statement:
              - Action: 'sts:AssumeRole'
                Effect: Allow
                Principal:
                  Service:
                    'Fn::Join':
                      - ''
                      - - lambda.
                        - Ref: 'AWS::URLSuffix'
            Version: '2012-10-17'
          Path: /service-role/
      AlexaSkillFunction:
        Type: 'AWS::Serverless::Function'
        Properties:
          CodeUri: src
          Handler: index.handler
          Runtime: nodejs8.10
          AutoPublishAlias:
            Ref: Stage
          DeploymentPreference:
            Enabled: true
            Type:
              'Fn::If':
                - IsProduction
                - Linear10PercentEvery1Minute
                - AllAtOnce
          Events:
            AlexaSkill:
              Properties: {}
              Type: AlexaSkill
          Role:
            'Fn::GetAtt':
              - LambdaRole3A44B857
              - Arn
      SkillFunctionLogGroup:
        Type: 'AWS::Logs::LogGroup'
        Properties:
          LogGroupName:
            'Fn::Join':
              - /
              - - /aws/lambda
                - Ref: AlexaSkillFunction
          RetentionInDays: 14
    

    作成されるリソース

    • Lambda
    • IAMポリシー (DynamoDB / S3へのアクセス管理)
    • IAMロール(Lambda実行ロール)
    • Cloudwatch Logs
    • CodeDeploy (Lamndaデプロイ用)

    Scriptとして使う

    CLIで実行している処理もexportしてあります。なので細かくカスタマイズしたいときはnpm i -D @ask-utils/sam-boilerplateして実行してやりましょう。

    const { generateBoilerplate } = require('@ask-utils/sam-boilerplate')
    
    console.log(generateBoilerplate())
    console.log(generateBoilerplate({
      format: 'yaml',
      dbTableNames: ['test'],
      s3BucketNames: ['brabra']
    }))

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