我在我的应用中使用AWS Cognito进行用户管理。我已经设置了一个触发器,每次用户注册时都会触发Lambda函数。在lambda函数中,我的应用程序中的端点被调用。
问题是当我关闭然后重新启动我的应用程序时,它会获得一个新地址。
如何设置它以便我的所有功能自动更新地址以使用新的实例地址?
答案 0 :(得分:1)
以下是我用于更新您描述的用例的实例的服务地址的技术:
关键是使用Route 53发布服务端点的EG主机名EG app.example.com。您的Lambda函数应该引用该URL,而不是实例公共DNS。您的实例每次初始化时都必须更新此记录。
为此,请使用实例user data script,并在实例启动时动态更新Route 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
记录,主机名app
的{{1}}为300。
一些注意事项:
注意第1行,它下载并安装cli53,这是Amazon Route 53的命令行工具.cli53提供BIND格式的导入和导出以及Route 53域的简单命令行管理。 您无法使用AWS CLI轻松完成此操作 - 在一行中!这是一个支持良好的实用程序,已移植到许多平台。
该片段的最后一部分是CloudFormation语法,用于引用Route 53主机区域ID。如果您没有使用CloudFormation,请使用适合您的任何内容。
了解DNS记录传播时间和TTL时间。 DNS changes takes less than a minute, and minimum TTL is 60 seconds。在此时间范围内可能会有请求解析为旧的IP。建议使用ELB来防止此问题。或者让Lambda根据需要重试几分钟直到连接。
此代码段正在更新私有托管区域。您将使用公共托管区域。可以使用相同的技术来查询公共IP。