论坛

通知事项
全部清除

Amazon API 网关简介  


 太极
帖子:83
主持人
(@太极)
会员
已加入:8个月前

Amazon API 网关简介

在本实验中,您将创建一个简单的FAQ微服务。该微服务将使用调用Lambda函数的API网关端点返回一个包含随机问答对的JSON对象。先决条件:学生应在参加本实验之前参加实验“ AWS 拉姆达 简介”。

 

0
 

Amazon API 网关简介

55分钟 自由

SPL-58-版本2.0.14

©2020 Amazon Web 服务,Inc.及其分支机构。版权所有。未经Amazon Web 服务,Inc.事先书面许可,不得全部或部分复制或重新分发此作品。禁止商业复制,借出或出售。

错误或纠正?给我们发电子邮件 [电子邮件 protected].

还有其他问题吗?与我们联系  //aws.amazon.com/contact-us/aws-training/

总览

在本实验中,您将创建一个简单的FAQ微服务。该微服务将使用来返回一个包含随机问答的JSON对象。 Amazon API 网关 端点调用  AWS 拉姆达  功能。这是微服务的架构模式:

涵盖的主题

在本实验结束时,您将能够:

  • 创建一个AWS 拉姆达 函数
  • 创建Amazon API 网关终端节点
  • 使用Amazon 云 Watch调试API网关和Lambda

先决条件

一定的编程经验和对应用程序开发的熟悉会有所帮助,但对于运行实验室而言并非必需。但是,您应该已经完成​​了  AWS 拉姆达 简介 在进行此练习之前先进行自定进度的练习。

其他AWS服务

在您访问本实验期间,IAM策略会禁用该实验所需的其他AWS服务。此外,此实验室中使用的服务的功能仅限于实验室所需的功能,在某些情况下,作为实验室设计的有意方面,甚至会进一步受到限制。访问其他服务或执行本实验指南中未提供的操作时,可能会遇到错误。

技术概念

微服务架构

 微服务架构风格 是一种将单个应用程序开发为 一整套小服务,每个进程都在自己的进程中运行并与轻量级机制(通常是HTTP资源API)进行通信。这些服务围绕业务功能构建,并且可以由全自动部署机制独立部署。这些服务的集中管理几乎没有,可以用不同的编程语言编写并使用不同的数据存储技术。”  -  詹姆斯·刘易斯和马丁·福勒

微服务架构的想法是采用一个大型,复杂的系统并将其分解为 独立的,分离的服务,易于管理和扩展。这使开发人员可以实现其关键设计目标,例如可扩展性,可用性和可维护性。

Amazon API 网关和AWS 拉姆达 提供了Web服务的完美结合,可以轻松构建,交付和维护一套微服务,这些微服务可以成为复杂软件系统的基础。

在本实验中,您将学习如何开发,部署和调试代表大型系统一部分的简单微服务。它包括两部分:RESTful API 和用户点击端点时执行的功能。

应用程序编程接口(API)

一个  应用程序接口 是一组指令,用于定义开发人员如何与应用程序交互。 API 背后的想法是创建一个 标准化方法 连接应用程序提供的各种服务。 API 旨在与 软件开发套件(SDK),它是一组工具,使开发人员可以轻松地基于API创建下游应用程序。

API 优先策略

许多软件组织正在采用  API 优先策略,堆栈中的每个服务都首先发布,并且始终以API的形式发布。设计服务时,很难知道可能想要利用该服务的所有各种应用程序。例如,此实验室中的FAQ服务非常适合在外部网站上植入FAQ页面。但是,可以认为云教育公司也希望在其培训材料中获取有关闪存卡或培训文档的常见问题解答。如果这只是一个静态网站,那么对于教育公司来说,提取过程将非常困难。通过提供可以 以标准化格式消费,微服务可以围绕服务以及最初未考虑的用例开发生态系统。

RESTful API

代表性状态转移(REST)是指遵循六个约束的体系结构:

  • 关注点分离 通过客户端-服务器模型。
  •  完全存储在客户端上,客户端与服务器之间的通信是 无状态的.
  • 客户将  快取  数据以提高网络效率。
  • 有一个统一的界面(以  API )在服务器和客户端之间。
  • 随着系统复杂程度的提高,  层数  介绍。可能有多层RESTful组件。
  • 跟随 按需编码 模式,可以在不更新客户端的情况下即时下载代码(在我们的示例中是Lambda实现)并进行更改。

本实验遵循RESTful模型。客户端将请求发送到后端Lambda函数(服务器)。服务的逻辑封装在Lambda函数中,并为客户端提供统一的接口。

