serverless-blue-green-deployments
Version:
A Serverless plugin to implement blue/green deployment of Lambda functions
321 lines (320 loc) • 9.29 kB
JSON
{
"AWSTemplateFormatVersion": "2010-09-09",
"Description": "The AWS CloudFormation template for this Serverless application",
"Resources": {
"ServerlessDeploymentBucket": {
"Type": "AWS::S3::Bucket",
"Properties": {
"BucketEncryption": {
"ServerSideEncryptionConfiguration": [
{
"ServerSideEncryptionByDefault": {
"SSEAlgorithm": "AES256"
}
}
]
}
}
},
"HelloLogGroup": {
"Type": "AWS::Logs::LogGroup",
"Properties": {
"LogGroupName": "/aws/lambda/canary-deployments-test-dev-hello"
}
},
"PreHookLogGroup": {
"Type": "AWS::Logs::LogGroup",
"Properties": {
"LogGroupName": "/aws/lambda/canary-deployments-test-dev-preHook"
}
},
"PostHookLogGroup": {
"Type": "AWS::Logs::LogGroup",
"Properties": {
"LogGroupName": "/aws/lambda/canary-deployments-test-dev-postHook"
}
},
"IamRoleLambdaExecution": {
"Type": "AWS::IAM::Role",
"Properties": {
"AssumeRolePolicyDocument": {
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": [
"lambda.amazonaws.com"
]
},
"Action": [
"sts:AssumeRole"
]
}
]
},
"Policies": [
{
"PolicyName": {
"Fn::Join": [
"-",
[
"dev",
"canary-deployments-test",
"lambda"
]
]
},
"PolicyDocument": {
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogStream"
],
"Resource": [
{
"Fn::Sub": "arn:${AWS::Partition}:logs:${AWS::Region}:${AWS::AccountId}:log-group:/aws/lambda/canary-deployments-test-dev-hello:*"
},
{
"Fn::Sub": "arn:${AWS::Partition}:logs:${AWS::Region}:${AWS::AccountId}:log-group:/aws/lambda/canary-deployments-test-dev-preHook:*"
},
{
"Fn::Sub": "arn:${AWS::Partition}:logs:${AWS::Region}:${AWS::AccountId}:log-group:/aws/lambda/canary-deployments-test-dev-postHook:*"
}
]
},
{
"Effect": "Allow",
"Action": [
"logs:PutLogEvents"
],
"Resource": [
{
"Fn::Sub": "arn:${AWS::Partition}:logs:${AWS::Region}:${AWS::AccountId}:log-group:/aws/lambda/canary-deployments-test-dev-hello:*:*"
},
{
"Fn::Sub": "arn:${AWS::Partition}:logs:${AWS::Region}:${AWS::AccountId}:log-group:/aws/lambda/canary-deployments-test-dev-preHook:*:*"
},
{
"Fn::Sub": "arn:${AWS::Partition}:logs:${AWS::Region}:${AWS::AccountId}:log-group:/aws/lambda/canary-deployments-test-dev-postHook:*:*"
}
]
}
]
}
}
],
"Path": "/",
"RoleName": {
"Fn::Join": [
"-",
[
"canary-deployments-test",
"dev",
"us-east-1",
"lambdaRole"
]
]
}
}
},
"HelloLambdaFunction": {
"Type": "AWS::Lambda::Function",
"Properties": {
"Code": {
"S3Bucket": {
"Ref": "ServerlessDeploymentBucket"
},
"S3Key": "serverless/canary-deployments-test/dev/1550927841927-2019-02-23T13:17:21.927Z/canary-deployments-test.zip"
},
"FunctionName": "canary-deployments-test-dev-hello",
"Handler": "handler.hello",
"MemorySize": 1024,
"Role": {
"Fn::GetAtt": [
"IamRoleLambdaExecution",
"Arn"
]
},
"Runtime": "nodejs8.10",
"Timeout": 6
},
"DependsOn": [
"HelloLogGroup",
"IamRoleLambdaExecution"
]
},
"HelloLambdaVersionMwNCsJwWnwLr3vwZo7TtZnQrZsYvag7NndnrR08gsg4": {
"Type": "AWS::Lambda::Version",
"DeletionPolicy": "Retain",
"Properties": {
"FunctionName": {
"Ref": "HelloLambdaFunction"
},
"CodeSha256": "XtWKORZF2hs0Jjyk4UU3N/U6Ei9oXItrWqS2mt7xNNo="
}
},
"PreHookLambdaFunction": {
"Type": "AWS::Lambda::Function",
"Properties": {
"Code": {
"S3Bucket": {
"Ref": "ServerlessDeploymentBucket"
},
"S3Key": "serverless/canary-deployments-test/dev/1550927841927-2019-02-23T13:17:21.927Z/canary-deployments-test.zip"
},
"FunctionName": "canary-deployments-test-dev-preHook",
"Handler": "hooks.pre",
"MemorySize": 1024,
"Role": {
"Fn::GetAtt": [
"IamRoleLambdaExecution",
"Arn"
]
},
"Runtime": "nodejs8.10",
"Timeout": 6
},
"DependsOn": [
"PreHookLogGroup",
"IamRoleLambdaExecution"
]
},
"PreHookLambdaVersion5GZnQjk5TQOhq0f8fyYUTRTw3C8MRmBpzX5gSKhhI": {
"Type": "AWS::Lambda::Version",
"DeletionPolicy": "Retain",
"Properties": {
"FunctionName": {
"Ref": "PreHookLambdaFunction"
},
"CodeSha256": "XtWKORZF2hs0Jjyk4UU3N/U6Ei9oXItrWqS2mt7xNNo="
}
},
"PostHookLambdaFunction": {
"Type": "AWS::Lambda::Function",
"Properties": {
"Code": {
"S3Bucket": {
"Ref": "ServerlessDeploymentBucket"
},
"S3Key": "serverless/canary-deployments-test/dev/1550927841927-2019-02-23T13:17:21.927Z/canary-deployments-test.zip"
},
"FunctionName": "canary-deployments-test-dev-postHook",
"Handler": "hooks.post",
"MemorySize": 1024,
"Role": {
"Fn::GetAtt": [
"IamRoleLambdaExecution",
"Arn"
]
},
"Runtime": "nodejs8.10",
"Timeout": 6
},
"DependsOn": [
"PostHookLogGroup",
"IamRoleLambdaExecution"
]
},
"PostHookLambdaVersionfvDGD9WGBEcYG2uYlcZEM9mFKKVBm5zX5sTHISsmIw": {
"Type": "AWS::Lambda::Version",
"DeletionPolicy": "Retain",
"Properties": {
"FunctionName": {
"Ref": "PostHookLambdaFunction"
},
"CodeSha256": "XtWKORZF2hs0Jjyk4UU3N/U6Ei9oXItrWqS2mt7xNNo="
}
},
"HelloLogsSubscriptionFilterCloudWatchLog1": {
"Type": "AWS::Logs::SubscriptionFilter",
"DependsOn": "HelloLambdaPermissionLogsSubscriptionFilterCloudWatchLog",
"Properties": {
"LogGroupName": "/aws/lambda/hello",
"FilterPattern": "",
"DestinationArn": {
"Fn::GetAtt": [
"HelloLambdaFunction",
"Arn"
]
}
}
},
"HelloLambdaPermissionLogsSubscriptionFilterCloudWatchLog": {
"Type": "AWS::Lambda::Permission",
"Properties": {
"FunctionName": {
"Fn::GetAtt": [
"HelloLambdaFunction",
"Arn"
]
},
"Action": "lambda:InvokeFunction",
"Principal": {
"Fn::Join": [
"",
[
"logs.",
{
"Ref": "AWS::Region"
},
".",
{
"Ref": "AWS::URLSuffix"
}
]
]
},
"SourceArn": {
"Fn::Join": [
"",
[
"arn:",
{
"Ref": "AWS::Partition"
},
":logs:",
{
"Ref": "AWS::Region"
},
":",
{
"Ref": "AWS::AccountId"
},
":log-group:",
"/aws/lambda/hello",
":*"
]
]
}
}
}
},
"Outputs": {
"ServerlessDeploymentBucketName": {
"Value": {
"Ref": "ServerlessDeploymentBucket"
}
},
"HelloLambdaFunctionQualifiedArn": {
"Description": "Current Lambda function version",
"Value": {
"Ref": "HelloLambdaVersionMwNCsJwWnwLr3vwZo7TtZnQrZsYvag7NndnrR08gsg4"
}
},
"PreHookLambdaFunctionQualifiedArn": {
"Description": "Current Lambda function version",
"Value": {
"Ref": "PreHookLambdaVersion5GZnQjk5TQOhq0f8fyYUTRTw3C8MRmBpzX5gSKhhI"
}
},
"PostHookLambdaFunctionQualifiedArn": {
"Description": "Current Lambda function version",
"Value": {
"Ref": "PostHookLambdaVersionfvDGD9WGBEcYG2uYlcZEM9mFKKVBm5zX5sTHISsmIw"
}
}
}
}