aws apigateway 基础概念和入门示例

news2024/11/17 21:55:20

参考资料

  • https://docs.aws.amazon.com/zh_cn/apigateway/latest/developerguide/getting-started.html

apigateway基础理解

apigateway的核心概念

  • apigateway,基础服务用来管理接口的创建,部署和管理
  • restapi,http资源和方法的集合,可以根据应用程序的逻辑形成资源树。能够与http,lambda和其他aws服务集成,多阶段部署
  • httpapi,由路由和方法组成,可以与http和lambda集成,多阶段部署
  • websocketapi,由路由和路由键组成,能够与http,lambda,和其他aws服务集成,多阶段部署
  • deployment,api状态的实时快照,与api阶段关联
  • endpoint,apigateway的特定主机名,分为边缘优化,私有和区域端点
  • apikey,用来标识开发人员的唯一标识,可以由apigateway生成
  • stage,api生命周期的指针
  • callbackurl,使用websocket时,客户新连接会在apigateway中存储回调url,用来主动推动信息
  • edge-optimized endpoint,默认的终端节点,实际是由cloudfront转发的最近区域端点、
  • 集成请求和响应,见下文
  • Mapping template,apugateway前后端数据映射的模板
  • 方法请求和响应,见下文
  • Mock integration,apigateway mock响应,不需要后端
  • Private integration,通过私有端点访问vpc内部资源,不需要暴露公网
  • Proxy integration。可以设置HTTP 代理集成或 Lambda 代理集成,代理集成下不会对请求进行额外处理,直接转发

apigateway3个用例

区别和比较,https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-vs-rest.html

  • REST APIs,In API Gateway REST APIs, the frontend is encapsulated by method requests and method responses. The API interfaces with the backend by means of integration requests and integration responses. You can configure the integration response to map required response parameters from integration to method
  • HTTP APIs,lower latency and lower cost. use HTTP APIs to send requests to AWS Lambda functions or to any publicly routable HTTP endpoint
  • WebSocket APIs,the client and the server can both send messages to each other at any time. Can integrated with lambda kinesis and HTTP endpoint.

apigateway的请求逻辑

apigateway的restapi用来集成后端http服务,lambda函数和其他aws服务,将这些服务通过资源和方法暴露出去

例如,/incomes使资源,而其上的GET/POST/PUT等操作即方法

总体的请求逻辑可以分为以下两个阶段

  • 方法请求和方法响应,应用程序和apigateway之间的通信

  • 集成请求和集成响应,apigateway和后端之间的通信

由于以上两个阶段的请求格式和处理逻辑不同,因此需要apigateway将方法请求转换为集成请求,将集成响应转换为方法响应(通过定义schema和model实现)

在这里插入图片描述

apigateway集成的方式

在这里插入图片描述

入门示例

创建lambda函数,使用nodejs16运行时,保留默认代码即可

export const handler = async (event) => {
    const response = {
        statusCode: 200,
        body: JSON.stringify('Hello World!'),
    };
    return response;
};

创建httpapi,相比restapi功能少,费用低

  • 创建httpapi
  • 选择lambda集成
  • 测试api调用

这里需要注意,lambda集成的负载格式分为v1和v2

https://docs.amazonaws.cn/apigateway/latest/developerguide/http-api-develop-integrations-lambda.html

在这里插入图片描述

保留贪婪匹配,直接下一步自动部署

在这里插入图片描述

在lambda函数界面可以看到自动添加基于资源的策略

在这里插入图片描述

{
  "Version": "2012-10-17",
  "Id": "default",
  "Statement": [
    {
      "Sid": "a2bb716b-d866-538b-b02d-db66f38db633",
      "Effect": "Allow",
      "Principal": {
        "Service": "apigateway.amazonaws.com"
      },
      "Action": "lambda:InvokeFunction",
      "Resource": "arn:aws-cn:lambda:cn-north-1:xxxxxxxxxxx:function:my-function",
      "Condition": {
        "ArnLike": {
          "AWS:SourceArn": "arn:aws-cn:execute-api:cn-north-1:xxxxxxxxxxx:8qpcm7sc5d/*/*/my-function"
        }
      }
    }
  ]
}

同样在apigateway控制台能看到相应的添加权限操作
在这里插入图片描述

尝试访问生成的终端节点
在这里插入图片描述

$ curl https://8qpcm7sc5d.execute-api.cn-north-1.amazonaws.com.cn/my-function
{"message":"Forbidden"}