构建RESTful API 的最佳实践

建立API的主要目标是协助建立 创新生态系统 围绕您的服务集。因此,使您的API直观易用非常重要。这是要遵循的常见命名和方法方案:

运作方式 网址 功能
得到 /问题 返回所有问题
得到 / questions / 17 返回问题编号17
开机自检 /问题 提出一个新问题
/ questions / 17 更新问题编号17
补丁 / questions / 17 部分更新问题编号17
删除 / questions / 17 删除问题编号17

请注意如何获取特定问题,API端点是  /问题/名称 但反而 /问题/标识符。这样一来,API设计人员就可以使用以下功能提供返回问题组(可能是所有问题)的功能:  /问题 端点以及带有 /问题/标识符。有关更多信息,请参见本实验指南末尾的其他资源部分。

可以查看RESTful API 的几个好例子:

Amazon API 网关和AWS 拉姆达

使用Amazon API 网关的微服务包括 定义的资源  关联方法 (GET,POST,PUT等),以及API网关中的 后端目标。在本实验中,后端目标将是Lambda函数。但是,后端目标可以是另一个HTTP端点(第三方API或侦听Web服务器),AWS服务代理或要用作占位符的模拟集成。

Amazon API 网关

API 网关是AWS提供的一项托管服务,使创建,部署和维护API变得容易。 API 网关包括以下功能:

  • 转换传入API请求的正文和标头以匹配后端系统
  • 转换外发API响应的主体和标头以匹配API要求
  • 通过AWS Identity 和 Access Management控制API访问
  • 创建并应用API密钥进行第三方开发
  • 启用Amazon 云 Watch集成以进行API监控
  • 通过Amazon 云 Front缓存API响应以缩短响应时间
  • 将API部署到多个阶段,从而可以轻松区分开发,测试,生产和版本控制
  • 将自定义域连接到API
  • 定义模型以帮助标准化您的API请求和响应转换

Amazon API 网关和AWS 拉姆达 术语

  • 资源: 表示为URL端点和路径。例如, api.mysite.com/questions。您可以将HTTP方法与资源相关联,并为每个方法定义不同的后端目标。在微服务架构中,资源将代表系统中的单个微服务。
  • 方法:  在API 网关 中,方法是通过资源路径和HTTP动词(例如GET,POST和DELETE)的组合来标识的。
  • 方法要求:  API 网关中的方法请求设置存储方法授权设置,并定义从客户端接收的URL查询字符串参数和HTTP请求标头。
  • 整合要求: 集成请求设置定义了与该方法一起使用的后端目标。您还可以在其中定义映射模板,以转换传入请求以匹配后端目标期望的内容。
  • 整合回应: 集成响应设置是在后端目标的响应和API 网关 中的方法响应之间定义映射的位置。您还可以转换从后端目标返回的数据以适合最终用户和应用程序的期望。
  • 方法响应: 方法响应设置定义方法响应类型,其标题和内容类型。
  • 模型:  在API网关中,模型定义了某些数据的格式,也称为架构或形状。您创建并使用模型可以更轻松地创建映射模板。由于API 网关 旨在主要用于JavaScript对象表示法(JSON)格式的数据,因此API 网关 使用JSON模式来定义数据的预期模式。
  • 阶段:  在API网关中,一个阶段定义了可访问API部署的路径。这通常用于在版本之间以及开发与生产端点之间进行偏离。
  • 蓝图:  拉姆达 蓝图是lambda函数的示例,可以用作构建新Lambda函数的基础。

开始实验

  1. 在屏幕顶部,通过点击启动实验室 开始实验

这将开始配置实验室资源的过程。将显示提供实验室资源的估计时间。您必须等待资源调配后才能继续。

 如果系统提示您输入令牌,请使用分配给您的令牌(或您购买的积分)。

  1. 通过单击打开您的实验室 打开控制台

这将自动将您登录到AWS管理控制台。

 除非有指示,否则请勿更改地区.

常见的登录错误

错误:联合登录凭证

如果看到此消息:

  • 关闭浏览器选项卡以返回到您的初始实验室窗口
  • 等待几秒钟
  • 请点击  打开控制台  再次

现在,您应该能够访问AWS管理控制台。

错误:您必须先注销

如果您看到此消息, 您必须先注销,然后再登录其他AWS账户:

  • 请点击  点击这里
  • 关闭浏览器选项卡以返回到初始Qwiklabs窗口
  • 请点击  打开控制台  再次

