【问题标题】:API Gateway and Lambda Function: first approachAPI 网关和 Lambda 函数:第一种方法
【发布时间】:2016-09-11 21:32:30
【问题描述】:

我对 API Gateway 和 AWS Lambda 非常陌生,我正在尝试在具有以下元素的场景中使用它们:

  • 具有私有子网和公有子网的 VPC
  • 安装了 Lamp 的 AMI EC2(免费层级)
  • 一个简单的 index.html 页面,其中包含一些文本(显示“这是一个测试页面”)

我想做的是能够通过使用 API 网关和 Lambda 来攻击 http://myprivateIp/myexample/index.hml,正如 AWS 文档中似乎建议的那样。然后,我为我的第一个 lambda 函数重新使用了基本的 Hello World lambda 示例(AWS 蓝图之一),并按照向导中的要求包含了 VPC 详细信息(也包含私有子网)。我还创建了一个示例 API,其中包含一个资源(在本例中为 myexample)以及具有 Lambda 函数集成类型和 Hello World 函数的 Get 方法。根据文档,我创建了正确的权限 (http://docs.aws.amazon.com/apigateway/latest/developerguide/create-lambda-roles.html)。我已经从我的 API 测试了 GET 方法,它根据 AWS 预先存在的蓝图正确返回了响应“Hello World”。我知道这听起来可能是一个非常幼稚的问题,但我不确定我是否真的证明了我可以击中我的 VPC?我希望能够从我的 index.html 页面返回示例文本,例如,这可能吗?在这种特殊情况下,我是否误解了 AWS lambda 的用途?

感谢您的帮助,

编辑:

所以,我在 Node JS 4.3 中整理了以下内容:

'use strict';
console.log('We are about to send a Get Request');

exports.handler = function(event, context, callback) {
  var http = require("http")
  var request = http.get("http://domain/example/index.html")
  console.log('"This is my request":"' + request + '"');
  callback(null, "The URL is succesfully retrieved")
};

测试运行成功,我是否说它确实证明了我可以访问在 VPC 上运行的页面?

【问题讨论】:

    标签: amazon-web-services aws-lambda aws-api-gateway


    【解决方案1】:

    您是对的 - 只要您的 Lambda 函数配置为在同一 VPC 中运行,您就可以通过 Lambda 函数向 VPC 中的终端节点发出 HTTP 请求。

    因此,您可以使用 API Gateway 调用 Lambda 并代理来自 VPC 内 HTTP 端点的响应。

    API Gateway 无法直接调用 VPC 中的 HTTP 端点,因此推荐您当前使用 Lambda 的方法。

    【讨论】:

    • 感谢您,非常感谢。只是想知道我是否真的朝着正确的方向前进,是的,测试似乎有效,我可以在 VPC 中点击该页面。我想我可以用 REST 端点而不是 HTTP 资源做类似的事情。对吗?
    • 这种方法可行,但它不可扩展,因为每当 lambda 需要访问 VPC 中的任何资源时,它都需要 ENI(弹性网络接口)和足够的 IP 地址,并确保这些东西可能很棘手。建议在朝这个方向前进之前,先简要了解一下docs.aws.amazon.com/lambda/latest/dg/vpc.html 上的所有问题。
    • @paranza :您对这种方法的体验如何?
    【解决方案2】:

    您可以将您的 EC2 与您的 Lambda 函数中的私有 IP 连接起来。这意味着您可以通过 Lambda 函数访问您的 VPC。

    【讨论】:

    • 这不回答用户问题
    • @Ka Hou leong,感谢您的意见。在设置 lambda 函数时,在 Configurations -> Advanced Settings 下,我可以连接到选择的 VPC(我已经完成了)。在该 VPC 上,我使用 Apache 和一个示例网页运行 Lamp(目前唯一的实例)。你是这个意思吗?我的测试是否已经证明我可以成功连接到 EC2 实例?我正在努力查看使用 Lambda 是否可以简单地获取该 index.html 页面的标题?谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-02
    • 1970-01-01
    • 2018-09-11
    • 1970-01-01
    • 2021-09-12
    相关资源
    最近更新 更多