逻辑上我们已经对外提供了接口,但是访问报错,这可能是由于两个因素导致的

  1. 中国区没有备案,不允许匿名访问
  2. 没有权限访问

因此,这里我们使用iam授权

https://docs.amazonaws.cn/apigateway/latest/developerguide/http-api-access-control-iam.html

注意,httpapi不支持基于资源的策略,因此请求方需要sigv4签名,并且具有execute-api权限

aws apigatewayv2 update-route \
    --api-id 8qpcm7sc5d \
    --route-id 9f5s6fh \
    --authorization-type AWS_IAM

这里的routeid有点隐蔽

在这里插入图片描述

我们在之前的文章中讨论过鉴权的问题,当时是使用postman工具,这里用awscurl替代下,用来快速测试apigateway很是方便

https://github.com/okigan/awscurl

使用默认凭证访问apigateway

$ awscurl --service execute-api -X POST -d @request.json https://<prefix>.execute-api.us-east-1.amazonaws.com/<resource>
$ awscurl --service execute-api -X GET https://8qpcm7sc5d.execute-api.cn-north-1.amazonaws.com.cn/my-function --region cn-north-1
"Hello from Lambda!"

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/389168.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【LeetCode】1599. 经营摩天轮的最大利润

1599. 经营摩天轮的最大利润 题目描述 你正在经营一座摩天轮&#xff0c;该摩天轮共有 4 个座舱 &#xff0c;每个座舱 最多可以容纳 4 位游客 。你可以 逆时针 轮转座舱&#xff0c;但每次轮转都需要支付一定的运行成本 runningCost 。摩天轮每次轮转都恰好转动 1 / 4 周。 …

7 Seata简介

Seata-Server安装 分布式事务解决方案 2PC即两阶段提交协议&#xff0c;是将整个事务流程分为两个阶段&#xff0c;P是指准备阶段&#xff0c;C是指提交阶段。 1. 准备阶段&#xff08;Prepare phase&#xff09; 2. 提交阶段&#xff08;commit phase&#xff09;举例&…

模电基础(2)半导体二极管

1.二极管的组成二极管&#xff1a;将PN结封装起来&#xff0c;引出两个电极就构成了半导体二极管。二极管的常见结构包括&#xff1a;点接触型&#xff08;图a&#xff09;&#xff0c;面接触型&#xff08;图b&#xff09;&#xff0c;平面型&#xff08;图c&#xff09;。 点…

世界顶级五大女程序媛,不仅技术强还都是美女

文章目录1.计算机程序创始人&#xff1a;勒芙蕾丝伯爵夫人2.首位获得图灵奖的女性&#xff1a;法兰艾伦3.谷歌经典首页守护神&#xff1a;玛丽莎梅耶尔4.COBOL之母&#xff1a;葛丽丝穆雷霍普5.史上最强游戏程序媛-余国荔说起程序员的话&#xff0c;人们想到的都会是哪些理工科…

java基础-标识符命名规范和数据类型

标识符 1.什么是标识符&#xff1f; Java中变量、方法、类等要素命名时使用的字符序列&#xff0c;称为标识符。 技巧&#xff1a;凡是自己可以起名字的地方都叫标识符。比如&#xff1a;类名、方法名、变量名、包名、常量名等 2.标识符的命名规则 1.标识符由26个英文字母大小…

LQB手打,18B20读取温度,放大一百倍

https://blog.csdn.net/qq_45225613/article/details/110303632?ops_request_misc%257B%2522request%255Fid%2522%253A%2522167798888716800215065334%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id167798888716800215065334&biz_id0&a…

RCNN

1.RCNN 1.1算法流程 一张图像生成1k~2k个候选区域(使用Selective Search方法)对每个候选区域&#xff0c;使用深度网络提取特征特征送入每一类的SVM分类器&#xff0c;判断是否属于该类使用回归器精细修正候选框位置 1.候选区域的生成 利用selective Search算法通过图像分割的方…

【erlang】入门篇

欢迎入坑Erlang&#xff0c;关键字&#xff1a; 函数式&#xff0c;高并发&#xff0c;容错&#xff0c;热更新&#xff0c;分布式 安装 erlang的安装非常简单&#xff0c;直接去官网下载编译好的二进制安装包即可。需要注意的是文件名格式是OTP_平台_版本.后缀&#xff0c;其…

2021天梯赛真题题解 L1-3 强迫症 (10 分) C语言版本 整数转换为字符串数组

