零基础5分钟上手亚马逊云科技-利用API网关管理API

简介

欢迎来到小李哥全新亚马逊云科技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无服务器计算服务
  1. 在左侧功能栏点击Functions,再点击"Create Function"创建一个计算资源

3. 选择"Author from scratch"自己上传应用代码,为Function命名为"labFunction",选择语言版本为"Python 3.10"

  1. 为创建的Lambda函数添加IAM角色,最后点击Create创建
  1. 我们在创建好的Lambda中复制如下代码,用于一个简单API调用查询车辆信息
python 复制代码
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',
        },
    }
  1. 点击Deploy对应用进行部署
  1. 我们也可以选择点击"Test"对该应用进行测试,查看是否能返回正确的响应
  1. 在单元测试配置中,我们选择亚马逊云科技提供的默认模板"apigateway-aws-proxy"
  1. 我们再通过控制台进入API Gateway服务
  1. 我们选择API网关类型为"REST API",点击Build创建
  1. 我们选择"New API"方式创建一个新API,为API命名为"ApiLab",API节点类型为"Regional"区域型,将API部署到一个单独区域内。

12. 点击Create Resources开始为网关添加API

  1. 我们为该API配置路径名"pets"

14.接下来我们点击"Create Method",为该该路径下的API添加方法

  1. 首先我们为该API添加"GET"方法,并配置后端集成的服务为Lambda,并开启"Lambda proxy integration",将整个HTTP Restful请求内容发送到后端。
  1. 在Lambda Function选项中添加我们之前创建好的'LabFunction"函数,并点击"Create"创建
  1. 接下来我们选中路径/pets,再该路径下添加一个新的子路径
  1. 我们添加子路径"{id}",双括号表示该API参数会被API网关传递到后端服务中处理,并点击Create创建
  1. 我们为"{id}"路径添加方法和后端集成代码应用。
  1. 我们添加Get方法,并挂载我们在前面创建的LabFunction函数应用。
  1. 创建完毕后,我们点击"Deploy API"将该API配置发布
  1. 我们为新发布的版本命名为"lab",点击Deploy发布
  1. 发布成功后我们可以在该API版本页面查看API调用URL
  1. 我们将该URL复制到浏览器中,并在URL后面加上路径"/pets",点击回车访问
  1. 我们可以看到我们成功通过API网关,调用了后端的LabFunction中定义的函数应用,返回了代码中/pets路径定义的响应内容。

以上就是在亚马逊云科技上利用云原生API网关服务,管理云应用的API触发后端应用的全部步骤。欢迎大家关注0基础5分钟上手AWS系列,未来获取更多国际前沿的AWS云开发/云架构方案。

相关推荐
木子Linux2 小时前
【Linux打怪升级记 | 问题01】安装Linux系统忘记设置时区怎么办?3个方法教你回到东八区
linux·运维·服务器·centos·云计算
小蜗牛慢慢爬行2 小时前
Hibernate、JPA、Spring DATA JPA、Hibernate 代理和架构
java·架构·hibernate
思忖小下4 小时前
梳理你的思路(从OOP到架构设计)_简介设计模式
设计模式·架构·eit
边缘计算社区6 小时前
吉快科技荣膺“金边奖·最佳大模型一体机”,引领AI边缘新时代
人工智能·科技
因_果_律6 小时前
亚马逊云科技 re:Invent 2024重磅发布!Amazon Bedrock Data Automation 预览版震撼登场
大数据·人工智能·科技·亚马逊云科技·re invent
IT信息技术学习圈6 小时前
强基计划之编程:开启科研精英培养新路径
科技·强基计划
一个儒雅随和的男子10 小时前
微服务详细教程之nacos和sentinel实战
微服务·架构·sentinel
腾讯云开发者11 小时前
AI时代,需要怎样的架构师?腾讯云架构师峰会来了!
架构
Json_1817901448013 小时前
淘系商品评论json数据示例参考,API接口系列
大数据·json·api
Hello Dam13 小时前
面向微服务的Spring Cloud Gateway的集成解决方案:用户登录认证与访问控制
spring cloud·微服务·云原生·架构·gateway·登录验证·单点登录