API Gateway Integration Mapping Template

0

I'm setting up API Gateway to proxy to SNS Topic. Everything seems to be working other than this one thing that we're still not able to figure out.

In the Integration Request Mapping Template, we want to transform the data into a format which is accepted by SNS, primarily Action, TopicArn, and Message are required fields so something like this should be returned:

Action=Publish&Message=$util.urlEncode($input.body)&TopicArn=$util.urlEncode('${TopicArn}')

If we just write this in the Mapping Template, it works. However, we also want the incoming Headers to be included in the "Message" attribute. How do we go about it? Ideally, the entire passthrough template should be url encoded and passed as Message. Something like:

#set($allParams = $input.params())
#set($fullBody = {
    "body-json" : $input.json('$'),
    "params" : {
    #foreach($type in $allParams.keySet())
        #set($params = $allParams.get($type))
    "$type" : {
        #foreach($paramName in $params.keySet())
        "$paramName" : "$util.escapeJavaScript($params.get($paramName))"
            #if($foreach.hasNext),#end
        #end
    }
        #if($foreach.hasNext),#end
    #end
    },
    "stage-variables" : {
    #foreach($key in $stageVariables.keySet())
    "$key" : "$util.escapeJavaScript($stageVariables.get($key))"
        #if($foreach.hasNext),#end
    #end
    },
    "context" : {
        "account-id" : "$context.identity.accountId",
        "api-id" : "$context.apiId",
        "api-key" : "$context.identity.apiKey",
        "authorizer-principal-id" : "$context.authorizer.principalId",
        "caller" : "$context.identity.caller",
        "cognito-authentication-provider" : "$context.identity.cognitoAuthenticationProvider",
        "cognito-authentication-type" : "$context.identity.cognitoAuthenticationType",
        "cognito-identity-id" : "$context.identity.cognitoIdentityId",
        "cognito-identity-pool-id" : "$context.identity.cognitoIdentityPoolId",
        "http-method" : "$context.httpMethod",
        "stage" : "$context.stage",
        "source-ip" : "$context.identity.sourceIp",
        "user" : "$context.identity.user",
        "user-agent" : "$context.identity.userAgent",
        "user-arn" : "$context.identity.userArn",
        "request-id" : "$context.requestId",
        "resource-id" : "$context.resourceId",
        "resource-path" : "$context.resourcePath"
        }
    }
})
Action=Publish&Message=$util.urlEncode($fullBody)&TopicArn=$util.urlEncode('${TopicArn}')
No Answers

You are not logged in. Log in to post an answer.

A good answer clearly answers the question and provides constructive feedback and encourages professional growth in the question asker.

Guidelines for Answering Questions