title: AWS之Qwiklab

subtitle: 2. Qwiklab'实验-API Gateway, AWS Lambda'

date: 2018-09-20 17:29:20

Introduction to Amazon API Gateway

Amazon API Gateway简介

知识梳理

1. 技术概念

微服务架构:

“微服务架构格式是一种将单个应用程序作为一套小型服务开发的方法,每个小型服务部在自己的流程中运行,并与轻量级机制(通常是HTTP资源API)进行通信。这些服务围绕业务功能构建,可以完全独立部署自动部署机制。这些服务至少集中管理,可以用不同的编程语言编写,并使用不同的数据存储技术。“

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

Amazon API Gateway

Amazon API Gateway和AWS Lambda提供Web服务的完美组合,可轻松构建,交付和维护一套可作为复杂软件系统基础的微服务。

应用程序编程接口(API):

一个应用程序编程接口是一组指令,它定义开发人员如何与应用程序果面。AP背后的想法是创建一种标准化方法来连接应用程序提供的各种服务。AP1旨在与软件开发工具包(SDK)一起使用,后者是一组工具,允许开发人员基于API轻松创建下游应用程

序。

API优先战略:

许多软件组织正在采用API-First策略,其中堆代中的每个服务都是第一个,并且始终作为APl发布。RESTful API:表示性状态转移(REST)是指遵循六个约束的体系结构:

  • 通过客户端-服务器模型分离关注点。
  • 状态完全存储在客户端上,客户端和服务器之间的通信是无状态的。
  • 客户端将缓存数据以提高网络效率
  • 服务器和客户端之间有一个统一的接口(以API的形式)。
  • 随着复杂性被添加到系统中,引入了层。可能有多层REST利组件。
  • 遵循按需代码模式,其中代码可以即时下载,并且无需更新客户说明可进行再改。

2. 定义与作用

Amazon API Gateway 是一项 AWS 服务,让开发人员能够创建、发布、维护、监控和保护任何规模的 API。您可以创建能够访问 AWS、其他 Web 服务以及存储在 AWS 云中的数据的 API。 可将 API Gateway 视为云中的一个背板,用于连接 AWS 服务和其他公有或私有网站。它可以提供一致的 RESTful 应用程序编程接口 (API),让移动和 Web 应用程序可以访问 AWS 服务。

API Gateway 的架构如右图所示。

3. 核心概念

APIGateway是AwS提供的托管服务,可以轻松创建,部署和维护API。APIGateway包含以下功能:

  • 转换传入API请求的正文和标头以匹配后端系统

  • 转换传出API响应的正文和标题以匹配API要求

  • 通过Amazon Identity and Access Management控制API访问

  • 为第三方开发创建和应用API密钥

  • 启用Amazon CloudWatch 集成以进行API监控

  • 通过Amazon CloudFront缓存API响应,以缩短响应时间

  • 将API部署到多个阶段,可以轻松区分开发,测试,生产和版本控制

  • 将自定义域连接到API

  • 定义模型以帮助标准化API请求和响应转换

4. Amazon API网关和AWS Lambda术语

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

5. API Gateway 的架构如图所示:

# Node.js 8.10
exports.handler = async (event) => {
// TODO implement
const response = {
statusCode: 200,
body: JSON.stringify('Hello from Lambda!')
};
return response;
};

Introduction to AWS Lambda

AWS Lambda简介

知识梳理

1. 定义与作用

