Amazon Alexaask-utilsSAM

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']
}))

ブックマークや限定記事(予定)など

WP Kyotoサポーター募集中

WordPressやフロントエンドアプリのホスティング、Algolia・AWSなどのサービス利用料を支援する「WP Kyotoサポーター」を募集しています。
月額または年額の有料プランを契約すると、ブックマーク機能などのサポーター限定機能がご利用いただけます。

14日間のトライアルも用意しておりますので、「このサイトよく見るな」という方はぜひご検討ください。

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

Related Category posts