UNPKG

serverless-blue-green-deployments

Version:

A Serverless plugin to implement blue/green deployment of Lambda functions

321 lines (320 loc) 9.29 kB
{ "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" } } } }