From be15fabb34c37f3d519909deffd7700eac411b59 Mon Sep 17 00:00:00 2001 From: Evandro Pires da Silva Date: Fri, 13 Nov 2020 08:38:29 -0300 Subject: [PATCH 1/2] Storage first implementation using Serverless Framework --- storage-first/serverless/package.json | 9 + storage-first/serverless/serverless.yml | 106 ++++++++++ .../src/enqueue/.stackery-config.yaml | 2 + .../serverless/src/enqueue/README.md | 13 ++ storage-first/serverless/src/enqueue/index.js | 6 + .../serverless/src/enqueue/package.json | 7 + .../src/ingest/.stackery-config.yaml | 2 + storage-first/serverless/src/ingest/README.md | 13 ++ storage-first/serverless/src/ingest/index.js | 6 + .../serverless/src/ingest/package.json | 7 + storage-first/serverless/template.yaml | 184 ++++++++++++++++++ 11 files changed, 355 insertions(+) create mode 100644 storage-first/serverless/package.json create mode 100644 storage-first/serverless/serverless.yml create mode 100644 storage-first/serverless/src/enqueue/.stackery-config.yaml create mode 100644 storage-first/serverless/src/enqueue/README.md create mode 100644 storage-first/serverless/src/enqueue/index.js create mode 100644 storage-first/serverless/src/enqueue/package.json create mode 100644 storage-first/serverless/src/ingest/.stackery-config.yaml create mode 100644 storage-first/serverless/src/ingest/README.md create mode 100644 storage-first/serverless/src/ingest/index.js create mode 100644 storage-first/serverless/src/ingest/package.json create mode 100644 storage-first/serverless/template.yaml diff --git a/storage-first/serverless/package.json b/storage-first/serverless/package.json new file mode 100644 index 0000000..c634192 --- /dev/null +++ b/storage-first/serverless/package.json @@ -0,0 +1,9 @@ +{ + "name": "storage-first", + "description": "", + "version": "0.1.0", + "dependencies": {}, + "devDependencies": { + "serverless-apigateway-service-proxy": "^1.13.0" + } +} \ No newline at end of file diff --git a/storage-first/serverless/serverless.yml b/storage-first/serverless/serverless.yml new file mode 100644 index 0000000..c2b6e50 --- /dev/null +++ b/storage-first/serverless/serverless.yml @@ -0,0 +1,106 @@ +service: storage-first + +provider: + name: aws + runtime: nodejs12.x + region: us-east-1 + stage: dev + stackName: ${self:service}-${self:provider.stage} + iamRoleStatements: + - Effect: Allow + Action: + - "sqs:SendMessage" + Resource: !GetAtt DLQ.Arn + - Effect: Allow + Action: + - rds-data:BatchExecuteStatement + - rds-data:BeginTransaction + - rds-data:CommitTransaction + - rds-data:ExecuteStatement + - rds-data:RollbackTransaction + Resource: arn:aws:rds:${self:provider.region}:*:cluster:* + +functions: + injest: + handler: src/ingest/index.handler + memorySize: 3008 + timeout: 30 + events: + - sqs: + arn: + Fn::GetAtt: + - Queue + - Arn + +custom: + apiGatewayServiceProxies: + - sqs: + path: /message + method: post + queueName: { 'Fn::GetAtt': ['Queue', 'QueueName'] } + cors: true + response: + template: + success: |- + { "message": "accepted" } + clientError: |- + { "message": "there is an error in your request" } + serverError: |- + { "message": "there was an error handling your request" } + + vpcConfig: + cidrBlock: '10.0.0.0/16' + createNatGateway: 2 + createNetworkAcl: false + createDbSubnet: true + createFlowLogs: false + createBastionHost: false + bastionHostKeyName: MyKey + createNatInstance: false + createParameters: false + zones: + - us-east-1a + - us-east-1b + - us-east-1c + services: + - kms + - secretsmanager + subnetGroups: + - rds + exportOutputs: false + +resources: + Resources: + Queue: + Type: 'AWS::SQS::Queue' + Properties: + QueueName: ${self:provider.stackName}-Queue + RedrivePolicy: + deadLetterTargetArn: !GetAtt DLQ.Arn + maxReceiveCount: 5 + DLQ: + Type: AWS::SQS::Queue + Properties: + QueueName: ${self:provider.stackName}-DLQ + Database: + Type: AWS::RDS::DBCluster + Properties: + BackupRetentionPeriod: 1 + DBSubnetGroupName: !Ref RDSSubnetGroup #created automatically by serverless-vpc-plugin + Engine: aurora + EngineMode: serverless + MasterUsername: storagefirst + MasterUserPassword: storagefirst + EnableHttpEndpoint: true + ScalingConfiguration: + AutoPause: false + MinCapacity: 2 + MaxCapacity: 256 + StorageEncrypted: true + VpcSecurityGroupIds: + - !Ref AppSecurityGroup #created automatically by serverless-vpc-plugin + +plugins: + - serverless-apigateway-service-proxy + - serverless-cloudformation-sub-variables + - serverless-vpc-plugin diff --git a/storage-first/serverless/src/enqueue/.stackery-config.yaml b/storage-first/serverless/src/enqueue/.stackery-config.yaml new file mode 100644 index 0000000..fe14a19 --- /dev/null +++ b/storage-first/serverless/src/enqueue/.stackery-config.yaml @@ -0,0 +1,2 @@ +function-id: Enqueue +template-path: ../../template.yaml \ No newline at end of file diff --git a/storage-first/serverless/src/enqueue/README.md b/storage-first/serverless/src/enqueue/README.md new file mode 100644 index 0000000..c723088 --- /dev/null +++ b/storage-first/serverless/src/enqueue/README.md @@ -0,0 +1,13 @@ + +This Function was generated by [Stackery.io](https://www.stackery.io). + +We recommend updating this readme with your own function specific documentation. + +# Dependencies +You can add dependencies on other files and packages. +Within this directory, local dependencies can be added as individual files and +package dependencies can be added to [package.json](https://docs.npmjs.com/files/package.json). +Package dependencies will be installed when the stack is deployed. + +# Stackery Documentation +Documentation for Function resources can be found at [https://docs.stackery.io/docs/api/nodes/Function](https://docs.stackery.io/docs/api/nodes/Function/). diff --git a/storage-first/serverless/src/enqueue/index.js b/storage-first/serverless/src/enqueue/index.js new file mode 100644 index 0000000..a25d13a --- /dev/null +++ b/storage-first/serverless/src/enqueue/index.js @@ -0,0 +1,6 @@ +exports.handler = async (event, context) => { + // Log the event argument for debugging and for use in local development. + console.log(JSON.stringify(event, undefined, 2)); + + return {}; +}; diff --git a/storage-first/serverless/src/enqueue/package.json b/storage-first/serverless/src/enqueue/package.json new file mode 100644 index 0000000..fe964de --- /dev/null +++ b/storage-first/serverless/src/enqueue/package.json @@ -0,0 +1,7 @@ +{ + "name": "enqueue", + "version": "1.0.0", + "devDependencies": { + "aws-sdk": "~2" + } +} diff --git a/storage-first/serverless/src/ingest/.stackery-config.yaml b/storage-first/serverless/src/ingest/.stackery-config.yaml new file mode 100644 index 0000000..42612b0 --- /dev/null +++ b/storage-first/serverless/src/ingest/.stackery-config.yaml @@ -0,0 +1,2 @@ +function-id: Ingest +template-path: ../../template.yaml \ No newline at end of file diff --git a/storage-first/serverless/src/ingest/README.md b/storage-first/serverless/src/ingest/README.md new file mode 100644 index 0000000..c723088 --- /dev/null +++ b/storage-first/serverless/src/ingest/README.md @@ -0,0 +1,13 @@ + +This Function was generated by [Stackery.io](https://www.stackery.io). + +We recommend updating this readme with your own function specific documentation. + +# Dependencies +You can add dependencies on other files and packages. +Within this directory, local dependencies can be added as individual files and +package dependencies can be added to [package.json](https://docs.npmjs.com/files/package.json). +Package dependencies will be installed when the stack is deployed. + +# Stackery Documentation +Documentation for Function resources can be found at [https://docs.stackery.io/docs/api/nodes/Function](https://docs.stackery.io/docs/api/nodes/Function/). diff --git a/storage-first/serverless/src/ingest/index.js b/storage-first/serverless/src/ingest/index.js new file mode 100644 index 0000000..a25d13a --- /dev/null +++ b/storage-first/serverless/src/ingest/index.js @@ -0,0 +1,6 @@ +exports.handler = async (event, context) => { + // Log the event argument for debugging and for use in local development. + console.log(JSON.stringify(event, undefined, 2)); + + return {}; +}; diff --git a/storage-first/serverless/src/ingest/package.json b/storage-first/serverless/src/ingest/package.json new file mode 100644 index 0000000..922439e --- /dev/null +++ b/storage-first/serverless/src/ingest/package.json @@ -0,0 +1,7 @@ +{ + "name": "ingest", + "version": "1.0.0", + "devDependencies": { + "aws-sdk": "~2" + } +} diff --git a/storage-first/serverless/template.yaml b/storage-first/serverless/template.yaml new file mode 100644 index 0000000..b150e4b --- /dev/null +++ b/storage-first/serverless/template.yaml @@ -0,0 +1,184 @@ +AWSTemplateFormatVersion: 2010-09-09 +Transform: AWS::Serverless-2016-10-31 +Resources: + Queue: + Type: AWS::SQS::Queue + Properties: + QueueName: !Sub ${AWS::StackName}-Queue + RedrivePolicy: + deadLetterTargetArn: !GetAtt DLQ.Arn + maxReceiveCount: 5 + Database: + Type: AWS::RDS::DBCluster + Properties: + BackupRetentionPeriod: 1 + DBSubnetGroupName: !Ref DatabaseSubnetGroup + Engine: aurora + EngineMode: serverless + MasterUsername: !Sub '{{resolve:secretsmanager:${DatabaseRootUserSecret}:SecretString:username}}' + MasterUserPassword: !Sub '{{resolve:secretsmanager:${DatabaseRootUserSecret}:SecretString:password}}' + EnableHttpEndpoint: true + ScalingConfiguration: + AutoPause: false + MinCapacity: 2 + MaxCapacity: 256 + StorageEncrypted: true + VpcSecurityGroupIds: + - !Ref DatabaseSecurityGroup + DatabaseSubnetGroup: + Type: AWS::RDS::DBSubnetGroup + Properties: + DBSubnetGroupDescription: !Sub + - Stack ${StackTagName} Environment ${EnvironmentTagName} Database ${ResourceName} VPC Subnets + - ResourceName: Database + SubnetIds: !Ref DefaultVPCSubnets + Tags: + - Key: Name + Value: !Sub + - Stack ${StackTagName} Environment ${EnvironmentTagName} Database ${ResourceName} VPC Subnets + - ResourceName: Database + DatabaseSecurityGroup: + Type: AWS::EC2::SecurityGroup + Properties: + GroupDescription: Database Security Group + SecurityGroupIngress: + CidrIp: 0.0.0.0/0 + FromPort: 3306 + IpProtocol: tcp + ToPort: 3306 + Tags: + - Key: Name + Value: !Sub + - Stack ${StackTagName} Environment ${EnvironmentTagName} Database ${ResourceName} VPC Security Group + - ResourceName: Database + VpcId: !Ref DefaultVPCId + DatabaseRootUserSecret: + Type: AWS::SecretsManager::Secret + Properties: + Description: !Sub + - Root user login info for Stack ${StackTagName} Environment ${EnvironmentTagName} Database ${ResourceName} + - ResourceName: Database + GenerateSecretString: + SecretStringTemplate: '{"username": "root"}' + GenerateStringKey: password + PasswordLength: 16 + ExcludeCharacters: '"@/\' + Name: !Sub /${EnvironmentTagName}/${StackTagName}/Database/RootUser + DatabaseRootUserSecretAttachment: + Type: AWS::SecretsManager::SecretTargetAttachment + Properties: + SecretId: !Ref DatabaseRootUserSecret + TargetId: !Ref Database + TargetType: AWS::RDS::DBCluster + Ingest: + Type: AWS::Serverless::Function + Properties: + FunctionName: !Sub ${AWS::StackName}-Ingest + Description: !Sub + - Stack ${StackTagName} Environment ${EnvironmentTagName} Function ${ResourceName} + - ResourceName: Ingest + CodeUri: src/ingest + Handler: index.handler + Runtime: nodejs12.x + MemorySize: 3008 + Timeout: 30 + Tracing: Active + Policies: + - AWSXrayWriteOnlyAccess + - AWSSecretsManagerGetSecretValuePolicy: + SecretArn: !Ref DatabaseRootUserSecret + - Statement: + - Effect: Allow + Action: + - rds-data:BatchExecuteStatement + - rds-data:BeginTransaction + - rds-data:CommitTransaction + - rds-data:ExecuteStatement + - rds-data:RollbackTransaction + Resource: + - !Sub arn:aws:rds:${AWS::Region}:${AWS::AccountId}:cluster:${Database} + Events: + Queue: + Type: SQS + Properties: + Queue: !GetAtt Queue.Arn + BatchSize: 1 + Environment: + Variables: + DB_ID: !Ref Database + DB_ADDRESS: !GetAtt Database.Endpoint.Address + DB_PORT: !GetAtt Database.Endpoint.Port + DB_ARN: !Sub arn:aws:rds:${AWS::Region}:${AWS::AccountId}:cluster:${Database} + DB_ROOT_USER_SECRET_ARN: !Ref DatabaseRootUserSecret + DLQ: + Type: AWS::SQS::Queue + Properties: + QueueName: !Sub ${AWS::StackName}-DLQ + ApiToQueueRole: + Type: AWS::IAM::Role + Properties: + AssumeRolePolicyDocument: + Version: 2012-10-17 + Statement: + - Effect: Allow + Action: sts:AssumeRole + Principal: + Service: + - apigateway.amazonaws.com + ManagedPolicyArns: + - arn:aws:iam::aws:policy/service-role/AmazonAPIGatewayPushToCloudWatchLogs + Policies: + - PolicyName: ApiToQueuePolicy + PolicyDocument: + Version: 2012-10-17 + Statement: + - Effect: Allow + Action: + - sqs:SendMessage + Resource: !GetAtt Queue.Arn + Api: + Type: AWS::Serverless::Api + Properties: + Name: !Sub + - ${ResourceName} From Stack ${StackTagName} Environment ${EnvironmentTagName} + - ResourceName: Api + StageName: !Ref EnvironmentAPIGatewayStageName + DefinitionBody: + openapi: '3.0' + info: {} + paths: + /message: + post: + responses: + '200': {} + x-amazon-apigateway-integration: + credentials: !GetAtt ApiToQueueRole.Arn + uri: !Sub arn:${AWS::Partition}:apigateway:${AWS::Region}:sqs:path// + responses: + default: + statusCode: '200' + requestParameters: + integration.request.header.Content-Type: '''application/x-www-form-urlencoded''' + requestTemplates: + application/json: !Sub Version=2012-11-05&Action=SendMessage&QueueUrl=$util.urlEncode('${Queue}')&MessageBody=$util.urlEncode($input.body) + passthroughBehavior: never + httpMethod: POST + type: aws + EndpointConfiguration: REGIONAL + TracingEnabled: true +Parameters: + StackTagName: + Type: String + Description: Stack Name (injected by Stackery at deployment time) + EnvironmentTagName: + Type: String + Description: Environment Name (injected by Stackery at deployment time) + DefaultVPCId: + Type: AWS::EC2::VPC::Id + Description: AWS account-specific default VPC ID (injected by Stackery at deployment time) + DefaultVPCSubnets: + Type: List + Description: AWS account-specific default VPC subnets (injected by Stackery at deployment time) + EnvironmentAPIGatewayStageName: + Type: String + Description: Environment name used for API Gateway Stage names (injected by Stackery at deployment time) \ No newline at end of file From 5365815c1032b9f87d270f4c4bc0d4ee8c17bf1b Mon Sep 17 00:00:00 2001 From: Evandro Pires da Silva Date: Fri, 13 Nov 2020 08:41:26 -0300 Subject: [PATCH 2/2] Removing unecessary files --- .../src/enqueue/.stackery-config.yaml | 2 - .../serverless/src/enqueue/README.md | 13 -- .../src/ingest/.stackery-config.yaml | 2 - storage-first/serverless/src/ingest/README.md | 13 -- storage-first/serverless/template.yaml | 184 ------------------ 5 files changed, 214 deletions(-) delete mode 100644 storage-first/serverless/src/enqueue/.stackery-config.yaml delete mode 100644 storage-first/serverless/src/enqueue/README.md delete mode 100644 storage-first/serverless/src/ingest/.stackery-config.yaml delete mode 100644 storage-first/serverless/src/ingest/README.md delete mode 100644 storage-first/serverless/template.yaml diff --git a/storage-first/serverless/src/enqueue/.stackery-config.yaml b/storage-first/serverless/src/enqueue/.stackery-config.yaml deleted file mode 100644 index fe14a19..0000000 --- a/storage-first/serverless/src/enqueue/.stackery-config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -function-id: Enqueue -template-path: ../../template.yaml \ No newline at end of file diff --git a/storage-first/serverless/src/enqueue/README.md b/storage-first/serverless/src/enqueue/README.md deleted file mode 100644 index c723088..0000000 --- a/storage-first/serverless/src/enqueue/README.md +++ /dev/null @@ -1,13 +0,0 @@ - -This Function was generated by [Stackery.io](https://www.stackery.io). - -We recommend updating this readme with your own function specific documentation. - -# Dependencies -You can add dependencies on other files and packages. -Within this directory, local dependencies can be added as individual files and -package dependencies can be added to [package.json](https://docs.npmjs.com/files/package.json). -Package dependencies will be installed when the stack is deployed. - -# Stackery Documentation -Documentation for Function resources can be found at [https://docs.stackery.io/docs/api/nodes/Function](https://docs.stackery.io/docs/api/nodes/Function/). diff --git a/storage-first/serverless/src/ingest/.stackery-config.yaml b/storage-first/serverless/src/ingest/.stackery-config.yaml deleted file mode 100644 index 42612b0..0000000 --- a/storage-first/serverless/src/ingest/.stackery-config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -function-id: Ingest -template-path: ../../template.yaml \ No newline at end of file diff --git a/storage-first/serverless/src/ingest/README.md b/storage-first/serverless/src/ingest/README.md deleted file mode 100644 index c723088..0000000 --- a/storage-first/serverless/src/ingest/README.md +++ /dev/null @@ -1,13 +0,0 @@ - -This Function was generated by [Stackery.io](https://www.stackery.io). - -We recommend updating this readme with your own function specific documentation. - -# Dependencies -You can add dependencies on other files and packages. -Within this directory, local dependencies can be added as individual files and -package dependencies can be added to [package.json](https://docs.npmjs.com/files/package.json). -Package dependencies will be installed when the stack is deployed. - -# Stackery Documentation -Documentation for Function resources can be found at [https://docs.stackery.io/docs/api/nodes/Function](https://docs.stackery.io/docs/api/nodes/Function/). diff --git a/storage-first/serverless/template.yaml b/storage-first/serverless/template.yaml deleted file mode 100644 index b150e4b..0000000 --- a/storage-first/serverless/template.yaml +++ /dev/null @@ -1,184 +0,0 @@ -AWSTemplateFormatVersion: 2010-09-09 -Transform: AWS::Serverless-2016-10-31 -Resources: - Queue: - Type: AWS::SQS::Queue - Properties: - QueueName: !Sub ${AWS::StackName}-Queue - RedrivePolicy: - deadLetterTargetArn: !GetAtt DLQ.Arn - maxReceiveCount: 5 - Database: - Type: AWS::RDS::DBCluster - Properties: - BackupRetentionPeriod: 1 - DBSubnetGroupName: !Ref DatabaseSubnetGroup - Engine: aurora - EngineMode: serverless - MasterUsername: !Sub '{{resolve:secretsmanager:${DatabaseRootUserSecret}:SecretString:username}}' - MasterUserPassword: !Sub '{{resolve:secretsmanager:${DatabaseRootUserSecret}:SecretString:password}}' - EnableHttpEndpoint: true - ScalingConfiguration: - AutoPause: false - MinCapacity: 2 - MaxCapacity: 256 - StorageEncrypted: true - VpcSecurityGroupIds: - - !Ref DatabaseSecurityGroup - DatabaseSubnetGroup: - Type: AWS::RDS::DBSubnetGroup - Properties: - DBSubnetGroupDescription: !Sub - - Stack ${StackTagName} Environment ${EnvironmentTagName} Database ${ResourceName} VPC Subnets - - ResourceName: Database - SubnetIds: !Ref DefaultVPCSubnets - Tags: - - Key: Name - Value: !Sub - - Stack ${StackTagName} Environment ${EnvironmentTagName} Database ${ResourceName} VPC Subnets - - ResourceName: Database - DatabaseSecurityGroup: - Type: AWS::EC2::SecurityGroup - Properties: - GroupDescription: Database Security Group - SecurityGroupIngress: - CidrIp: 0.0.0.0/0 - FromPort: 3306 - IpProtocol: tcp - ToPort: 3306 - Tags: - - Key: Name - Value: !Sub - - Stack ${StackTagName} Environment ${EnvironmentTagName} Database ${ResourceName} VPC Security Group - - ResourceName: Database - VpcId: !Ref DefaultVPCId - DatabaseRootUserSecret: - Type: AWS::SecretsManager::Secret - Properties: - Description: !Sub - - Root user login info for Stack ${StackTagName} Environment ${EnvironmentTagName} Database ${ResourceName} - - ResourceName: Database - GenerateSecretString: - SecretStringTemplate: '{"username": "root"}' - GenerateStringKey: password - PasswordLength: 16 - ExcludeCharacters: '"@/\' - Name: !Sub /${EnvironmentTagName}/${StackTagName}/Database/RootUser - DatabaseRootUserSecretAttachment: - Type: AWS::SecretsManager::SecretTargetAttachment - Properties: - SecretId: !Ref DatabaseRootUserSecret - TargetId: !Ref Database - TargetType: AWS::RDS::DBCluster - Ingest: - Type: AWS::Serverless::Function - Properties: - FunctionName: !Sub ${AWS::StackName}-Ingest - Description: !Sub - - Stack ${StackTagName} Environment ${EnvironmentTagName} Function ${ResourceName} - - ResourceName: Ingest - CodeUri: src/ingest - Handler: index.handler - Runtime: nodejs12.x - MemorySize: 3008 - Timeout: 30 - Tracing: Active - Policies: - - AWSXrayWriteOnlyAccess - - AWSSecretsManagerGetSecretValuePolicy: - SecretArn: !Ref DatabaseRootUserSecret - - Statement: - - Effect: Allow - Action: - - rds-data:BatchExecuteStatement - - rds-data:BeginTransaction - - rds-data:CommitTransaction - - rds-data:ExecuteStatement - - rds-data:RollbackTransaction - Resource: - - !Sub arn:aws:rds:${AWS::Region}:${AWS::AccountId}:cluster:${Database} - Events: - Queue: - Type: SQS - Properties: - Queue: !GetAtt Queue.Arn - BatchSize: 1 - Environment: - Variables: - DB_ID: !Ref Database - DB_ADDRESS: !GetAtt Database.Endpoint.Address - DB_PORT: !GetAtt Database.Endpoint.Port - DB_ARN: !Sub arn:aws:rds:${AWS::Region}:${AWS::AccountId}:cluster:${Database} - DB_ROOT_USER_SECRET_ARN: !Ref DatabaseRootUserSecret - DLQ: - Type: AWS::SQS::Queue - Properties: - QueueName: !Sub ${AWS::StackName}-DLQ - ApiToQueueRole: - Type: AWS::IAM::Role - Properties: - AssumeRolePolicyDocument: - Version: 2012-10-17 - Statement: - - Effect: Allow - Action: sts:AssumeRole - Principal: - Service: - - apigateway.amazonaws.com - ManagedPolicyArns: - - arn:aws:iam::aws:policy/service-role/AmazonAPIGatewayPushToCloudWatchLogs - Policies: - - PolicyName: ApiToQueuePolicy - PolicyDocument: - Version: 2012-10-17 - Statement: - - Effect: Allow - Action: - - sqs:SendMessage - Resource: !GetAtt Queue.Arn - Api: - Type: AWS::Serverless::Api - Properties: - Name: !Sub - - ${ResourceName} From Stack ${StackTagName} Environment ${EnvironmentTagName} - - ResourceName: Api - StageName: !Ref EnvironmentAPIGatewayStageName - DefinitionBody: - openapi: '3.0' - info: {} - paths: - /message: - post: - responses: - '200': {} - x-amazon-apigateway-integration: - credentials: !GetAtt ApiToQueueRole.Arn - uri: !Sub arn:${AWS::Partition}:apigateway:${AWS::Region}:sqs:path// - responses: - default: - statusCode: '200' - requestParameters: - integration.request.header.Content-Type: '''application/x-www-form-urlencoded''' - requestTemplates: - application/json: !Sub Version=2012-11-05&Action=SendMessage&QueueUrl=$util.urlEncode('${Queue}')&MessageBody=$util.urlEncode($input.body) - passthroughBehavior: never - httpMethod: POST - type: aws - EndpointConfiguration: REGIONAL - TracingEnabled: true -Parameters: - StackTagName: - Type: String - Description: Stack Name (injected by Stackery at deployment time) - EnvironmentTagName: - Type: String - Description: Environment Name (injected by Stackery at deployment time) - DefaultVPCId: - Type: AWS::EC2::VPC::Id - Description: AWS account-specific default VPC ID (injected by Stackery at deployment time) - DefaultVPCSubnets: - Type: List - Description: AWS account-specific default VPC subnets (injected by Stackery at deployment time) - EnvironmentAPIGatewayStageName: - Type: String - Description: Environment name used for API Gateway Stage names (injected by Stackery at deployment time) \ No newline at end of file