L1-3 强迫症 (10 分) 题目描述 小强在统计一个小区里居民的出生年月&#xff0c;但是发现大家填写的生日格式不统一&#xff0c;例如有的人写 199808&#xff0c;有的人只写 9808。有强迫症的小强请你写个程序&#xff0c;把所有人的出生年月都整理成 年年年年-月月 格式。对于…

一文说透容器跨主机网络

文章目录一、Flannel1、UDP2、VXLAN&#xff08;1&#xff09;VXLAN核心流程总结&#xff08;2&#xff09;VTEP隧道通信流程详解【1】封装 inner Ethernet header&#xff08;依据VTEP IP查MAC&#xff09;【2】设置VNI&#xff08;标识数据包应该交给那个处理设备&#xff09…

AI绘画第二步,抄作业复现超赞的效果!

上一篇&#xff0c;讲了如何安装AI绘画软件&#xff0c;但是装完后发现生成效果很渣&#xff01;而网上那些效果都很赞。真的是理想很丰满&#xff0c;现实很骨感。今天就是来聊聊如何抄作业&#xff0c;最大程度的还原那些超赞的效果。换一种说法就是&#xff0c;教大家如何使…

spark sql(一)源码分析sql解析流程

spark sql解析sql主要基于Catalyst框架&#xff0c;它将复杂的sql解析分为很多的阶段&#xff0c;每个阶段基本都有专属的工具类和扩展接口&#xff0c;最终实现将sql转换为DataFrame或RDD任务的功能。如果对于这些中间阶段和工具类没有一个整体概念性的了解&#xff0c;那阅读…

JUC并发编程与源码分析笔记11-Java对象内存布局和对象头

先从阿里及其它大厂面试题说起 你觉得目前面试&#xff0c;你还有那些方面理解的比较好&#xff0c;我没问到的&#xff0c;我说了juc和jvm以及同步锁机制那先说juc吧&#xff0c;说下aqs的大致流程cas自旋锁&#xff0c;是获取不到锁就一直自旋吗?cas和synchronized区别在哪…

国内的PMP考试通过率高达97%?

自认为是虚高&#xff0c;虽然国人在考试方面的确独树一帜的强&#xff0c;应该也没有这样夸张。 如果自学&#xff0c;大概是50%&#xff0c;如果有老师教&#xff0c;那大概是60%到80%&#xff0c;还是比较高的。 为什么自学那么低&#xff1f;除了自身的自制力的问题&…

【编程基础之Python】9、Python中的变量

【编程基础之Python】9、Python中的变量Python中的变量变量的定义和赋值变量的命名规范变量的类型变量的作用域变量的赋值特殊的变量删除变量总结Python中的变量 在Python中&#xff0c;变量是用来存储数据的一种方式。Python是一种动态类型语言&#xff0c;因此在声明变量时不…

JWT利用在ctfhub-easy_login拿到flag

目录 什么是JWT&#xff1f; jwt由三个部分组成&#xff1a;header.payload.signature header部分&#xff1a; payload部分&#xff1a;声明 signature部分&#xff1a; JWT验证过程&#xff1a; ctfhub-easy_login 目的&#xff1a;拿到flag 过程分析以及实操&#x…

阿里云轻量服务器--Docker--Nacos安装(使用外部Mysql数据存储)

前言&#xff1a;docker 安装nacos 如果不设置外部的mysql 默认使用内嵌的内嵌derby为数据源&#xff0c;这个时候如果&#xff0c;重新部署nacos 则会造成原有数据丢失情况&#xff1b; 1 默认安装的nacos 启动后使用的是内嵌的存储&#xff1a; 2 使用外部mysql 作为存储&a…

Ubuntu 18.04 出现GLIBC_2.28 not found的解决方法

关于/lib/x86_64-linux-gnu/libc.so.6: version GLIBC_2.28’ not found出现报错&#xff0c;建议不要使用源码包去编译并升级。在下文有分享一个使用官方的Debian软件包去升级使用的方法。仅供参考&#xff01; 环境 # uname -a Linux Ubuntu 5.4.0-144-generic #161~18.04.…

[1.4]计算机系统概述——操作系统的体系结构

第一章 计算机系统概述 操作系统的体系结构 大内核/单内核/宏内核微内核 通过之前的学习&#xff0c;我们知道计算机系统的层次结构是这样的。 但是操作系统的内部其实还可以再进一步地划分。 一部分是内核的功能&#xff0c;一部分是非内核的功能。 操作系统最核心的功能&…

计及需求响应的粒子群算法求解风能、光伏、柴油机、储能容量优化配置(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5;&#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密…