重新启动服务时,如何自动更新Lambda表达式中使用的服务地址



我正在使用AWS Cognito用于我的应用程序中的用户管理。我已经设置了一个触发器,每次用户注册时都会启动Lambda功能。在lambda函数中,我的应用程序中的端点被调用。

问题是当我关闭然后重新启动应用程序时,它将获得一个新的地址。

如何设置它,以便我所有的功能自动更新地址以与新实例地址一起使用?

这是我用来更新您描述的用例的实例的服务地址:

关键是使用路由53发布服务终点的DNS主机名,例如app.example.com。您的lambda函数应引用该URL,而不是实例公共DNS。您的实例必须在初始化此记录时更新此记录。

为此,请使用实例用户数据脚本,然后在实例启动时动态更新路由53的托管区域。例如,这是我在ubuntu实例上使用的部分:

wget -q https://github.com/barnybug/cli53/releases/download/0.8.12/cli53-linux-amd64
mv cli53-linux-amd64 /usr/local/bin/cli53
chmod +x /usr/local/bin/cli53
INSTANCE_IP_PRIVATE=`curl -s http://169.254.169.254/latest/meta-data/local-ipv4`
cli53 rrcreate --replace "", {"Fn::ImportValue" : {"Fn::Sub" : "dns-PrivateHostedZoneId" }},"" "app 300 A ${INSTANCE_IP_PRIVATE}"

给定的区域example.com,最后一行将使用当前IP创建/更新A记录,用于主机名appTTL of 300。

一些注释:

  1. 注意行1,下载并安装CLI53,这是Amazon Route 53的命令行工具。CLI53提供并从绑定格式和简单命令行管理53域的导入和导出。您根本无法轻松地使用AWS CLI - 在1行中进行此操作!这是一个受支持的实用程序,已移植到许多平台上。

  2. 摘要的最后一部分是用于引用路由53主机区域ID的云形式语法。如果您不使用CloudFormation,请使用适合您的任何方法。

  3. 请注意DNS记录传播时间和TTL时间。DNS变化不到一分钟,最小TTL为60秒。在此时间范围内,可能会有一些请求可以解决到旧的IP。建议在此处使用ELB来防止此问题。或让Lambda根据需要重试一分钟,直到它连接为止。

  4. 此片段正在更新私人托管区域。您将使用公共托管区。相同的技术可用于查询公共IP。

最新更新