AWS Lambda 是一项计算服务,使客户无需预配置或管理服务器即可运行代码。AWS Lambda 只在需要时执行客户代码并自动缩放,从每天几个请求到每秒数千个请求。只需按消耗的计算时间付费 – 代码未运行时不产生费用。借助 AWS Lambda,几乎可以为任何类型的应用程序或后端服务运行代码,而且无需执行任何管理。AWS Lambda 在可用性高的计算基础设施上运行您的代码,执行计算资源的所有管理工作,其中包括服务器和操作系统维护、容量预置和自动扩展、代码监控和记录。只需要以 AWS Lambda 支持的一种语言 (目前为 Node.js、Java、C#、Go 和 Python) 提供您的代码。

2. AWS Lambda使用场景

AWS Lambda 是很多应用程序场景的理想计算平台,只要可以用 AWS Lambda 支持的语言 (即,Node.js、Java、Go、C# 和 Python) 编写应用程序代码并在 AWS Lambda 标准运行时环境和 Lambda 提供的资源中运行。

在使用 AWS Lambda 时,您只需负责自己的代码。AWS Lambda 管理提供内存、CPU、网络和其他资源均衡的计算机群。这是以灵活性为代价的,这意味着您不能登录计算实例,或自定义操作系统或语言运行时。通过这些约束,AWS Lambda 可以代表您执行操作和管理活动,包括预置容量、监控机群运行状况、应用安全补丁、部署您的代码以及监控和记录您的 Lambda 函数日志。

如果您需要管理自己的计算资源,Amazon Web Services 还提供了其他计算服务以满足您的需求。

  • Amazon Elastic Compute Cloud (Amazon EC2) 服务提供灵活性和各种 EC2 实例类型供您选择。它允许您选择自定义操作系统、网络和安全性设置以及整个软件堆栈,但您负责预置容量、监控机群运行状况和性能以及使用可用区来实现容错。
  • Elastic Beanstalk 提供易用的服务,您可将应用程序部署和扩展到 Amazon EC2 上,在其中您保留对底层 EC2 实例的所有权和完整控制权。

3. AWS 语言工具选项

AWS 语言工具选项
Node.js AWS Lambda 控制台;Visual Studio,带 IDE 插件(请参阅 Visual Studio 中的 AWS Lambda 支持)
Python AWS Lambda 控制台;您自己的编写环境;有关更多信息,请参阅 部署代码和创建 Lambda 函数。

4. 用于使用 Python 编写 Lambda 函数的编程模型

https://docs.aws.amazon.com/zh_cn/lambda/latest/dg/python-programming-model.html

基础Lambda 函数:
exports.handler = (event, context, callback) => {
// 字符串“Hello world!”已成功。
callback(null, 'Hello world!');
};
Lambda 代码说明(Python3.6):
import boto3
import os
import sys
import urllib
from PIL import Image
import PIL.Image s3_client = boto3.client('s3') def resize_image(image_path, resized_path):
with Image.open(image_path) as image:
image.thumbnail((128,128))
image.save(resized_path) def handler(event, context):
for record in event['Records']:
bucket = record['s3']['bucket']['name']
key = record['s3']['object']['key']
raw_key = urllib.parse.unquote_plus(key)
download_path = '/tmp/{}'.format(key)
upload_path = '/tmp/resized-{}'.format(key) s3_client.download_file(bucket, raw_key, download_path)
resize_image(download_path, upload_path)
s3_client.upload_file(upload_path,
'{}-resized'.format(bucket),
'thumbnail-{}'.format(raw_key),
ExtraArgs={'ContentType': 'image/jpeg'})
Lambda 代码之S3 put测试:
{
"Records": [
{
"eventVersion": "2.0",
"eventTime": "1970-01-01T00:00:00.000Z",
"requestParameters": {
"sourceIPAddress": "127.0.0.1"
},
"s3": {
"configurationId": "testConfigRule",
"object": {
"eTag": "0123456789abcdef0123456789abcdef",
"sequencer": "0A1B2C3D4E5F678901",
"key": "HappyFace.jpg",
"size": 1024
},
"bucket": {
"arn": "arn:aws:s3:::mybucket",
"name": "dingjianfeng-993",
"ownerIdentity": {
"principalId": "EXAMPLE"
}
},
"s3SchemaVersion": "1.0"
},
"responseElements": {
"x-amz-id-2": "EXAMPLE123/5678abcdefghijklambdaisawesome/mnopqrstuvwxyzABCDEFGH",
"x-amz-request-id": "EXAMPLE123456789"
},
"awsRegion": "us-west-2",
"eventName": "ObjectCreated:Put",
"userIdentity": {
"principalId": "EXAMPLE"
},
"eventSource": "aws:s3"
}
]
}

5. AWS Lambda应用程序流程

Qwiklab'实验-API Gateway, AWS Lambda'的更多相关文章

  1. 结合API Gateway和Lambda实现登录时的重定向和表单提交请求(Python3实现)

    1. 创建Lambda函数,代码如下: from urllib import parse def lambda_handler(event, context): body = event['body' ...

  2. AWS Lambda 借助 Serverless Framework,迅速起飞

    前言 微服务架构有别于传统的单体式应用方案,我们可将单体应用拆分成多个核心功能.每个功能都被称为一项服务,可以单独构建和部署,这意味着各项服务在工作时不会互相影响 这种设计理念被进一步应用,就变成了无 ...

  3. How to return plain text from AWS Lambda & API Gateway

    With limited experience in AWS Lambda & API Gateway, it's struggling to find the correct way to ...

  4. 使用AWS Lambda,API Gateway和S3 Storage快速调整图片大小

    https://www.obytes.com/blog/2019/image-resizing-on-the-fly-with-aws-lambda,-api-gateway,-and-s3-stor ...

  5. AWS lambda DynamoDB api gateway之间的连接

    创建角色 附加策略 AmazonDynamoDBFullAccess AWSLambdaDynamoDBExecutionRole 创建DynamoDB表 在表的项目中创建内容 this pipi 打 ...

  6. 基于aws api gateway的asp.net core验证

    本文是介绍aws 作为api gateway,用asp.net core用web应用,.net core作为aws lambda function. api gateway和asp.net core的 ...

  7. AWS API Gateway Swagger定义

    导出Swagger接口定义文件 在AWS API Gateway界面上,可以导出swagger接口定义文件. 而后利用Node js swagger-ui 依赖,生成swagger接口地址 Cloud ...

  8. Aws api gateway Domain name

    Set Up a Custom Domain Name for an API Gateway API The following procedure describes how to set up a ...

  9. Qwiklab'实验-DynamoDB, Redshift, Elasticsearch'

    title: AWS之Qwiklab subtitle: 4. Qwiklab'实验-Amazon DynamoDB, Amazon Redshift, Elasticsearch Service' ...

随机推荐

  1. 关于MySQL日期操作函数 date_formate 的使用

    基本语法:DATE_FORMAT(date,format)说明:date 参数是合法的日期.format 规定日期/时间的输出格式.可以用的格式主要有格式 描述%a 缩写星期名%b 缩写月名%c 月, ...

  2. Hadoop 技术笔记

    Flume与Kafka Flume 是一个分布式,可靠的,可用的服务,有效的收集,聚合和移动海量的日志数据.它有一个简单而灵活的架构,基于流数据流.具有很好的冗余和容错性,以及可靠性和多故障转移和恢复 ...

  3. NOIP2016 DAY2 T1 组合数问题

    题目描述 组合数表示的是从n个物品中选出m个物品的方案数.举个例子,从(1,2,3) 三个物品中选择两个物品可以有(1,2),(1,3),(2,3)这三种选择方法.根据组合数的定 义,我们可以给出计算 ...

  4. InfoSYS-20170114

    1.描述Spring的事务机制 2.描述并发脏数据,如何避免 3.如何防止同一个请求重复提交(重复付款) 4.如何监控程序性能 5.CPU过高说明什么问题 通常是程序中有死循环, 参考 http:// ...

  5. CNN卷机网络在自然语言处理问题上的应用

    首先申明本人的英语很搓,看英文非常吃力,只能用这种笨办法来方便下次阅读.有理解错误的地方,请别喷我. 什么是卷积和什么是卷积神经网络就不讲了,自行google.从在自然语言处理的应用开始(SO, HO ...

  6. POJ 2157 How many ways??

    How many ways?? Time Limit: 1000ms Memory Limit: 32768KB This problem will be judged on HDU. Origina ...

  7. BA-siemens-BA模块特性

    PXC24(包含UEC24的模块特性) DO点可以接220vac的电压,渠道人员告知电流不要超过2A AO点只能输出0-10V的电压,不能输出4-20ma的电流,说明书上是错误的 AO点输出10v失败 ...

  8. 使用UE4公布安卓平台游戏

    使用了几天的UE4 ,总算是将游戏在安卓平台执行起来了.当中遇到非常多问题,而且终于依旧有一些问题没能解决. 整体感觉是UE4这款引擎眼下还不够成熟.问题较多. 没有unity使用起来方便. 可是既然 ...

  9. poj1699--Best Sequence(dfs+剪枝)

    题目链接:点击打开链接 题目大意:给出n个字符串.要求组合后的串最短 #include <cstdio> #include <cstring> #include <alg ...

  10. 【VC编程技巧】窗口☞3.5对单文档或者多文档程序制作启动画面

    (一)概要: 文章描写叙述了如何通过Visual C++ 2012或者Visual C++ .NET,为单文档或者多文档程序制作启动画面.在Microsoft Visual Studio 6.0中对于 ...