我目前在S3上托管一个静态网站,它使用重定向规则将请求重新路由到lambda函数。
问题是我有两个桶,它们都充当静态网站(沙箱与生产),我需要能够将它们指向相同的lambda函数,但能够区分它们当函数运行时。无论是标题,GET
参数,字符串操作,还是我可以用来确定请求来自哪个存储桶的任何内容。
有没有人知道lambda函数内部如何识别请求来自一个桶而不是另一个桶?这是我正在使用的当前重定向规则:
<RoutingRules>
<RoutingRule>
<Condition>
<KeyPrefixEquals/>
<HttpErrorCodeReturnedEquals>404</HttpErrorCodeReturnedEquals>
</Condition>
<Redirect>
<Protocol>https</Protocol>
<HostName>removed.execute-api.us-east-2.amazonaws.com</HostName>
<ReplaceKeyPrefixWith>prod/func?key=</ReplaceKeyPrefixWith>
<HttpRedirectCode>307</HttpRedirectCode>
</Redirect>
</RoutingRule>
</RoutingRules>
根据我的理解,我无法在此路由规则集中设置和标题或GET
参数,因为规则的验证失败,我唯一的选择就是复制lambda函数,我真的不这样做想要做,因为它感觉很冗长。
我还在JSON.stringify()
&amp;上完成了event
。 Lambda函数中的context
个参数似乎无法看到任何项目来帮助我唯一地标识原始存储桶。
感谢您的任何帮助。
答案 0 :(得分:3)
如果要添加查询字符串(“GET”)参数,则必须记住这是一个XML文档,需要转义&
→&
。通过这种方法,S3仍然可以在重定向中正确呈现查询字符串。
无效:
<ReplaceKeyPrefixWith>prod/func?foo=bar&buzz=fizz&key=</ReplaceKeyPrefixWith>
有效:
<ReplaceKeyPrefixWith>prod/func?foo=bar&buzz=fizz&key=</ReplaceKeyPrefixWith>