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}')
回答なし

ログインしていません。 ログイン 回答を投稿する。

優れた回答とは、質問に明確に答え、建設的なフィードバックを提供し、質問者の専門分野におけるスキルの向上を促すものです。

質問に答えるためのガイドライン

関連するコンテンツ