【问题标题】:Obtain EC2 instance IP from AWS lambda function and use requests library从 AWS lambda 函数获取 EC2 实例 IP 并使用请求库
【发布时间】:2018-02-01 22:20:43
【问题描述】:

我正在亚马逊 AWS Lambda 上编写一个 lambda 函数。它访问我在其上运行 Web REST API 的 EC2 实例的 URL。 lambda 函数由 Alexa 触发,使用 Python 语言 (python3.x) 编码。

目前,我已经在 lambda 函数中硬编码了 EC2 实例的 URL,并成功运行了 Alexa 技能。

我希望 lambda 函数自动从 EC2 实例获取 IP,每当我启动实例时它都会不断变化。这将确保我不必每次启动 EC2 实例时都去代码和硬编码 URL。

我偶然发现了关于 SO 的类似问题,但没有得到解答。但是,有回复表明正在更新 IAM 角色。我之前已经为其他目的创建了 IAM 角色,但我仍然不习惯。 这可能吗?是否需要管理 EC2 实例的安全组? 我需要设置一些权限/配置/设置吗? lambda 代码如何实现这一点?

此外,我在我的系统上安装了请求库,并尝试上传具有以下结构的“.zip”文件:

  • REST.zip/
    • 请求库文件夹
    • 索引.py

我目前正在使用 urllib 库

当我使用 zip 文件进行代码上传时(我目前正在编辑内联代码),它甚至无法访问 index.py 文件来运行代码

【问题讨论】:

  • 这不是好的应用程序栈设计。
  • 我是初学者,仅供练习。设计应该如何?

标签: python python-3.x amazon-web-services amazon-ec2 aws-lambda


【解决方案1】:

可以使用boto3,但我建议不要使用该架构。更好的方法是使用负载均衡器(即使您只有一个实例),然后在您的应用程序中使用负载均衡器的 CNAME 记录(只要 LB 存在,这将不会改变)。

如果您可以访问自己的域名,更好的方法是创建 CNAME 记录并将其指向负载均衡器的地址。然后,您可以愉快地在您的 Lambda 函数中使用 DNS 名称,而不必担心它会改变。

【讨论】:

  • 感谢您的回复。
猜你喜欢
  • 1970-01-01
  • 2017-09-03
  • 2015-07-13
  • 1970-01-01
  • 2021-02-18
  • 1970-01-01
  • 2020-03-14
  • 2017-10-10
  • 1970-01-01
相关资源
最近更新 更多