使用AWS Lambda和API Gateway提供静态javascript?

时间:2016-08-16 15:58:13

标签: node.js api amazon-s3 lambda aws-api-gateway

我正在编写第三方小部件,执行javascript客户端以向用户站点添加按钮。从本质上讲,用户将在其网站上包含一个标记,其中包含我的小部件的路径。该路径的URL将包含调用窗口小部件的特定用户的app_id。例如

<script src="www.widget.com/widget/{USER_ID}">

我希望能够使用AWS Lambda和API Gateway进行一些快速身份验证,允许用户下载小部件并提供javascript内容。这与Express.js中的res.sendFile类似,非常简单,但API Gateway似乎不支持发送文件。有没有什么方法可以使用API​​网关快速提供javascript,而不必将整个文件字符串化?

2 个答案:

答案 0 :(得分:1)

您可以设置api网关代理对托管文件(S3 proxy example)的s3的所有请求。否则,您可以设置Http Proxy集成,然后运行提供整个文件的后端http服务器。 要对请求执行身份验证,您可以将lambda函数作为custom authorizer

执行

如果您有lambda集成类型,唯一的方法是使用回调lambda documentation for callback返回响应中的整个文件。

答案 1 :(得分:1)

首先,您可以在Lambda函数中响应以下内容:

{
    statusCode: 200,
    headers: { 
        "content-type": "text/javascript"
    },
    body: buildMyJavascriptFileInTextFormat(event.user_id),
    isBase64Encoded: false,
}

然后转到您的API网关资源,并按照以下步骤设置集成:

方法请求:

添加名为user_id的查询字符串。

集成请求:

{
    "user_id": "$input.params('user_id')"
}

集成响应

转到状态码:200,创建一个名为:text/javascript的映射模板,并进行以下设置:

$input.path('body')

方法响应

Response Body for 200框中,将Content-Type更改为text/javascript