任务1:创建Lambda函数

  1. 在里面   AWS 管理控制台,在 服务 菜单,点击  拉姆达 .

  2. 请点击  创建功能

 蓝图 是用于编写Lambda函数的代码模板。为标准Lambda触发器提供了蓝图,例如创建Alexa技能和处理Amazon Kinesis Firehose流。本实验为您提供了预先编写的Lambda函数,因此您将使用  从头开始.

  1. 下面  从头开始, 配置:
  • 函数名称: 
  • 运行: Node.js 12.x
  • 扩大   选择或创建执行角色
  • 执行角色: 使用现有角色
  • 现有角色:  拉姆达 基本执行
  • 请点击  创建功能

将显示一个页面,其中包含您的功能配置。

  1. 向下滚动到 功能码 部分并删除代码编辑器中显示的所有代码。

  2. 复制下面显示的代码,并将其粘贴到index.js选项卡中。

var json = {
  "service": "lambda",
  "reference": "//aws.amazon.com/lambda/faqs/",
  "questions": [{
    "q": "What is  AWS   拉姆达 ?",
    "a": " AWS   拉姆达  lets you run code without provisioning  要么  managing servers. You pay only for the compute time you consume - there is no charge when your code is not running. With  拉姆达 , you can run code for virtually any type of application  要么  backend service - all with zero administration. Just upload your code  和   拉姆达  takes care of everything required to run  和  scale your code with high availability. You can set up your code to automatically trigger from other  AWS  services  要么  call it directly from any web  要么  mobile app."
  },{
   "q":"What events can trigger an  AWS   拉姆达  function?",
   "a":"You can use  AWS   拉姆达  to respond to table updates in Amazon DynamoDB, modifications to objects in Amazon S3 buckets, logs arriving in Amazon  云 Watch logs, incoming emails to Amazon Simple Email Service, notifications sent from Amazon SNS, messages arriving in an Amazon Kinesis stream, client data synchronization events in Amazon Cognito,  和  custom events from mobile applications, web applications,  要么  other web services. You can also invoke a  拉姆达  function on a defined schedule using the  AWS   拉姆达  console."
  },{
   "q":"When should I use  AWS   拉姆达  versus Amazon EC2?",
   "a":"Amazon Web 服务 offers a set of compute services to meet a range of needs. Amazon EC2 offers flexibility, with a wide range of instance types  和  the option to customize the operating system, network  和  security settings,  和  the entire software stack, allowing you to easily move existing applications to the cloud. With Amazon EC2 you are responsible for provisioning capacity, monitoring fleet health  和  performance,  和  designing for fault tolerance  和  scalability.  AWS  Elastic Beanstalk offers an easy-to-use service for deploying  和  scaling web applications in which you retain ownership  和  full control over the underlying EC2 instances. Amazon Elastic Container Service is a scalable management service that supports  码头工人  containers  和  allows you to easily run distributed applications on a managed cluster of Amazon EC2 instances.  AWS   拉姆达  makes it easy to execute code in response to events, such as changes to Amazon S3 buckets, updates to an Amazon DynamoDB table,  要么  custom events generated by your applications  要么  devices. With  拉姆达  you do not have to provision your own instances;  拉姆达  performs all the operational  和  administrative activities on your behalf, including capacity provisioning, monitoring fleet health, applying security patches to the underlying compute resources, deploying your code, running a web service front end,  和  monitoring  和  logging your code.  AWS   拉姆达  provides easy scaling  和  high availability to your code without additional effort on your part."
  },{
    "q":"What kind of code can run on  AWS   拉姆达 ?",
    "a":" AWS   拉姆达  offers an easy way to accomplish many activities in the cloud.  对于  example, you can use  AWS   拉姆达  to build mobile back-ends that retrieve  和  transform data from Amazon DynamoDB, handlers that compress  要么  transform objects as they are uploaded to Amazon S3, auditing  和  reporting of  API  calls made to any Amazon Web Service,  和  server-less processing of streaming data using Amazon Kinesis."
  },{
    "q":"What languages does  AWS   拉姆达  support?",
    "a":" AWS   拉姆达  supports code written in Node.js (JavaScript), Python,  和  Java (Java 8 compatible). Your code can include existing libraries, even native ones.  拉姆达  functions can easily launch processes using languages supported by Amazon  的Linux , including Bash, Go,  和  Ruby.  请  read our documentation on using Node.js, Python  和  Java."
  },{
    "q":"Can I access the infrastructure that  AWS   拉姆达  runs on?",
    "a":"No.  AWS   拉姆达  operates the compute infrastructure on your behalf, allowing it to perform health checks, apply security patches,  和  do other routine maintenance."
  },{
    "q":"How does  AWS   拉姆达  isolate my code?",
    "a":"Each  AWS   拉姆达  function runs in its own isolated environment, with its own resources  和  file system view.  AWS   拉姆达  uses the same techniques as Amazon EC2 to provide security  和  separation at the infrastructure  和  execution levels."
  },{
    "q":"How does  AWS   拉姆达  secure my code?",
    "a":" AWS   拉姆达  stores code in Amazon S3  和  encrypts it at rest.  AWS   拉姆达  performs additional integrity checks while your code is in use."
  },{
    "q":"What is an  AWS   拉姆达  function?",
    "a":"The code you run on  AWS   拉姆达  is uploaded as a  拉姆达  function. Each function has associated configuration information, such as its name, description, entry point,  和  resource requirements. The code must be written in a 无状态的 style i.e. it should assume there is no affinity to the underlying compute infrastructure. Local file system access, child processes,  和  similar artifacts may not extend beyond the lifetime of the request,  和  any persistent state should be stored in Amazon S3, Amazon DynamoDB,  要么  another Internet-available storage service.  拉姆达  functions can include libraries, even native ones."
  },{
    "q":"Will  AWS   拉姆达  reuse function instances?",
    "a":"To improve performance,  AWS   拉姆达  may choose to retain an instance of your function  和  reuse it to serve a subsequent request, rather than creating a new copy. Your code should not assume that this will always happen."
  },{
    "q":"What if I need scratch space on disk for my  AWS   拉姆达  function?",
    "a":"Each  拉姆达  function receives 500MB of non-persistent disk space in its own /tmp directory."
  },{
    "q":"Why must  AWS   拉姆达  functions be 无状态的?",
    "a":"Keeping functions 无状态的 enables  AWS   拉姆达  to rapidly launch as many copies of the function as needed to scale to the rate of incoming events. While  AWS   拉姆达 's programming model is 无状态的, your code can access stateful data by calling other web services, such as Amazon S3  要么  Amazon DynamoDB."
  },{
    "q":"Can I use threads  和  processes in my  AWS   拉姆达  function code?",
    "a":"Yes.  AWS   拉姆达  allows you to use normal language  和  operating system features, such as creating additional threads  和  processes. Resources allocated to the  拉姆达  function, including memory, execution time, disk,  和  network use, must be shared among all the threads/processes it uses. You can launch processes using any language supported by Amazon  的Linux ."
  },{
    "q":"What restrictions apply to  AWS   拉姆达  function code?",
    "a":" 拉姆达  attempts to impose few restrictions on normal language  和  operating system activities, but there are a few activities that are disabled: Inbound network connections are managed by  AWS   拉姆达 , only TCP/IP sockets are supported,  和  ptrace (debugging) system calls are restricted. TCP port 25 traffic is also restricted as an anti-spam measure."
  },{
    "q":"How do I create an  AWS   拉姆达  function using the  拉姆达  console?",
    "a":"You can author the code for your function using the inline editor in the  AWS   拉姆达  console. You can also package the code (and any dependent libraries) as a ZIP  和  upload it using the  AWS   拉姆达  console from your local environment  要么  specify an Amazon S3 location where the ZIP file is located. Uploads must be no larger than 50MB (compressed). You can use the  AWS  Eclipse plugin to author  和  deploy  拉姆达  functions in Java  和  Node.js. If you are using Node.js, you can author the code for your function using the inline editor in the  AWS   拉姆达  console. Go to the console to get started."
  },{
    "q":"How do I create an  AWS   拉姆达  function using the  拉姆达  CLI?",
    "a":"You can package the code (and any dependent libraries) as a ZIP  和  upload it using the  AWS  CLI from your local environment,  要么  specify an Amazon S3 location where the ZIP file is located. Uploads must be no larger than 50MB (compressed). Visit the  拉姆达  Getting Started guide to get started."
  },{
    "q":"Which versions of Python are supported?",
    "a":" 拉姆达  provides a Python 2.7-compatible runtime to execute your  拉姆达  functions.  拉姆达  will include the latest  AWS  SDK for Python (boto3) by default."
  },{
    "q":"How do I compile my  AWS   拉姆达  function Java code?",
    "a":"You can use standard tools like Maven  要么  Gradle to compile your  拉姆达  function. Your build process should mimic the same build process you would use to compile any Java code that depends on the  AWS  SDK. Run your Java compiler tool on your source files  和  include the  AWS  SDK 1.9  要么  later with transitive dependencies on your classpath.  对于  more details, see our documentation."
  },{
    "q":"What is the JVM environment  拉姆达  uses for execution of my function?",
    "a":" 拉姆达  provides the Amazon  的Linux  build of openjdk 1.8."
  }
  ]
}

