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