Created
July 13, 2020 17:11
-
-
Save brianleroux/0df54b01602303578100745b6df7a87d 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
{ | |
"AWSTemplateFormatVersion": "2010-09-09", | |
"Transform": "AWS::Serverless-2016-10-31", | |
"Description": "Exported by architect/package@2.0.0-RC.0 on 2020-07-13T17:10:57.465Z", | |
"Resources": { | |
"HTTP": { | |
"Type": "AWS::Serverless::HttpApi", | |
"Properties": { | |
"StageName": "$default", | |
"DefinitionBody": { | |
"openapi": "3.0.1", | |
"info": { | |
"title": { | |
"Ref": "AWS::StackName" | |
} | |
}, | |
"paths": { | |
"/": { | |
"get": { | |
"x-amazon-apigateway-integration": { | |
"payloadFormatVersion": "2.0", | |
"type": "aws_proxy", | |
"httpMethod": "POST", | |
"uri": { | |
"Fn::Sub": "arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${GetIndex.Arn}/invocations" | |
}, | |
"connectionType": "INTERNET" | |
} | |
} | |
}, | |
"/login": { | |
"get": { | |
"x-amazon-apigateway-integration": { | |
"payloadFormatVersion": "2.0", | |
"type": "aws_proxy", | |
"httpMethod": "POST", | |
"uri": { | |
"Fn::Sub": "arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${GetLogin.Arn}/invocations" | |
}, | |
"connectionType": "INTERNET" | |
} | |
} | |
}, | |
"/$default": { | |
"x-amazon-apigateway-any-method": { | |
"isDefaultRoute": true, | |
"x-amazon-apigateway-integration": { | |
"payloadFormatVersion": "2.0", | |
"type": "aws_proxy", | |
"httpMethod": "POST", | |
"uri": { | |
"Fn::Sub": "arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${GetIndex.Arn}/invocations" | |
}, | |
"connectionType": "INTERNET" | |
} | |
} | |
}, | |
"/_static/{proxy+}": { | |
"get": { | |
"x-amazon-apigateway-integration": { | |
"payloadFormatVersion": "1.0", | |
"type": "http_proxy", | |
"httpMethod": "GET", | |
"uri": { | |
"Fn::Sub": [ | |
"http://${bukkit}.s3.${AWS::Region}.amazonaws.com/{proxy}", | |
{ | |
"bukkit": { | |
"Ref": "StaticBucket" | |
} | |
} | |
] | |
}, | |
"connectionType": "INTERNET", | |
"timeoutInMillis": 30000, | |
"requestParameters": { | |
"integration.request.path.proxy": "method.request.path.proxy" | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
}, | |
"GetIndex": { | |
"Type": "AWS::Serverless::Function", | |
"Properties": { | |
"Handler": "index.handler", | |
"CodeUri": "./src/http/get-index", | |
"Runtime": "nodejs12.x", | |
"MemorySize": 1152, | |
"Timeout": 5, | |
"Environment": { | |
"Variables": { | |
"ARC_ROLE": { | |
"Ref": "Role" | |
}, | |
"ARC_CLOUDFORMATION": { | |
"Ref": "AWS::StackName" | |
}, | |
"ARC_APP_NAME": "ws-fun", | |
"ARC_HTTP": "aws_proxy", | |
"NODE_ENV": "staging", | |
"SESSION_TABLE_NAME": "jwe", | |
"ARC_WSS_URL": { | |
"Fn::Sub": [ | |
"wss://${WS}.execute-api.${AWS::Region}.amazonaws.com/staging", | |
{} | |
] | |
} | |
} | |
}, | |
"Role": { | |
"Fn::Sub": [ | |
"arn:aws:iam::${AWS::AccountId}:role/${roleName}", | |
{ | |
"roleName": { | |
"Ref": "Role" | |
} | |
} | |
] | |
}, | |
"Events": { | |
"GetIndexEvent": { | |
"Type": "HttpApi", | |
"Properties": { | |
"Path": "/", | |
"Method": "GET", | |
"ApiId": { | |
"Ref": "HTTP" | |
} | |
} | |
} | |
} | |
} | |
}, | |
"GetLogin": { | |
"Type": "AWS::Serverless::Function", | |
"Properties": { | |
"Handler": "index.handler", | |
"CodeUri": "./src/http/get-login", | |
"Runtime": "nodejs12.x", | |
"MemorySize": 1152, | |
"Timeout": 5, | |
"Environment": { | |
"Variables": { | |
"ARC_ROLE": { | |
"Ref": "Role" | |
}, | |
"ARC_CLOUDFORMATION": { | |
"Ref": "AWS::StackName" | |
}, | |
"ARC_APP_NAME": "ws-fun", | |
"ARC_HTTP": "aws_proxy", | |
"NODE_ENV": "staging", | |
"SESSION_TABLE_NAME": "jwe", | |
"ARC_WSS_URL": { | |
"Fn::Sub": [ | |
"wss://${WS}.execute-api.${AWS::Region}.amazonaws.com/staging", | |
{} | |
] | |
} | |
} | |
}, | |
"Role": { | |
"Fn::Sub": [ | |
"arn:aws:iam::${AWS::AccountId}:role/${roleName}", | |
{ | |
"roleName": { | |
"Ref": "Role" | |
} | |
} | |
] | |
}, | |
"Events": { | |
"GetLoginEvent": { | |
"Type": "HttpApi", | |
"Properties": { | |
"Path": "/login", | |
"Method": "GET", | |
"ApiId": { | |
"Ref": "HTTP" | |
} | |
} | |
} | |
} | |
} | |
}, | |
"InvokeDefaultPermission": { | |
"Type": "AWS::Lambda::Permission", | |
"Properties": { | |
"FunctionName": { | |
"Ref": "GetIndex" | |
}, | |
"Action": "lambda:InvokeFunction", | |
"Principal": "apigateway.amazonaws.com", | |
"SourceArn": { | |
"Fn::Sub": [ | |
"arn:aws:execute-api:${AWS::Region}:${AWS::AccountId}:${ApiId}/*/*", | |
{ | |
"ApiId": { | |
"Ref": "HTTP" | |
} | |
} | |
] | |
} | |
} | |
}, | |
"StaticBucket": { | |
"Type": "AWS::S3::Bucket", | |
"Properties": { | |
"AccessControl": "PublicRead", | |
"WebsiteConfiguration": { | |
"IndexDocument": "index.html", | |
"ErrorDocument": "404.html" | |
} | |
} | |
}, | |
"WS": { | |
"Type": "AWS::ApiGatewayV2::Api", | |
"Properties": { | |
"Name": "WsFunWebsocket", | |
"ProtocolType": "WEBSOCKET", | |
"RouteSelectionExpression": "$request.body.message" | |
} | |
}, | |
"WebsocketDeployment": { | |
"Type": "AWS::ApiGatewayV2::Deployment", | |
"DependsOn": [ | |
"WebsocketConnectRoute", | |
"WebsocketDefaultRoute", | |
"WebsocketDisconnectRoute" | |
], | |
"Properties": { | |
"ApiId": { | |
"Ref": "WS" | |
} | |
} | |
}, | |
"WebsocketStage": { | |
"Type": "AWS::ApiGatewayV2::Stage", | |
"Properties": { | |
"StageName": "staging", | |
"DeploymentId": { | |
"Ref": "WebsocketDeployment" | |
}, | |
"ApiId": { | |
"Ref": "WS" | |
} | |
} | |
}, | |
"WebSocketPolicy": { | |
"Type": "AWS::IAM::Policy", | |
"DependsOn": "Role", | |
"Properties": { | |
"PolicyName": "ArcWebSocketPolicy", | |
"PolicyDocument": { | |
"Statement": [ | |
{ | |
"Effect": "Allow", | |
"Action": [ | |
"execute-api:Invoke", | |
"execute-api:ManageConnections" | |
], | |
"Resource": [ | |
{ | |
"Fn::Sub": [ | |
"arn:aws:execute-api:${AWS::Region}:*:${api}/*", | |
{ | |
"api": { | |
"Ref": "WS" | |
} | |
} | |
] | |
} | |
] | |
} | |
] | |
}, | |
"Roles": [ | |
{ | |
"Ref": "Role" | |
} | |
] | |
} | |
}, | |
"WebsocketDefault": { | |
"Type": "AWS::Serverless::Function", | |
"Properties": { | |
"Handler": "index.handler", | |
"CodeUri": "./src/ws/default", | |
"Runtime": "nodejs12.x", | |
"MemorySize": 1152, | |
"Timeout": 5, | |
"Environment": { | |
"Variables": { | |
"ARC_ROLE": { | |
"Ref": "Role" | |
}, | |
"ARC_CLOUDFORMATION": { | |
"Ref": "AWS::StackName" | |
}, | |
"ARC_APP_NAME": "ws-fun", | |
"ARC_HTTP": "aws_proxy", | |
"NODE_ENV": "staging", | |
"SESSION_TABLE_NAME": "jwe", | |
"ARC_WSS_URL": { | |
"Fn::Sub": [ | |
"wss://${WS}.execute-api.${AWS::Region}.amazonaws.com/staging", | |
{} | |
] | |
} | |
} | |
}, | |
"Role": { | |
"Fn::Sub": [ | |
"arn:aws:iam::${AWS::AccountId}:role/${roleName}", | |
{ | |
"roleName": { | |
"Ref": "Role" | |
} | |
} | |
] | |
}, | |
"Events": {} | |
} | |
}, | |
"WebsocketDefaultRoute": { | |
"Type": "AWS::ApiGatewayV2::Route", | |
"Properties": { | |
"ApiId": { | |
"Ref": "WS" | |
}, | |
"RouteKey": "$default", | |
"OperationName": "WebsocketDefaultRoute", | |
"Target": { | |
"Fn::Join": [ | |
"/", | |
[ | |
"integrations", | |
{ | |
"Ref": "WebsocketDefaultIntegration" | |
} | |
] | |
] | |
} | |
} | |
}, | |
"WebsocketDefaultIntegration": { | |
"Type": "AWS::ApiGatewayV2::Integration", | |
"Properties": { | |
"ApiId": { | |
"Ref": "WS" | |
}, | |
"IntegrationType": "AWS_PROXY", | |
"IntegrationUri": { | |
"Fn::Sub": [ | |
"arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${WebsocketDefault.Arn}/invocations", | |
{} | |
] | |
} | |
} | |
}, | |
"WebsocketDefaultPermission": { | |
"Type": "AWS::Lambda::Permission", | |
"DependsOn": [ | |
"WS", | |
"WebsocketDefault" | |
], | |
"Properties": { | |
"Action": "lambda:InvokeFunction", | |
"FunctionName": { | |
"Ref": "WebsocketDefault" | |
}, | |
"Principal": "apigateway.amazonaws.com" | |
} | |
}, | |
"WebsocketConnect": { | |
"Type": "AWS::Serverless::Function", | |
"Properties": { | |
"Handler": "index.handler", | |
"CodeUri": "./src/ws/connect", | |
"Runtime": "nodejs12.x", | |
"MemorySize": 1152, | |
"Timeout": 5, | |
"Environment": { | |
"Variables": { | |
"ARC_ROLE": { | |
"Ref": "Role" | |
}, | |
"ARC_CLOUDFORMATION": { | |
"Ref": "AWS::StackName" | |
}, | |
"ARC_APP_NAME": "ws-fun", | |
"ARC_HTTP": "aws_proxy", | |
"NODE_ENV": "staging", | |
"SESSION_TABLE_NAME": "jwe", | |
"ARC_WSS_URL": { | |
"Fn::Sub": [ | |
"wss://${WS}.execute-api.${AWS::Region}.amazonaws.com/staging", | |
{} | |
] | |
} | |
} | |
}, | |
"Role": { | |
"Fn::Sub": [ | |
"arn:aws:iam::${AWS::AccountId}:role/${roleName}", | |
{ | |
"roleName": { | |
"Ref": "Role" | |
} | |
} | |
] | |
}, | |
"Events": {} | |
} | |
}, | |
"WebsocketConnectRoute": { | |
"Type": "AWS::ApiGatewayV2::Route", | |
"Properties": { | |
"ApiId": { | |
"Ref": "WS" | |
}, | |
"RouteKey": "$connect", | |
"OperationName": "WebsocketConnectRoute", | |
"Target": { | |
"Fn::Join": [ | |
"/", | |
[ | |
"integrations", | |
{ | |
"Ref": "WebsocketConnectIntegration" | |
} | |
] | |
] | |
} | |
} | |
}, | |
"WebsocketConnectIntegration": { | |
"Type": "AWS::ApiGatewayV2::Integration", | |
"Properties": { | |
"ApiId": { | |
"Ref": "WS" | |
}, | |
"IntegrationType": "AWS_PROXY", | |
"IntegrationUri": { | |
"Fn::Sub": [ | |
"arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${WebsocketConnect.Arn}/invocations", | |
{} | |
] | |
} | |
} | |
}, | |
"WebsocketConnectPermission": { | |
"Type": "AWS::Lambda::Permission", | |
"DependsOn": [ | |
"WS", | |
"WebsocketConnect" | |
], | |
"Properties": { | |
"Action": "lambda:InvokeFunction", | |
"FunctionName": { | |
"Ref": "WebsocketConnect" | |
}, | |
"Principal": "apigateway.amazonaws.com" | |
} | |
}, | |
"WebsocketDisconnect": { | |
"Type": "AWS::Serverless::Function", | |
"Properties": { | |
"Handler": "index.handler", | |
"CodeUri": "./src/ws/disconnect", | |
"Runtime": "nodejs12.x", | |
"MemorySize": 1152, | |
"Timeout": 5, | |
"Environment": { | |
"Variables": { | |
"ARC_ROLE": { | |
"Ref": "Role" | |
}, | |
"ARC_CLOUDFORMATION": { | |
"Ref": "AWS::StackName" | |
}, | |
"ARC_APP_NAME": "ws-fun", | |
"ARC_HTTP": "aws_proxy", | |
"NODE_ENV": "staging", | |
"SESSION_TABLE_NAME": "jwe", | |
"ARC_WSS_URL": { | |
"Fn::Sub": [ | |
"wss://${WS}.execute-api.${AWS::Region}.amazonaws.com/staging", | |
{} | |
] | |
} | |
} | |
}, | |
"Role": { | |
"Fn::Sub": [ | |
"arn:aws:iam::${AWS::AccountId}:role/${roleName}", | |
{ | |
"roleName": { | |
"Ref": "Role" | |
} | |
} | |
] | |
}, | |
"Events": {} | |
} | |
}, | |
"WebsocketDisconnectRoute": { | |
"Type": "AWS::ApiGatewayV2::Route", | |
"Properties": { | |
"ApiId": { | |
"Ref": "WS" | |
}, | |
"RouteKey": "$disconnect", | |
"OperationName": "WebsocketDisconnectRoute", | |
"Target": { | |
"Fn::Join": [ | |
"/", | |
[ | |
"integrations", | |
{ | |
"Ref": "WebsocketDisconnectIntegration" | |
} | |
] | |
] | |
} | |
} | |
}, | |
"WebsocketDisconnectIntegration": { | |
"Type": "AWS::ApiGatewayV2::Integration", | |
"Properties": { | |
"ApiId": { | |
"Ref": "WS" | |
}, | |
"IntegrationType": "AWS_PROXY", | |
"IntegrationUri": { | |
"Fn::Sub": [ | |
"arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${WebsocketDisconnect.Arn}/invocations", | |
{} | |
] | |
} | |
} | |
}, | |
"WebsocketDisconnectPermission": { | |
"Type": "AWS::Lambda::Permission", | |
"DependsOn": [ | |
"WS", | |
"WebsocketDisconnect" | |
], | |
"Properties": { | |
"Action": "lambda:InvokeFunction", | |
"FunctionName": { | |
"Ref": "WebsocketDisconnect" | |
}, | |
"Principal": "apigateway.amazonaws.com" | |
} | |
}, | |
"Role": { | |
"Type": "AWS::IAM::Role", | |
"Properties": { | |
"AssumeRolePolicyDocument": { | |
"Version": "2012-10-17", | |
"Statement": [ | |
{ | |
"Effect": "Allow", | |
"Principal": { | |
"Service": "lambda.amazonaws.com" | |
}, | |
"Action": "sts:AssumeRole" | |
} | |
] | |
}, | |
"Policies": [ | |
{ | |
"PolicyName": "ArcGlobalPolicy", | |
"PolicyDocument": { | |
"Statement": [ | |
{ | |
"Effect": "Allow", | |
"Action": [ | |
"logs:CreateLogGroup", | |
"logs:CreateLogStream", | |
"logs:PutLogEvents", | |
"logs:DescribeLogStreams" | |
], | |
"Resource": "arn:aws:logs:*:*:*" | |
} | |
] | |
} | |
} | |
] | |
} | |
} | |
}, | |
"Outputs": { | |
"API": { | |
"Description": "API Gateway (HTTP)", | |
"Value": { | |
"Fn::Sub": [ | |
"https://${ApiId}.execute-api.${AWS::Region}.amazonaws.com", | |
{ | |
"ApiId": { | |
"Ref": "HTTP" | |
} | |
} | |
] | |
} | |
}, | |
"ApiId": { | |
"Description": "API ID (ApiId)", | |
"Value": { | |
"Ref": "HTTP" | |
} | |
}, | |
"BucketURL": { | |
"Description": "Bucket URL", | |
"Value": { | |
"Fn::Sub": [ | |
"http://${bukkit}.s3-website-${AWS::Region}.amazonaws.com", | |
{ | |
"bukkit": { | |
"Ref": "StaticBucket" | |
} | |
} | |
] | |
} | |
}, | |
"WSS": { | |
"Description": "Websocket Endpoint", | |
"Value": { | |
"Fn::Sub": [ | |
"wss://${WS}.execute-api.${AWS::Region}.amazonaws.com/staging", | |
{} | |
] | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment