简介
欢迎来到小李哥全新亚马逊云科技AWS云计算知识学习系列,适用于任何无云计算或者亚马逊云科技技术背景的开发者,通过这篇文章大家零基础5分钟就能完全学会亚马逊云科技一个经典的服务开发架构方案。
我会每天介绍一个基于亚马逊云科技AWS云计算平台的全球前沿云开发/架构技术解决方案,帮助大家快速了解国际上最热门的云计算平台亚马逊云科技AWS最佳实践,并应用到自己的日常工作里。本次介绍的是如何利用亚马逊云科技上云原生API网关,管理云端应用的Restful API,并通过API调用触发后端Lambda中的服务代码,提升云上应用程序的扩展性、安全性,降低运维维护难度。本方案架构图如下:
方案所需基础知识
什么是亚马逊云科技API网关服务?
亚马逊云科技API网关(Amazon API Gateway) 是一种完全托管的云原生服务,允许开发者轻松创建、发布、维护、监控和保护API。它可以帮助开发者将后端服务(如AWS Lambda、Amazon EC2等)与客户端(如网页、移动应用)进行安全、可靠的连接。
为什么用亚马逊云科技API网关管理API?
简化API管理与开发
Amazon API Gateway 使开发者能够快速创建RESTful API和WebSocket API,无需担心底层的基础设施管理。它可以帮助开发者自动处理API的流量、扩容、并发请求和缓存配置,从而帮助开发者专注于核心业务开发。
内置的安全性和性能优化
API Gateway 提供了内置的身份验证、访问控制(如IAM角色、Cognito等),并与AWS WAF集成进行安全防护。此外,它支持流量管理、自动缓存和跨区域部署,确保API调用的高性能和高可用性。
成本优化和控制
API Gateway 采用基于请求数量的定价模型,开发者只需为实际使用的API调用付费。这种按需付费的方式使得成本更加可控,尤其适合流量不稳定或增长中的应用,不需要预付或长期绑定服务器资源。
本方案包括的内容
1. 在亚马逊云科技上创建一个API网关
2.在API网关部署API
3.通过API网关上的API出发后端的应用服务
项目搭建具体步骤
1. 首先通过亚马逊云科技控制台进入Lambda无服务器计算服务
2. 在左侧功能栏点击Functions,再点击”Create Function“创建一个计算资源
3. 选择”Author from scratch“自己上传应用代码,为Function命名为”labFunction“,选择语言版本为”Python 3.10“
4. 为创建的Lambda函数添加IAM角色,最后点击Create创建
5. 我们在创建好的Lambda中复制如下代码,用于一个简单API调用查询车辆信息
import json
import logging
# AWS Lambda Function Logging in Python - https://docs.aws.amazon.com/lambda/latest/dg/python-logging.html
logger = logging.getLogger()
logger.setLevel(logging.INFO)
def lambda_handler(event, context):
'''Demonstrates Amazon API Gateway Lambda proxy integration. You have full
access to the request and response payload, including headers and
status code.
https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-lambda-proxy-integrations.html
'''
logger.debug(event) # Mind logger.setLevel at line 6. Check Event printed at CloudWatch
#/vehicles/{vehicleId}
vehicles = [
{ "id": "1", "type": "bike", "available":"true"},
{ "id": "2", "type": "car", "available":"false"},
{ "id": "3", "type": "truck", "available": "true"}
]
# Input Format https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-lambda-proxy-integrations.html#api-gateway-simple-proxy-for-lambda-input-format
resource = event['resource']
# Uncomment to print the event
# print("Received event: " + json.dumps(event, indent=2))
err = None
# /vehicles List all vehicles
response_body = {}
if (resource == "/vehicles"):
response_body = {
"vehicles": vehicles
}
# /vehicles/vehicleId find vehicle by Id
elif (resource == "/vehicles/{id}"):
vehicleId = event['pathParameters']['id']
value = next((item for item in vehicles if item["id"] == str(vehicleId)), False)
if( value == False ):
err = "vehicle not found"
else:
response_body = {
"vehicle": value
}
response = response_payload(err, response_body)
return response
'''
In Lambda proxy integration, API Gateway sends the entire request as input to a backend Lambda function.
API Gateway then transforms the Lambda function output to a frontend HTTP response.
Output Format: https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-lambda-proxy-integrations.html#api-gateway-simple-proxy-for-lambda-output-format
'''
def response_payload(err, res=None):
return {
'statusCode': '400' if err else '200',
'body': err if err else json.dumps(res),
'headers': {
'Content-Type': 'application/json',
},
}
6. 点击Deploy对应用进行部署
7. 我们也可以选择点击”Test“对该应用进行测试,查看是否能返回正确的响应
8. 在单元测试配置中,我们选择亚马逊云科技提供的默认模板”apigateway-aws-proxy“
9. 我们再通过控制台进入API Gateway服务
10. 我们选择API网关类型为"REST API",点击Build创建
11. 我们选择”New API“方式创建一个新API,为API命名为”ApiLab“,API节点类型为”Regional“区域型,将API部署到一个单独区域内。
12. 点击Create Resources开始为网关添加API
13. 我们为该API配置路径名”pets“
14.接下来我们点击”Create Method“,为该该路径下的API添加方法
15. 首先我们为该API添加”GET“方法,并配置后端集成的服务为Lambda,并开启”Lambda proxy integration“,将整个HTTP Restful请求内容发送到后端。
16. 在Lambda Function选项中添加我们之前创建好的’LabFunction”函数,并点击"Create"创建
17. 接下来我们选中路径/pets,再该路径下添加一个新的子路径
18. 我们添加子路径”{id}“,双括号表示该API参数会被API网关传递到后端服务中处理,并点击Create创建
19. 我们为”{id}“路径添加方法和后端集成代码应用。
20. 我们添加Get方法,并挂载我们在前面创建的LabFunction函数应用。
21. 创建完毕后,我们点击”Deploy API“将该API配置发布
22. 我们为新发布的版本命名为”lab“,点击Deploy发布
23. 发布成功后我们可以在该API版本页面查看API调用URL
24. 我们将该URL复制到浏览器中,并在URL后面加上路径”/pets“,点击回车访问
25. 我们可以看到我们成功通过API网关,调用了后端的LabFunction中定义的函数应用,返回了代码中/pets路径定义的响应内容。
以上就是在亚马逊云科技上利用云原生API网关服务,管理云应用的API触发后端应用的全部步骤。欢迎大家关注0基础5分钟上手AWS系列,未来获取更多国际前沿的AWS云开发/云架构方案。