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/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/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" + } +}