in source/patterns/@aws-solutions-constructs/aws-apigateway-sqs/lib/index.ts [127:216]
constructor(scope: Construct, id: string, props: ApiGatewayToSqsProps) {
super(scope, id);
defaults.CheckProps(props);
// Setup the dead letter queue, if applicable
this.deadLetterQueue = defaults.buildDeadLetterQueue(this, {
existingQueueObj: props.existingQueueObj,
deployDeadLetterQueue: props.deployDeadLetterQueue,
deadLetterQueueProps: props.deadLetterQueueProps,
maxReceiveCount: props.maxReceiveCount
});
// Setup the queue
[this.sqsQueue] = defaults.buildQueue(this, 'queue', {
queueProps: props.queueProps,
deadLetterQueue: this.deadLetterQueue
});
// Setup the API Gateway
[this.apiGateway, this.apiGatewayCloudWatchRole, this.apiGatewayLogGroup] = defaults.GlobalRestApi(this,
props.apiGatewayProps, props.logGroupProps);
// Setup the API Gateway role
this.apiGatewayRole = new iam.Role(this, 'api-gateway-role', {
assumedBy: new iam.ServicePrincipal('apigateway.amazonaws.com')
});
// Setup the API Gateway resource
const apiGatewayResource = this.apiGateway.root.addResource('message');
// Create
let createRequestTemplate = "Action=SendMessage&MessageBody=$util.urlEncode(\"$input.body\")";
if (props.createRequestTemplate) {
createRequestTemplate = props.createRequestTemplate;
}
if (props.allowCreateOperation && props.allowCreateOperation === true) {
this.addActionToPolicy("sqs:SendMessage");
defaults.addProxyMethodToApiResource({
service: "sqs",
path: `${cdk.Aws.ACCOUNT_ID}/${this.sqsQueue.queueName}`,
apiGatewayRole: this.apiGatewayRole,
apiMethod: "POST",
apiResource: this.apiGateway.root,
requestTemplate: createRequestTemplate,
contentType: "'application/x-www-form-urlencoded'"
});
}
// Read
let readRequestTemplate = "Action=ReceiveMessage";
if (props.readRequestTemplate) {
readRequestTemplate = props.readRequestTemplate;
}
if (props.allowReadOperation === undefined || props.allowReadOperation === true) {
this.addActionToPolicy("sqs:ReceiveMessage");
defaults.addProxyMethodToApiResource({
service: "sqs",
path: `${cdk.Aws.ACCOUNT_ID}/${this.sqsQueue.queueName}`,
apiGatewayRole: this.apiGatewayRole,
apiMethod: "GET",
apiResource: this.apiGateway.root,
requestTemplate: readRequestTemplate,
contentType: "'application/x-www-form-urlencoded'"
});
}
// Delete
let deleteRequestTemplate = "Action=DeleteMessage&ReceiptHandle=$util.urlEncode($input.params('receiptHandle'))";
if (props.deleteRequestTemplate) {
deleteRequestTemplate = props.deleteRequestTemplate;
}
if (props.allowDeleteOperation && props.allowDeleteOperation === true) {
this.addActionToPolicy("sqs:DeleteMessage");
defaults.addProxyMethodToApiResource({
service: "sqs",
path: `${cdk.Aws.ACCOUNT_ID}/${this.sqsQueue.queueName}`,
apiGatewayRole: this.apiGatewayRole,
apiMethod: "DELETE",
apiResource: apiGatewayResource,
requestTemplate: deleteRequestTemplate,
contentType: "'application/x-www-form-urlencoded'"
});
}
}