exports.handler = function(event, context) {
    var rand = Math.floor(Math.random() * json.questions.length);
    console.log("Quote selected: ", rand);

    var response = {
         身体 : JSON.stringify(json.questions[rand])
    };
    console.log(response);
    context.succeed(response);
};

检查代码。它执行以下步骤:

  • 定义常见问题(FAQ)列表
  • 返回随机的常见问题
  1. 向下滚动到 基本设置 部分,然后单击  编辑

  2. 对于  描述,输入: 

  3. 请点击  

AWS 拉姆达 函数可以是 已触发 通过活动自动执行,例如Amazon Kinesis接收数据或在Amazon DynamoDB数据库中更新数据。对于本实验,每当调用API 网关 时,您都将触发Lambda函数。

  1. 向上滚动到  设计师  部分。

您将创建一个API 网关 端点。

  API 端点是指API的主机名。 API 端点可以是边缘优化的,也可以是区域端点的,具体取决于您大多数API流量的来源。创建API时,请选择特定的端点类型。

  1. 请点击   Add trigger 然后配置:
  • 选择一个触发器:  API 网关
  • API :  创建一个新的API
  • 选择一个模板: REST API
  •   打开
  • 扩大   其他设置
  • API 名称: 
  • 部署阶段: 
  1. 在屏幕的右下角,点击 .

  2. 请点击   在右上角。

 您已成功创建Lambda函数。这还创建了一个默认的API网关,它将触发Lambda函数。

