Created
March 28, 2018 22:29
-
-
Save jamesls/c80880fb7df39bc33ef4d30aca7d6995 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Given this app.py | |
from chalice import Chalice | |
app = Chalice(app_name='sam-compare') | |
@app.authorizer() | |
def myauth(auth_event): | |
return None | |
@app.lambda_function() | |
def foo(event, context): | |
return None | |
@app.schedule('rate(5 minutes)') | |
def cron(event): | |
return None | |
@app.route('/', authorizer=myauth) | |
def index(): | |
return {'hello': 'world'} | |
The old chalice package command gives: | |
{ | |
"AWSTemplateFormatVersion": "2010-09-09", | |
"Outputs": { | |
"RestAPIId": { | |
"Value": { | |
"Ref": "RestAPI" | |
} | |
}, | |
"APIHandlerName": { | |
"Value": { | |
"Ref": "APIHandler" | |
} | |
}, | |
"APIHandlerArn": { | |
"Value": { | |
"Fn::GetAtt": [ | |
"APIHandler", | |
"Arn" | |
] | |
} | |
}, | |
"EndpointURL": { | |
"Value": { | |
"Fn::Sub": "https://${RestAPI}.execute-api.${AWS::Region}.amazonaws.com/api/" | |
} | |
} | |
}, | |
"Transform": "AWS::Serverless-2016-10-31", | |
"Resources": { | |
"RestAPI": { | |
"Type": "AWS::Serverless::Api", | |
"Properties": { | |
"DefinitionBody": { | |
"info": { | |
"version": "1.0", | |
"title": "sam-compare" | |
}, | |
"paths": { | |
"/": { | |
"get": { | |
"responses": { | |
"200": { | |
"description": "200 response", | |
"schema": { | |
"$ref": "#/definitions/Empty" | |
} | |
} | |
}, | |
"security": [ | |
{ | |
"myauth": [] | |
} | |
], | |
"x-amazon-apigateway-integration": { | |
"contentHandling": "CONVERT_TO_TEXT", | |
"responses": { | |
"default": { | |
"statusCode": "200" | |
} | |
}, | |
"uri": { | |
"Fn::Sub": "arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${APIHandler.Arn}/invocations" | |
}, | |
"httpMethod": "POST", | |
"passthroughBehavior": "when_no_match", | |
"type": "aws_proxy" | |
}, | |
"consumes": [ | |
"application/json" | |
], | |
"produces": [ | |
"application/json" | |
] | |
} | |
} | |
}, | |
"schemes": [ | |
"https" | |
], | |
"securityDefinitions": { | |
"myauth": { | |
"x-amazon-apigateway-authtype": "custom", | |
"type": "apiKey", | |
"name": "Authorization", | |
"x-amazon-apigateway-authorizer": { | |
"authorizerUri": { | |
"Fn::Sub": "arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${myauthdb6d.Arn}/invocations" | |
}, | |
"type": "token" | |
}, | |
"in": "header" | |
} | |
}, | |
"x-amazon-apigateway-binary-media-types": [ | |
"application/octet-stream", | |
"application/x-tar", | |
"application/zip", | |
"audio/basic", | |
"audio/ogg", | |
"audio/mp4", | |
"audio/mpeg", | |
"audio/wav", | |
"audio/webm", | |
"image/png", | |
"image/jpg", | |
"image/gif", | |
"video/ogg", | |
"video/mpeg", | |
"video/webm" | |
], | |
"definitions": { | |
"Empty": { | |
"type": "object", | |
"title": "Empty Schema" | |
} | |
}, | |
"swagger": "2.0" | |
}, | |
"StageName": "api" | |
} | |
}, | |
"myauthdb6d": { | |
"Type": "AWS::Serverless::Function", | |
"Properties": { | |
"Policies": [ | |
{ | |
"Version": "2012-10-17", | |
"Statement": [ | |
{ | |
"Action": [ | |
"logs:CreateLogGroup", | |
"logs:CreateLogStream", | |
"logs:PutLogEvents" | |
], | |
"Resource": "arn:aws:logs:*:*:*", | |
"Effect": "Allow" | |
} | |
] | |
} | |
], | |
"Tags": { | |
"aws-chalice": "version=1.1.1:stage=dev:app=sam-compare" | |
}, | |
"MemorySize": 128, | |
"Handler": "app.myauth", | |
"Timeout": 60, | |
"CodeUri": "./deployment.zip", | |
"Runtime": "python2.7", | |
"Events": {} | |
} | |
}, | |
"APIHandler": { | |
"Type": "AWS::Serverless::Function", | |
"Properties": { | |
"Policies": [ | |
{ | |
"Version": "2012-10-17", | |
"Statement": [ | |
{ | |
"Action": [ | |
"logs:CreateLogGroup", | |
"logs:CreateLogStream", | |
"logs:PutLogEvents" | |
], | |
"Resource": "arn:aws:logs:*:*:*", | |
"Effect": "Allow" | |
} | |
] | |
} | |
], | |
"Tags": { | |
"aws-chalice": "version=1.1.1:stage=dev:app=sam-compare" | |
}, | |
"MemorySize": 128, | |
"Handler": "app.app", | |
"Timeout": 60, | |
"CodeUri": "./deployment.zip", | |
"Runtime": "python2.7", | |
"Events": { | |
"indexget6bb1": { | |
"Type": "Api", | |
"Properties": { | |
"Path": "/", | |
"RestApiId": { | |
"Ref": "RestAPI" | |
}, | |
"Method": "get" | |
} | |
} | |
} | |
} | |
}, | |
"myauthdb6dInvokePermission": { | |
"Type": "AWS::Lambda::Permission", | |
"Properties": { | |
"Action": "lambda:InvokeFunction", | |
"FunctionName": { | |
"Fn::GetAtt": [ | |
"myauthdb6d", | |
"Arn" | |
] | |
}, | |
"Principal": "apigateway.amazonaws.com" | |
} | |
} | |
} | |
} | |
The new package command gives: | |
{ | |
"AWSTemplateFormatVersion": "2010-09-09", | |
"Outputs": { | |
"APIHandlerArn": { | |
"Value": { | |
"Fn::GetAtt": [ | |
"APIHandler", | |
"Arn" | |
] | |
} | |
}, | |
"APIHandlerName": { | |
"Value": { | |
"Ref": "APIHandler" | |
} | |
}, | |
"RestAPIId": { | |
"Value": { | |
"Ref": "RestAPI" | |
} | |
}, | |
"EndpointURL": { | |
"Value": { | |
"Fn::Sub": "https://${RestAPI}.execute-api.${AWS::Region}.amazonaws.com/api/" | |
} | |
} | |
}, | |
"Transform": "AWS::Serverless-2016-10-31", | |
"Resources": { | |
"myauthdb6dInvokePermission": { | |
"Type": "AWS::Lambda::Permission", | |
"Properties": { | |
"Action": "lambda:InvokeFunction", | |
"FunctionName": { | |
"Fn::GetAtt": [ | |
"myauthdb6d", | |
"Arn" | |
] | |
}, | |
"SourceArn": { | |
"Fn::Sub": [ | |
"arn:aws:execute-api:${AWS::Region}:${AWS::AccountId}:${RestAPIId}/*", | |
{ | |
"RestAPIId": { | |
"Ref": "RestAPI" | |
} | |
} | |
] | |
}, | |
"Principal": "apigateway.amazonaws.com" | |
} | |
}, | |
"RestAPI": { | |
"Type": "AWS::Serverless::Api", | |
"Properties": { | |
"DefinitionBody": { | |
"info": { | |
"version": "1.0", | |
"title": "sam-compare" | |
}, | |
"paths": { | |
"/": { | |
"get": { | |
"responses": { | |
"200": { | |
"description": "200 response", | |
"schema": { | |
"$ref": "#/definitions/Empty" | |
} | |
} | |
}, | |
"security": [ | |
{ | |
"myauth": [] | |
} | |
], | |
"x-amazon-apigateway-integration": { | |
"contentHandling": "CONVERT_TO_TEXT", | |
"responses": { | |
"default": { | |
"statusCode": "200" | |
} | |
}, | |
"uri": { | |
"Fn::Sub": "arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${APIHandler.Arn}/invocations" | |
}, | |
"httpMethod": "POST", | |
"passthroughBehavior": "when_no_match", | |
"type": "aws_proxy" | |
}, | |
"consumes": [ | |
"application/json" | |
], | |
"produces": [ | |
"application/json" | |
] | |
} | |
} | |
}, | |
"schemes": [ | |
"https" | |
], | |
"securityDefinitions": { | |
"myauth": { | |
"x-amazon-apigateway-authtype": "custom", | |
"type": "apiKey", | |
"name": "Authorization", | |
"x-amazon-apigateway-authorizer": { | |
"authorizerUri": { | |
"Fn::Sub": "arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${myauthdb6d.Arn}/invocations" | |
}, | |
"type": "token" | |
}, | |
"in": "header" | |
} | |
}, | |
"x-amazon-apigateway-binary-media-types": [ | |
"application/octet-stream", | |
"application/x-tar", | |
"application/zip", | |
"audio/basic", | |
"audio/ogg", | |
"audio/mp4", | |
"audio/mpeg", | |
"audio/wav", | |
"audio/webm", | |
"image/png", | |
"image/jpg", | |
"image/jpeg", | |
"image/gif", | |
"video/ogg", | |
"video/mpeg", | |
"video/webm" | |
], | |
"definitions": { | |
"Empty": { | |
"type": "object", | |
"title": "Empty Schema" | |
} | |
}, | |
"swagger": "2.0" | |
}, | |
"StageName": "api" | |
} | |
}, | |
"APIHandler": { | |
"Type": "AWS::Serverless::Function", | |
"Properties": { | |
"Policies": { | |
"Version": "2012-10-17", | |
"Statement": [ | |
{ | |
"Action": [ | |
"logs:CreateLogGroup", | |
"logs:CreateLogStream", | |
"logs:PutLogEvents" | |
], | |
"Resource": "arn:aws:logs:*:*:*", | |
"Effect": "Allow" | |
} | |
] | |
}, | |
"Tags": { | |
"aws-chalice": "version=1.1.1:stage=dev:app=sam-compare" | |
}, | |
"MemorySize": 128, | |
"Handler": "app.app", | |
"Timeout": 60, | |
"CodeUri": "./deployment.zip", | |
"Runtime": "python2.7" | |
} | |
}, | |
"myauthdb6d": { | |
"Type": "AWS::Serverless::Function", | |
"Properties": { | |
"Policies": { | |
"Version": "2012-10-17", | |
"Statement": [ | |
{ | |
"Action": [ | |
"logs:CreateLogGroup", | |
"logs:CreateLogStream", | |
"logs:PutLogEvents" | |
], | |
"Resource": "arn:aws:logs:*:*:*", | |
"Effect": "Allow" | |
} | |
] | |
}, | |
"Tags": { | |
"aws-chalice": "version=1.1.1:stage=dev:app=sam-compare" | |
}, | |
"MemorySize": 128, | |
"Handler": "app.myauth", | |
"Timeout": 60, | |
"CodeUri": "./deployment.zip", | |
"Runtime": "python2.7" | |
} | |
}, | |
"APIHandlerInvokePermission": { | |
"Type": "AWS::Lambda::Permission", | |
"Properties": { | |
"Action": "lambda:InvokeFunction", | |
"FunctionName": { | |
"Ref": "APIHandler" | |
}, | |
"SourceArn": { | |
"Fn::Sub": [ | |
"arn:aws:execute-api:${AWS::Region}:${AWS::AccountId}:${RestAPIId}/*", | |
{ | |
"RestAPIId": { | |
"Ref": "RestAPI" | |
} | |
} | |
] | |
}, | |
"Principal": "apigateway.amazonaws.com" | |
} | |
}, | |
"cron9d3b": { | |
"Type": "AWS::Serverless::Function", | |
"Properties": { | |
"Policies": { | |
"Version": "2012-10-17", | |
"Statement": [ | |
{ | |
"Action": [ | |
"logs:CreateLogGroup", | |
"logs:CreateLogStream", | |
"logs:PutLogEvents" | |
], | |
"Resource": "arn:aws:logs:*:*:*", | |
"Effect": "Allow" | |
} | |
] | |
}, | |
"Tags": { | |
"aws-chalice": "version=1.1.1:stage=dev:app=sam-compare" | |
}, | |
"MemorySize": 128, | |
"Handler": "app.cron", | |
"Timeout": 60, | |
"CodeUri": "./deployment.zip", | |
"Runtime": "python2.7", | |
"Events": { | |
"cronevente2de": { | |
"Type": "Schedule", | |
"Properties": { | |
"Schedule": "rate(5 minutes)" | |
} | |
} | |
} | |
} | |
}, | |
"fooacbd": { | |
"Type": "AWS::Serverless::Function", | |
"Properties": { | |
"Policies": { | |
"Version": "2012-10-17", | |
"Statement": [ | |
{ | |
"Action": [ | |
"logs:CreateLogGroup", | |
"logs:CreateLogStream", | |
"logs:PutLogEvents" | |
], | |
"Resource": "arn:aws:logs:*:*:*", | |
"Effect": "Allow" | |
} | |
] | |
}, | |
"Tags": { | |
"aws-chalice": "version=1.1.1:stage=dev:app=sam-compare" | |
}, | |
"MemorySize": 128, | |
"Handler": "app.foo", | |
"Timeout": 60, | |
"CodeUri": "./deployment.zip", | |
"Runtime": "python2.7" | |
} | |
} | |
} | |
} | |
The json-diff is: | |
{ | |
Resources: { | |
+ APIHandlerInvokePermission: { | |
+ Type: "AWS::Lambda::Permission" | |
+ Properties: { | |
+ Action: "lambda:InvokeFunction" | |
+ FunctionName: { | |
+ Ref: "APIHandler" | |
+ } | |
+ SourceArn: { | |
+ Fn::Sub: [ | |
+ "arn:aws:execute-api:${AWS::Region}:${AWS::AccountId}:${RestAPIId}/*" | |
+ { | |
+ RestAPIId: { | |
+ Ref: "RestAPI" | |
+ } | |
+ } | |
+ ] | |
+ } | |
+ Principal: "apigateway.amazonaws.com" | |
+ } | |
+ } | |
+ cron9d3b: { | |
+ Type: "AWS::Serverless::Function" | |
+ Properties: { | |
+ Policies: { | |
+ Version: "2012-10-17" | |
+ Statement: [ | |
+ { | |
+ Action: [ | |
+ "logs:CreateLogGroup" | |
+ "logs:CreateLogStream" | |
+ "logs:PutLogEvents" | |
+ ] | |
+ Resource: "arn:aws:logs:*:*:*" | |
+ Effect: "Allow" | |
+ } | |
+ ] | |
+ } | |
+ Tags: { | |
+ aws-chalice: "version=1.1.1:stage=dev:app=sam-compare" | |
+ } | |
+ MemorySize: 128 | |
+ Handler: "app.cron" | |
+ Timeout: 60 | |
+ CodeUri: "./deployment.zip" | |
+ Runtime: "python2.7" | |
+ Events: { | |
+ cronevente2de: { | |
+ Type: "Schedule" | |
+ Properties: { | |
+ Schedule: "rate(5 minutes)" | |
+ } | |
+ } | |
+ } | |
+ } | |
+ } | |
+ fooacbd: { | |
+ Type: "AWS::Serverless::Function" | |
+ Properties: { | |
+ Policies: { | |
+ Version: "2012-10-17" | |
+ Statement: [ | |
+ { | |
+ Action: [ | |
+ "logs:CreateLogGroup" | |
+ "logs:CreateLogStream" | |
+ "logs:PutLogEvents" | |
+ ] | |
+ Resource: "arn:aws:logs:*:*:*" | |
+ Effect: "Allow" | |
+ } | |
+ ] | |
+ } | |
+ Tags: { | |
+ aws-chalice: "version=1.1.1:stage=dev:app=sam-compare" | |
+ } | |
+ MemorySize: 128 | |
+ Handler: "app.foo" | |
+ Timeout: 60 | |
+ CodeUri: "./deployment.zip" | |
+ Runtime: "python2.7" | |
+ } | |
+ } | |
RestAPI: { | |
Properties: { | |
DefinitionBody: { | |
x-amazon-apigateway-binary-media-types: [ | |
"application/octet-stream" | |
"application/x-tar" | |
"application/zip" | |
"audio/basic" | |
"audio/ogg" | |
"audio/mp4" | |
"audio/mpeg" | |
"audio/wav" | |
"audio/webm" | |
"image/png" | |
"image/jpg" | |
+ "image/jpeg" | |
"image/gif" | |
"video/ogg" | |
"video/mpeg" | |
"video/webm" | |
] | |
} | |
} | |
} | |
myauthdb6d: { | |
Properties: { | |
- Events: { | |
- } | |
- Policies: [ | |
- { | |
- Version: "2012-10-17" | |
- Statement: [ | |
- { | |
- Action: [ | |
- "logs:CreateLogGroup" | |
- "logs:CreateLogStream" | |
- "logs:PutLogEvents" | |
- ] | |
- Resource: "arn:aws:logs:*:*:*" | |
- Effect: "Allow" | |
- } | |
- ] | |
- } | |
- ] | |
+ Policies: { | |
+ Version: "2012-10-17" | |
+ Statement: [ | |
+ { | |
+ Action: [ | |
+ "logs:CreateLogGroup" | |
+ "logs:CreateLogStream" | |
+ "logs:PutLogEvents" | |
+ ] | |
+ Resource: "arn:aws:logs:*:*:*" | |
+ Effect: "Allow" | |
+ } | |
+ ] | |
+ } | |
} | |
} | |
APIHandler: { | |
Properties: { | |
- Events: { | |
- indexget6bb1: { | |
- Type: "Api" | |
- Properties: { | |
- Path: "/" | |
- RestApiId: { | |
- Ref: "RestAPI" | |
- } | |
- Method: "get" | |
- } | |
- } | |
- } | |
- Policies: [ | |
- { | |
- Version: "2012-10-17" | |
- Statement: [ | |
- { | |
- Action: [ | |
- "logs:CreateLogGroup" | |
- "logs:CreateLogStream" | |
- "logs:PutLogEvents" | |
- ] | |
- Resource: "arn:aws:logs:*:*:*" | |
- Effect: "Allow" | |
- } | |
- ] | |
- } | |
- ] | |
+ Policies: { | |
+ Version: "2012-10-17" | |
+ Statement: [ | |
+ { | |
+ Action: [ | |
+ "logs:CreateLogGroup" | |
+ "logs:CreateLogStream" | |
+ "logs:PutLogEvents" | |
+ ] | |
+ Resource: "arn:aws:logs:*:*:*" | |
+ Effect: "Allow" | |
+ } | |
+ ] | |
+ } | |
} | |
} | |
myauthdb6dInvokePermission: { | |
Properties: { | |
+ SourceArn: { | |
+ Fn::Sub: [ | |
+ "arn:aws:execute-api:${AWS::Region}:${AWS::AccountId}:${RestAPIId}/*" | |
+ { | |
+ RestAPIId: { | |
+ Ref: "RestAPI" | |
+ } | |
+ } | |
+ ] | |
+ } | |
} | |
} | |
} | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment