Created
March 13, 2024 16:59
-
-
Save brianleroux/8629c5190826b3d64807afc152179c44 to your computer and use it in GitHub Desktop.
This file contains hidden or 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/[email protected] on 2024-03-13T16:59:13.480Z", | |
"Resources": { | |
"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:*:*:*" | |
} | |
] | |
} | |
}, | |
{ | |
"PolicyName": "ArcStaticBucketPolicy", | |
"PolicyDocument": { | |
"Statement": [ | |
{ | |
"Effect": "Allow", | |
"Action": [ | |
"s3:GetObject", | |
"s3:PutObject", | |
"s3:PutObjectAcl", | |
"s3:DeleteObject", | |
"s3:ListBucket" | |
], | |
"Resource": [ | |
{ | |
"Fn::Sub": [ | |
"arn:aws:s3:::${bukkit}", | |
{ | |
"bukkit": { | |
"Ref": "StaticBucket" | |
} | |
} | |
] | |
}, | |
{ | |
"Fn::Sub": [ | |
"arn:aws:s3:::${bukkit}/*", | |
{ | |
"bukkit": { | |
"Ref": "StaticBucket" | |
} | |
} | |
] | |
} | |
] | |
} | |
] | |
} | |
}, | |
{ | |
"PolicyName": "ArcSimpleNotificationServicePolicy", | |
"PolicyDocument": { | |
"Statement": [ | |
{ | |
"Effect": "Allow", | |
"Action": [ | |
"sns:Publish" | |
], | |
"Resource": { | |
"Fn::Sub": [ | |
"arn:aws:sns:${AWS::Region}:${AWS::AccountId}:${AWS::StackName}*", | |
{} | |
] | |
} | |
} | |
] | |
} | |
}, | |
{ | |
"PolicyName": "ArcSimpleQueueServicePolicy", | |
"PolicyDocument": { | |
"Statement": [ | |
{ | |
"Effect": "Allow", | |
"Action": [ | |
"sqs:SendMessageBatch", | |
"sqs:SendMessage", | |
"sqs:ReceiveMessage", | |
"sqs:DeleteMessage", | |
"sqs:GetQueueAttributes" | |
], | |
"Resource": "*" | |
} | |
] | |
} | |
} | |
] | |
} | |
}, | |
"EEventTopicParam": { | |
"Type": "AWS::SSM::Parameter", | |
"Properties": { | |
"Type": "String", | |
"Name": { | |
"Fn::Sub": [ | |
"/${AWS::StackName}/events/${event}", | |
{ | |
"event": "e" | |
} | |
] | |
}, | |
"Value": { | |
"Ref": "EEventTopic" | |
} | |
} | |
}, | |
"QQueueParam": { | |
"Type": "AWS::SSM::Parameter", | |
"Properties": { | |
"Type": "String", | |
"Name": { | |
"Fn::Sub": [ | |
"/${AWS::StackName}/queues/${queue}", | |
{ | |
"queue": "q" | |
} | |
] | |
}, | |
"Value": { | |
"Ref": "QQueue" | |
} | |
} | |
}, | |
"StaticBucketParam": { | |
"Type": "AWS::SSM::Parameter", | |
"Properties": { | |
"Type": "String", | |
"Name": { | |
"Fn::Sub": [ | |
"/${AWS::StackName}/static/${key}", | |
{ | |
"key": "bucket" | |
} | |
] | |
}, | |
"Value": { | |
"Ref": "StaticBucket" | |
} | |
} | |
}, | |
"StaticFingerprintParam": { | |
"Type": "AWS::SSM::Parameter", | |
"Properties": { | |
"Type": "String", | |
"Name": { | |
"Fn::Sub": [ | |
"/${AWS::StackName}/static/${key}", | |
{ | |
"key": "fingerprint" | |
} | |
] | |
}, | |
"Value": "false" | |
} | |
}, | |
"ParameterStorePolicy": { | |
"Type": "AWS::IAM::Policy", | |
"DependsOn": "Role", | |
"Properties": { | |
"PolicyName": "ArcParameterStorePolicy", | |
"PolicyDocument": { | |
"Statement": [ | |
{ | |
"Effect": "Allow", | |
"Action": [ | |
"ssm:GetParametersByPath", | |
"ssm:GetParameter" | |
], | |
"Resource": { | |
"Fn::Sub": [ | |
"arn:aws:ssm:${AWS::Region}:${AWS::AccountId}:parameter/${AWS::StackName}", | |
{} | |
] | |
} | |
}, | |
{ | |
"Effect": "Allow", | |
"Action": [ | |
"ssm:GetParametersByPath", | |
"ssm:GetParameter" | |
], | |
"Resource": { | |
"Fn::Sub": [ | |
"arn:aws:ssm:${AWS::Region}:${AWS::AccountId}:parameter/${AWS::StackName}/*", | |
{} | |
] | |
} | |
}, | |
{ | |
"Effect": "Allow", | |
"Action": [ | |
"ssm:GetParametersByPath", | |
"ssm:GetParameter" | |
], | |
"Resource": { | |
"Fn::Sub": [ | |
"arn:aws:ssm:${AWS::Region}:${AWS::AccountId}:parameter/${AWS::StackName}/*/*", | |
{} | |
] | |
} | |
} | |
] | |
}, | |
"Roles": [ | |
{ | |
"Ref": "Role" | |
} | |
] | |
} | |
}, | |
"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/${GetIndexHTTPLambda.Arn}/invocations" | |
}, | |
"connectionType": "INTERNET" | |
} | |
} | |
}, | |
"/_static/{proxy+}": { | |
"get": { | |
"x-amazon-apigateway-integration": { | |
"payloadFormatVersion": "1.0", | |
"type": "http_proxy", | |
"httpMethod": "GET", | |
"uri": { | |
"Fn::Sub": [ | |
"https://${bukkit}.s3.${AWS::Region}.amazonaws.com/{proxy}", | |
{ | |
"bukkit": { | |
"Ref": "StaticBucket" | |
} | |
} | |
] | |
}, | |
"connectionType": "INTERNET", | |
"timeoutInMillis": 30000 | |
} | |
} | |
} | |
} | |
} | |
} | |
}, | |
"GetIndexHTTPLambda": { | |
"Type": "AWS::Serverless::Function", | |
"Properties": { | |
"Handler": "index.handler", | |
"CodeUri": "/Users/brian/Desktop/foobar/src/http/get-index", | |
"Runtime": "nodejs20.x", | |
"Architectures": [ | |
"arm64" | |
], | |
"MemorySize": 1152, | |
"EphemeralStorage": { | |
"Size": 512 | |
}, | |
"Timeout": 5, | |
"Environment": { | |
"Variables": { | |
"ARC_APP_NAME": "foobar", | |
"ARC_ENV": "staging", | |
"ARC_ROLE": { | |
"Ref": "Role" | |
}, | |
"ARC_SESSION_TABLE_NAME": "jwe", | |
"ARC_STACK_NAME": { | |
"Ref": "AWS::StackName" | |
}, | |
"ARC_STATIC_BUCKET": { | |
"Ref": "StaticBucket" | |
}, | |
"ARC_WSS_URL": { | |
"Fn::Sub": [ | |
"wss://${WS}.execute-api.${AWS::Region}.amazonaws.com/staging", | |
{} | |
] | |
}, | |
"ARC_STATIC_SPA": false | |
} | |
}, | |
"Role": { | |
"Fn::Sub": [ | |
"arn:aws:iam::${AWS::AccountId}:role/${roleName}", | |
{ | |
"roleName": { | |
"Ref": "Role" | |
} | |
} | |
] | |
}, | |
"Events": { | |
"GetIndexHTTPEvent": { | |
"Type": "HttpApi", | |
"Properties": { | |
"Path": "/", | |
"Method": "GET", | |
"ApiId": { | |
"Ref": "HTTP" | |
} | |
} | |
} | |
} | |
}, | |
"ArcMetadata": { | |
"pragma": "http", | |
"name": "get /", | |
"method": "get", | |
"path": "/" | |
} | |
}, | |
"EEventLambda": { | |
"Type": "AWS::Serverless::Function", | |
"Properties": { | |
"Handler": "index.handler", | |
"CodeUri": "/Users/brian/Desktop/foobar/src/events/e", | |
"Runtime": "nodejs20.x", | |
"Architectures": [ | |
"arm64" | |
], | |
"MemorySize": 1152, | |
"EphemeralStorage": { | |
"Size": 512 | |
}, | |
"Timeout": 5, | |
"Environment": { | |
"Variables": { | |
"ARC_APP_NAME": "foobar", | |
"ARC_ENV": "staging", | |
"ARC_ROLE": { | |
"Ref": "Role" | |
}, | |
"ARC_SESSION_TABLE_NAME": "jwe", | |
"ARC_STACK_NAME": { | |
"Ref": "AWS::StackName" | |
}, | |
"ARC_STATIC_BUCKET": { | |
"Ref": "StaticBucket" | |
}, | |
"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": { | |
"EEvent": { | |
"Type": "SNS", | |
"Properties": { | |
"Topic": { | |
"Ref": "EEventTopic" | |
} | |
} | |
} | |
} | |
}, | |
"ArcMetadata": { | |
"pragma": "events", | |
"name": "e" | |
} | |
}, | |
"EEventTopic": { | |
"Type": "AWS::SNS::Topic", | |
"Properties": { | |
"DisplayName": "E", | |
"Subscription": [] | |
} | |
}, | |
"QQueueLambda": { | |
"Type": "AWS::Serverless::Function", | |
"Properties": { | |
"Handler": "index.handler", | |
"CodeUri": "/Users/brian/Desktop/foobar/src/queues/q", | |
"Runtime": "nodejs20.x", | |
"Architectures": [ | |
"arm64" | |
], | |
"MemorySize": 1152, | |
"EphemeralStorage": { | |
"Size": 512 | |
}, | |
"Timeout": 5, | |
"Environment": { | |
"Variables": { | |
"ARC_APP_NAME": "foobar", | |
"ARC_ENV": "staging", | |
"ARC_ROLE": { | |
"Ref": "Role" | |
}, | |
"ARC_SESSION_TABLE_NAME": "jwe", | |
"ARC_STACK_NAME": { | |
"Ref": "AWS::StackName" | |
}, | |
"ARC_STATIC_BUCKET": { | |
"Ref": "StaticBucket" | |
}, | |
"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": { | |
"QQueueEvent": { | |
"Type": "SQS", | |
"Properties": { | |
"Queue": { | |
"Fn::GetAtt": [ | |
"QQueue", | |
"Arn" | |
] | |
} | |
} | |
} | |
} | |
}, | |
"ArcMetadata": { | |
"pragma": "queues", | |
"name": "q" | |
} | |
}, | |
"QQueue": { | |
"Type": "AWS::SQS::Queue", | |
"Properties": { | |
"VisibilityTimeout": 5, | |
"FifoQueue": true, | |
"ContentBasedDeduplication": true | |
} | |
}, | |
"OnceScheduledLambda": { | |
"Type": "AWS::Serverless::Function", | |
"Properties": { | |
"Handler": "index.handler", | |
"CodeUri": "/Users/brian/Desktop/foobar/src/scheduled/once", | |
"Runtime": "nodejs20.x", | |
"Architectures": [ | |
"arm64" | |
], | |
"MemorySize": 1152, | |
"EphemeralStorage": { | |
"Size": 512 | |
}, | |
"Timeout": 5, | |
"Environment": { | |
"Variables": { | |
"ARC_APP_NAME": "foobar", | |
"ARC_ENV": "staging", | |
"ARC_ROLE": { | |
"Ref": "Role" | |
}, | |
"ARC_SESSION_TABLE_NAME": "jwe", | |
"ARC_STACK_NAME": { | |
"Ref": "AWS::StackName" | |
}, | |
"ARC_STATIC_BUCKET": { | |
"Ref": "StaticBucket" | |
}, | |
"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": {} | |
}, | |
"ArcMetadata": { | |
"pragma": "scheduled", | |
"name": "once" | |
} | |
}, | |
"OnceScheduledEvent": { | |
"Type": "AWS::Events::Rule", | |
"Properties": { | |
"ScheduleExpression": "rate(1 day)", | |
"Targets": [ | |
{ | |
"Arn": { | |
"Fn::GetAtt": [ | |
"OnceScheduledLambda", | |
"Arn" | |
] | |
}, | |
"Id": "OnceScheduledLambda" | |
} | |
] | |
} | |
}, | |
"OnceScheduledPermission": { | |
"Type": "AWS::Lambda::Permission", | |
"Properties": { | |
"Action": "lambda:InvokeFunction", | |
"FunctionName": { | |
"Ref": "OnceScheduledLambda" | |
}, | |
"Principal": "events.amazonaws.com", | |
"SourceArn": { | |
"Fn::GetAtt": [ | |
"OnceScheduledEvent", | |
"Arn" | |
] | |
} | |
} | |
}, | |
"StaticBucket": { | |
"Type": "AWS::S3::Bucket", | |
"Properties": { | |
"OwnershipControls": { | |
"Rules": [ | |
{ | |
"ObjectOwnership": "BucketOwnerEnforced" | |
} | |
] | |
}, | |
"WebsiteConfiguration": { | |
"IndexDocument": "index.html", | |
"ErrorDocument": "404.html" | |
}, | |
"PublicAccessBlockConfiguration": { | |
"BlockPublicAcls": false, | |
"BlockPublicPolicy": false, | |
"IgnorePublicAcls": false, | |
"RestrictPublicBuckets": false | |
} | |
} | |
}, | |
"StaticBucketPolicy": { | |
"Type": "AWS::S3::BucketPolicy", | |
"Properties": { | |
"Bucket": { | |
"Ref": "StaticBucket" | |
}, | |
"PolicyDocument": { | |
"Version": "2012-10-17", | |
"Statement": [ | |
{ | |
"Action": [ | |
"s3:GetObject" | |
], | |
"Effect": "Allow", | |
"Principal": "*", | |
"Resource": [ | |
{ | |
"Fn::Sub": [ | |
"arn:aws:s3:::${bukkit}/*", | |
{ | |
"bukkit": { | |
"Ref": "StaticBucket" | |
} | |
} | |
] | |
} | |
], | |
"Sid": "PublicReadGetObject" | |
} | |
] | |
} | |
} | |
}, | |
"WS": { | |
"Type": "AWS::ApiGatewayV2::Api", | |
"Properties": { | |
"Name": "FoobarWebsocketStaging", | |
"ProtocolType": "WEBSOCKET", | |
"RouteSelectionExpression": "$request.body.message" | |
} | |
}, | |
"WebsocketDeployment": { | |
"Type": "AWS::ApiGatewayV2::Deployment", | |
"DependsOn": [ | |
"ConnectWSRoute", | |
"DefaultWSRoute", | |
"DisconnectWSRoute" | |
], | |
"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" | |
} | |
] | |
} | |
}, | |
"ConnectWSLambda": { | |
"Type": "AWS::Serverless::Function", | |
"Properties": { | |
"Handler": "index.handler", | |
"CodeUri": "/Users/brian/Desktop/foobar/src/ws/connect", | |
"Runtime": "nodejs20.x", | |
"Architectures": [ | |
"arm64" | |
], | |
"MemorySize": 1152, | |
"EphemeralStorage": { | |
"Size": 512 | |
}, | |
"Timeout": 5, | |
"Environment": { | |
"Variables": { | |
"ARC_APP_NAME": "foobar", | |
"ARC_ENV": "staging", | |
"ARC_ROLE": { | |
"Ref": "Role" | |
}, | |
"ARC_SESSION_TABLE_NAME": "jwe", | |
"ARC_STACK_NAME": { | |
"Ref": "AWS::StackName" | |
}, | |
"ARC_STATIC_BUCKET": { | |
"Ref": "StaticBucket" | |
}, | |
"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": {} | |
}, | |
"ArcMetadata": { | |
"pragma": "ws", | |
"name": "connect" | |
} | |
}, | |
"ConnectWSRoute": { | |
"Type": "AWS::ApiGatewayV2::Route", | |
"Properties": { | |
"ApiId": { | |
"Ref": "WS" | |
}, | |
"RouteKey": "$connect", | |
"OperationName": "ConnectWSRoute", | |
"Target": { | |
"Fn::Join": [ | |
"/", | |
[ | |
"integrations", | |
{ | |
"Ref": "ConnectWSIntegration" | |
} | |
] | |
] | |
} | |
} | |
}, | |
"ConnectWSIntegration": { | |
"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/${ConnectWSLambda.Arn}/invocations", | |
{} | |
] | |
} | |
} | |
}, | |
"ConnectWSPermission": { | |
"Type": "AWS::Lambda::Permission", | |
"DependsOn": [ | |
"WS", | |
"ConnectWSLambda" | |
], | |
"Properties": { | |
"Action": "lambda:InvokeFunction", | |
"FunctionName": { | |
"Ref": "ConnectWSLambda" | |
}, | |
"Principal": "apigateway.amazonaws.com" | |
} | |
}, | |
"DefaultWSLambda": { | |
"Type": "AWS::Serverless::Function", | |
"Properties": { | |
"Handler": "index.handler", | |
"CodeUri": "/Users/brian/Desktop/foobar/src/ws/default", | |
"Runtime": "nodejs20.x", | |
"Architectures": [ | |
"arm64" | |
], | |
"MemorySize": 1152, | |
"EphemeralStorage": { | |
"Size": 512 | |
}, | |
"Timeout": 5, | |
"Environment": { | |
"Variables": { | |
"ARC_APP_NAME": "foobar", | |
"ARC_ENV": "staging", | |
"ARC_ROLE": { | |
"Ref": "Role" | |
}, | |
"ARC_SESSION_TABLE_NAME": "jwe", | |
"ARC_STACK_NAME": { | |
"Ref": "AWS::StackName" | |
}, | |
"ARC_STATIC_BUCKET": { | |
"Ref": "StaticBucket" | |
}, | |
"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": {} | |
}, | |
"ArcMetadata": { | |
"pragma": "ws", | |
"name": "default" | |
} | |
}, | |
"DefaultWSRoute": { | |
"Type": "AWS::ApiGatewayV2::Route", | |
"Properties": { | |
"ApiId": { | |
"Ref": "WS" | |
}, | |
"RouteKey": "$default", | |
"OperationName": "DefaultWSRoute", | |
"Target": { | |
"Fn::Join": [ | |
"/", | |
[ | |
"integrations", | |
{ | |
"Ref": "DefaultWSIntegration" | |
} | |
] | |
] | |
} | |
} | |
}, | |
"DefaultWSIntegration": { | |
"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/${DefaultWSLambda.Arn}/invocations", | |
{} | |
] | |
} | |
} | |
}, | |
"DefaultWSPermission": { | |
"Type": "AWS::Lambda::Permission", | |
"DependsOn": [ | |
"WS", | |
"DefaultWSLambda" | |
], | |
"Properties": { | |
"Action": "lambda:InvokeFunction", | |
"FunctionName": { | |
"Ref": "DefaultWSLambda" | |
}, | |
"Principal": "apigateway.amazonaws.com" | |
} | |
}, | |
"DisconnectWSLambda": { | |
"Type": "AWS::Serverless::Function", | |
"Properties": { | |
"Handler": "index.handler", | |
"CodeUri": "/Users/brian/Desktop/foobar/src/ws/disconnect", | |
"Runtime": "nodejs20.x", | |
"Architectures": [ | |
"arm64" | |
], | |
"MemorySize": 1152, | |
"EphemeralStorage": { | |
"Size": 512 | |
}, | |
"Timeout": 5, | |
"Environment": { | |
"Variables": { | |
"ARC_APP_NAME": "foobar", | |
"ARC_ENV": "staging", | |
"ARC_ROLE": { | |
"Ref": "Role" | |
}, | |
"ARC_SESSION_TABLE_NAME": "jwe", | |
"ARC_STACK_NAME": { | |
"Ref": "AWS::StackName" | |
}, | |
"ARC_STATIC_BUCKET": { | |
"Ref": "StaticBucket" | |
}, | |
"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": {} | |
}, | |
"ArcMetadata": { | |
"pragma": "ws", | |
"name": "disconnect" | |
} | |
}, | |
"DisconnectWSRoute": { | |
"Type": "AWS::ApiGatewayV2::Route", | |
"Properties": { | |
"ApiId": { | |
"Ref": "WS" | |
}, | |
"RouteKey": "$disconnect", | |
"OperationName": "DisconnectWSRoute", | |
"Target": { | |
"Fn::Join": [ | |
"/", | |
[ | |
"integrations", | |
{ | |
"Ref": "DisconnectWSIntegration" | |
} | |
] | |
] | |
} | |
} | |
}, | |
"DisconnectWSIntegration": { | |
"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/${DisconnectWSLambda.Arn}/invocations", | |
{} | |
] | |
} | |
} | |
}, | |
"DisconnectWSPermission": { | |
"Type": "AWS::Lambda::Permission", | |
"DependsOn": [ | |
"WS", | |
"DisconnectWSLambda" | |
], | |
"Properties": { | |
"Action": "lambda:InvokeFunction", | |
"FunctionName": { | |
"Ref": "DisconnectWSLambda" | |
}, | |
"Principal": "apigateway.amazonaws.com" | |
} | |
} | |
}, | |
"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" | |
} | |
}, | |
"EEventTopic": { | |
"Description": "An SNS Topic", | |
"Value": { | |
"Ref": "EEventTopic" | |
} | |
}, | |
"QSqsQueue": { | |
"Description": "An SQS Queue", | |
"Value": { | |
"Ref": "QQueue" | |
} | |
}, | |
"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