任务2:测试Lambda函数

您将看到FAQ 拉姆达 功能页面。

  1.   API 网关,单击向右箭头  查看您的API的详细信息。

  2. 复制   API 端点 到剪贴板,然后:

  • 在新的浏览器标签中,将  API 端点
  •   输入  转到URL

将打开一个新的浏览器选项卡。您应该会看到一个随机的FAQ条目,例如:

随机常见问题

拉姆达 函数也可以单独进行测试。

  1. 关闭“常见问题解答”浏览器选项卡,然后返回显示Lambda管理控制台的Web浏览器选项卡。

  2. 在屏幕顶部,单击  测试  然后配置:

  • 活动名称: 
  • 删除提供的键和值,并保留为空  {}  表示一个空的JSON对象:
  {}  
  1. 在屏幕底部,单击  创建

  2. 在屏幕顶部,点击  测试

  3. 在里面  执行结果:成功 窗口,展开   细节 .

输出显示包装在  身体  参数。

执行结果下方是两列。的  概要  显示Lambda函数的总执行时间和消耗的资源。的 日志输出 显示日志记录信息。在本节中,您将看到所有控制台日志以及所有错误消息。

  1. 点击 监控方式  标签。

  2. 请点击  在CloudWatch中查看日志

  3. 单击日志流之一。

您将看到与Lambda管理控制台中显示的事件数据相同的事件数据。检查每行的内容以查看日志信息。

结论

 恭喜你!您已完成本实验,并已成功使用Amazon API 网关和AWS 拉姆达 创建了微服务。您现在知道如何:

  • 创建一个AWS 拉姆达 函数
  • 创建Amazon API 网关终端节点
  • 使用Amazon 云 Watch调试API网关和Lambda

结束实验室

请按照以下步骤关闭控制台,结束实验并评估体验。

  1. 返回AWS管理控制台。

  2. 在导航栏上,单击  [电子邮件 protected]<AccountNumber>,然后单击 登出 .

  3. 请点击   结束实验室

  4. 请点击  

  5. (可选的):

  • 选择适用的星数 
  • 输入评论
  • 请点击   提交

    • 1星=非常不满意
    • 2星=不满意
    • 3星=中立
    • 4星=满意
    • 5星=非常满意

如果您不想提供反馈,则可以关闭对话框。

下一步

本实验旨在介绍微服务架构模式,它们为何重要以及如何设置基本的开放式API。

现在,您已经完成了实验,请进一步!您可以执行以下其他操作来扩展您自己的AWS账户中的微服务功能:

  • 通过集成AWS IAM来控制对端点的访问。
  • 将带有问题的JSON对象移至DynamoDB之类的数据存储中。
  • 实现URL参数,该参数将返回特定问题。
  • 实现一个返回所有问题的端点。
  • 实施将问题添加到列表的新方法。
  • 检出无服务器开发框架,例如 无服务器.

其他资源

l4hqBAl.png(814×13269)

 

分享: