使用 Amazon API Gateway

可以在 HTTPS URL 上调用 AWS Lambda 函数。可以在 GET、POST、PUT 上执行。调用 HTTPS URL 时,AWS Lambda 函数也会触发,使用 get/post 传递给 HTTPS 的数据可在 AWS Lambda 内部使用,以用于插入 DynamoDB 或发送邮件等。

本章详细讨论了使用 AWS lambda 和 API Gateway 所涉及的各种流程。

涉及的流程

以下是使用 AWS lambda 和 API Gateway 所涉及的流程 −

  • 创建 IAM 角色以获取权限
  • 创建 AWS lambda 函数
  • 创建 API Gateway
  • 将 lambda 函数链接到 api 网关
  • 将数据传递到 api 网关

此处提供了一个解释 API 网关和 AWS Lambda 工作原理的基本图表 −

涉及的流程

本章将通过相关屏幕截图进一步详细解释这些流程。

创建 IAM 角色以获取权限

从 Amazon 服务(如下所示)中选择 IAM 以创建 Lambda 函数要使用的角色。

创建 Iam

转到 IAM 并从左侧部分选择角色(如下所示)−

仪表板菜单

单击创建为 Lambda 函数添​​加角色

其他资源

选择 Lambda 并单击底部的权限。选择 API 网关和 Lambda 所需的权限。

选择类型

在搜索中搜索 API 网关,它将列出所有相关权限。这里我们选择了对 API 网关的完全访问权限,如下所示 −

附加权限

现在,搜索 API 网关,它将列出所有相关权限。这里我们选择了对 API 网关的完全访问权限,如下所示 −

Api Gateway

您还必须对策略重复相同的过程。

Policies

选择完必要的策略后,单击 Review 进行下一步。根据您的选择输入角色名称,如下所示 −

Review

它显示附加到角色的策略。单击创建角色,我们就完成了角色创建,可以继续执行 lambda 函数了。

创建 AWS Lambda 函数

转到 AWS 服务并单击 lambda 服务以创建一个函数,用于将其与 api 网关连接起来。

Compute

Lambda 函数的 UI 屏幕如下所示。单击创建函数按钮继续创建 Lambda 函数。

UI Screen

输入函数名称并选择我们上面创建的现有角色。

输入名称

它会闪烁一条消息,表示名为 lambdawithapigateway 的函数已成功创建。

Lambda Gateway

请注意,这里我们将使用 nodejs 运行时来编写代码。带有helloworld消息的AWS代码如下所示−

环境

AWS Lambda 代码存在于 index.js 文件中。名为 handler 的函数具有参数,即 events、contextcallback

回调函数基本上包含错误和成功消息。请注意,这里我们没有任何与错误相关的代码,因此传递了 null,成功消息是 HelloWorld from lambda.

最后,保存添加的更改,让我们继续将 Lambda 函数添​​加到 API 网关。

创建 API 网关

登录您的 AWS 帐户并打开 API 网关,如下所示 −

Content Delivery

单击 API 网关,它将带您进入可以创建新 API 网关的屏幕。

Amazon Gateway

单击 创建 API 并添加详细信息,如下所示 −

新建

单击屏幕右侧的创建 API按钮。这将在屏幕左侧显示新创建的 API。

创建新 API

单击 操作 下拉菜单为 API 创建新资源。

操作下拉菜单

现在,创建一个新资源,如下所示 −

资源组

输入 资源名称,如下所示。您将在最后创建的 URL 中看到输入的资源名称。单击创建资源,您将在屏幕上看到如下内容 −

子资源 资源服务

向创建的资源添加 GET/POST 方法,如下所示。从操作下拉菜单中选择方法。

获取方法

单击GET方法将方法添加到 API。

Api 方法

下一步是将其与 Lambda 函数集成的集成。现在将 Lambda 函数添​​加到其中,如下所示 −

Get Setup

将 Lambda 函数链接到 API 网关

选择之前创建的 lambda 函数。

hello Setup

保存更改,您将看到一个对话框,要求授予权限,如下所示 −

添加权限

单击确定以获取权限。这是 API 网关 HTTP 请求和 Lambda 函数之间的执行详细信息 −

方法执行

现在,让我们部署 API 网关更改。为此,我们需要从操作下拉列表中选择部署 API,如下所示 −

部署 API

选择部署 API。它将询问部署状态。从部署阶段下拉菜单中选择新阶段,并将阶段名称添加为生产

选择部署

单击部署按钮,它将重定向到如下所示的 URL −

单击部署

从左侧选择GET方法以获取 URL。在新选项卡中打开 URL 以查看来自 Lambda 函数的消息。

选择获取

这是使用 AWS Lambda 和 AWS API 网关的基本示例。在上面的例子中,我们在 Lambda 函数中对消息进行了硬编码。

现在,让我们从 API 网关获取消息详细信息。如果必须从不同的域调用 HTTPS 调用,例如对 API 的 AJAX 调用,我们需要为创建的 API 网关启用 CORS。

选择为 API 创建的源,然后单击 Actions 下拉菜单 −

Hello Method

现在,启用 CORS 将打开以下屏幕 −

启用 Cors

您可以使用几种方法来启用 CORS。 Access-Control-Allow-Origin 标记为 *,表示允许从任何域获取 API 网关的内容。

您还可以指定要与 API 配合使用的域名。单击 启用 CORS 并替换现有 CORS 标头 按钮,它将显示确认消息,如下所示 −

Conform Method

单击 是,替换现有值 按钮以启用它。 启用 CORS 屏幕如下所示 −

替换现有值

将数据传递到 API 网关

打开在 API 网关中创建的 API displayhelloworld 如下所示 −

传递数据

单击 集成请求 发送数据,如下所示 −

集成请求

选择 Body Mapping Templates 并添加 Content-Type此示例为 application/json。单击添加的内容类型,添加以下详细信息 −

Body Mapping

现在,添加 JSON 格式的模板,如下所示 −

Json

请注意,我们已将消息作为参数,以从 API 网关获取数据并将其与 AWS Lambda 共享。获取详细信息的语法如上所示。

现在,部署 API 以使更改在 API 网关 URL 上可用。为此,我们需要更改 Lambda 函数以根据 API 网关 URL 显示数据。Lambda 函数的代码如下所示。请注意,我们正在从事件中获取消息并传递给回调。

exports.handler = (event, context, callback) => {
   let message = event.message;
   callback(null, message);
};

现在,保存 Lambda 中的更改并点击 URL 查看更改。观察下面给出的屏幕截图 −

Observe Screenshot

单击如下所示的 URL −

https://rw2ek1xung.execute-api.us-east-
1.amazonaws.com/prod/hello?message=hello%20from%20api%20gateway

请注意,我们在这里将消息作为查询字符串传递给 GET url。然后您可以观察到如下所示的输出 −

Passing Message

它从 URL 读取发送到消息的详细信息并将其显示在浏览器中。