AWS Python应用

一、AWS Python环境

1.AWS APIs

AWS 中的一切都是 API 调用,每个 AWS 服务都有自己的一组 API 可以与之交互。

2.AWS 命令​​行界面

AWS 命令​​行界面 (AWS CLI) 是一种开源工具,使你能够使用命令行 shell 中的命令与 AWS 服务进行交互。

配置后,AWS CLI 能够从终端程序中的命令提示符开始运行实现与基于浏览器的 AWS 管理控制台所提供的功能等效的命令。

3.AWS Cloud9

AWS Cloud9 是基于云的 IDE ,并已内置多种功能,可进行开发和协作项目。Cloud9 可以提供的其中一项功能就是使用 AWS 命令​​行界面。

可以通过 Web 浏览器访问 AWS Cloud9 IDE。可以根据自己的喜好配置 IDE。可以切换颜色主题、绑定快捷键、启用特定于编程语言的语法着色和代码格式化等。

在Cloud9中, 不要出于任何原因将AWS 凭证硬编码到代码中,应该尽可能依赖 IAM role 进行访问。

4.适用于 Python 的 AWS 开发工具包

Boto3 是适用于 Python 的 AWS 开发工具包。它使 Python 开发人员能够创建、配置和管理 AWS 服务,例如 EC2 和 S3。

Boto3 中的一些概念:

  • 客户端:客户端向 AWS 提供低级接口,其方法与服务 API 的映射接近 1:1。所有服务操作均由客户端支持。客户端是从 JSON 服务定义文件生成的。
  • 资源:资源代表 AWS 的面向对象的接口。它们提供了比服务客户端更高级别的接口。
  • 会话:会话管理有关特定配置的状态。默认情况下,会在需要时为您创建会话。
  • 凭据:可以通过多种方式配置 Boto3 凭据。无论选择何种来源,都必须同时拥有 AWS 凭证和 AWS 区域集才能发出请求。

5.AWS Toolkit 和 AWS 无服务器应用程序模型

AWS Toolkit for PyCharm 是 PyCharm IDE 的开源插件,可以更轻松地在 Amazon Web Services 上创建、调试和部署 Python 应用程序。

AWS Toolkit 使用 AWS 无服务器应用程序模型 (AWS SAM) 创建和管理 AWS 资源,例如 AWS Lambda 函数。

无服务器应用程序是 Lambda 函数、事件源和其他资源的组合,它们协同工作以执行任务。

二、API Gateway

Amazon API Gateway 是一项 AWS 服务,用于创建、发布、维护、监控和保护任何规模的 REST、HTTP 和 WebSocket API。API 开发人员可以创建API 访问 AWS 或其他 Web 服务以及存储在 AWS 云中的数据的 API。

1.API Gateway REST APIs

API Gateway 支持多种类型的 API,这里将重点介绍 REST API。

API Gateway 中的 REST API 是与后端 HTTP 端点、Lambda 函数或其他 AWS 服务集成的资源和方法的集合。API Gateway REST API 使用请求/响应模型,其中客户端向服务发送请求并且服务同步响应。这种模型适用于依赖于同步通信的许多不同类型的应用程序。

下图显示了客户端调用 API 以访问后端资源的步骤。
在这里插入图片描述

  • method request:方法请求接受客户端输入,如果已配置,则可选择验证它,如果验证失败,API Gateway 立即使请求失败。
  • integration request:客户端输入通过集成请求传递到后端,集成请求是配置 API 将向其传递客户端输入的后端资源的地方。这也是可能使用 VTL 映射执行任何映射或数据转换的地方。
  • method response:方法响应通过集成响应将后端的输出返回给客户端。
  • integration response:集成响应是封装后端响应的 HTTP 响应。您可以将后端响应映射到特定的 HTTP 代码。

2.API Gateway的功能

(1)请求验证

API Gateway 可以执行基本验证,验证在 API 的方法请求和方法响应中执行。对于基本验证,API Gateway 会验证以下条件之一或两者:

  • URI、查询字符串和传入请求的标头中所需的请求参数包括在内且非空白。
  • 适用的请求负载遵循该方法配置的 JSON 模式请求模型。

(2)模型

API Gateway 中的模型用于定义 Method Request 上传入数据的格式,或 Method Response 上传出数据的格式。

(3)映射

映射是用 Velocity 模板语言 (VTL) 编写的模板,您可以将其应用于 REST API 的集成请求或集成响应。映射模板允许转换数据,包括注入硬编码数据,或在数据传递到支持服务之前或在将响应发送到客户端之前更改数据的形状。

3.API Gateway的部署

Stage(阶段)是对部署的命名引用,使用 Stage 来管理和优化特定部署。例如,可以配置阶段设置以启用缓存、自定义请求限制、配置日志记录、定义阶段变量以进行测试。

阶段变量是名称-值对,可以将其定义为与 REST API 的部署阶段关联的配置属性。它们的作用类似于环境变量,可以在 API 设置和映射模板中使用。

4.API Gateway身份验证

下图列举了一些身份验证的方法
在这里插入图片描述

三、AWS Lambda

AWS Lambda 是一项计算服务,无需预置或管理服务器即可运行代码。AWS Lambda 仅在需要时执行您的代码并自动扩展,从每天几个请求到每秒数千个请求。

1.运行环境

当 AWS Lambda 执行 Lambda 函数时,它会预置和管理运行您的 Lambda 函数所需的资源。创建 Lambda 函数时可以指定配置信息,例如 Lambda 函数允许的内存量和最长执行时间。

AWS Lambda其中一个很重要的概念是 execution context reuse,意思是在函数的 handler 方法之外声明的对象保持初始化,在再次调用函数时提供额外的优化。

当代码在 Lambda 中执行时,该服务将启动一个微型虚拟机,该虚拟机将下载您的代码和所需的所有依赖项,然后执行它。AWS 在创建这项技术时考虑了 Lambda 以及 AWS Fargate 服务中使用的多租户容器。

2.Lambda 权限

使用 AWS Lambda 时需要注意两种类型的权限。

第一种是执行权限。lambda 函数的执行权限由 IAM 角色控制。此角色将包含允许或拒绝进行特定 API 调用的策略。为了使 lambda 函数中运行的代码能够调用 AWS API,执行角色必须包含这些 API 调用的权限。

AWS Lambda 需要注意的第二种权限类型是基于资源的策略。基于资源的策略用于控制对调用和管理 lambda 函数的访问。

3.Lambda Push/Pull 模型

设置触发器调用 lambda 函数时,有两个主要模型。

首先是push 模型。push 模型是触发器向 lambda 发送事件,然后调用您的 lambda 函数。使用推送模型时,基于资源的策略必须允许触发器调用 lambda 函数。

第二个模型是pull 模型。在pull 模型中,AWS Lambda 从事件源中提取事件,然后调用 lambda 函数,叫做event source mapping。例如Amazon Simple Queue Service (SQS) 服务,SQS 允许消息在队列中建立,然后您的代码将处理这些消息,我们不会在 SQS 每次收到消息时都调用 lambda,而是在队列中建立消息,并且将事件源映射定义为 lambda 函数的触发器。AWS Lambda 会将事件从 SQS pull 到 lambda 函数。

4.Lambda 异步与同步

Lambda存在冷启动问题,在一个lambda函数结束运行以后,它的handler以外的部分会持续存在一段时间,例如数据库访问,因此在连续调用相同函数时会缩短运行时间。我们可以通过设置Provisioned concurrency来控制一直保持运行的变量。

通过 CLI 或 SDK 调用 Lambda 函数时,可以根据使用的 API 调用选择调用类型(同步或异步)。使用 AWS 服务触发 Lambda 函数时,调用类型通常由配置的触发器决定。例如,S3 异步调用 Lambda。

一些服务例如 API Gateway可以自主选择调用类型。API Gateway 默认同步调用 Lambda。在长延迟操作的情况下,异步调用它并使用另一种机制让客户端知道操作已完成更好。

5.Lambda Versioning and Aliases

版本:可以在创建新函数或更新现有函数时发布新版本的 AWS Lambda 函数。每个版本的 lambda 函数都有自己唯一的 Amazon 资源名称 (ARN)。

别名:别名本质上是指向一个特定 Lambda 版本的指针。创建的每个别名都有一个唯一的 ARN。一个别名只能指向一个函数版本,不能指向另一个别名。您可以更新别名以指向该函数的新版本。

四、Step函数

AWS Step Functions 用于协调分布式组件并分析分布式工作流的流程。Step Functions 基于任务和状态机的概念。使用基于 JSON 的 Amazon 状态语言来定义状态机。Step Functions 提供了一个图形控制台,可将应用程序的组件排列和可视化为一系列步骤。

1.状态机的状态

状态机包含以下几种状态:

  • Task:在状态机中做一些工作
  • Choice:在执行分支之间做出选择
  • Fail/Succeed:以失败或成功停止执行
  • Pass:只需将其输入传递给其输出或注入一些固定数据
  • Wait:提供一定时间或直到指定时间/日期的延迟
  • Parallel:开始并行执行分支
  • Map:动态迭代步骤

Fail 类型以外的任何状态类型都可以完全控制输入和输出。可以使用“InputPath”、“ResultPath”和“OutputPath”来控制它们。路径是以 $ 开头的字符串,可用于标识 JSON 文本中的组件。

  • “InputPath”,可以确定将作为输入发送到状态的数据的哪一部分发送到该状态的处理中。
  • “ResultPath”:将该 Lambda 函数的结果插入到输入内部的节点中
  • “OutputPath”从该数据组合中应用另一个过滤器来决定要保留哪个节点。

2.Step 函数集成

AWS Step Functions 与一些 AWS 服务集成,以便可以调用 API 操作,并直接从 Step Functions 中的 Amazon 状态语言协调执行。可以使用三种服务集成模式控制这些 AWS 服务:

  • 调用服务并让 Step Functions 在收到 HTTP 响应后立即进入下一个状态。
  • 调用服务并让 Step Functions 等待工作完成。
  • 使用任务 token 调用服务并让 Step Functions 等到该 token 与有效负载一起返回。

3.Step 函数其他特征

工作流分为两种,

  • 标准工作流程:非常适合长期运行、持久且可审核的工作流程。
  • 快速工作流程:非常适合大容量的事件处理工作负载,例如物联网数据摄取、流数据处理和转换以及移动应用程序后端。

活动:在 AWS Step Functions 中可以创建活动。活动被用作将运行在 Amazon EC2 或 Amazon ECS 等地方的代码或任何外部计算(称为活动工作者)与状态机中的特定任务相关联的一种方式。当 Step Functions 达到活动任务状态时,工作流会等待活动工作点轮询任务。

活动工作点使用 GetActivityTask API 轮询 Step Functions,并为请求中的相关活动发送 ARN。 GetActivityTask 返回一个响应,其中包括任务的 JSON 输入字符串和 taskToken。

一些应用程序需要实现回调模式。回调任务提供了一种在返回任务令牌之前暂停工作流的方法。一项任务可能需要等待人工批准、与第三方集成或调用遗留系统。对于此类任务,您可以无限期暂停 Step Functions,并等待外部流程或工作流程完成。

五、AWS X-Ray

AWS X-Ray 是一项服务,它收集有关应用程序所服务的请求的数据,并提供可用于查看、过滤和深入了解这些数据的工具,以识别问题和优化。对于应用程序的任何跟踪请求,不仅可以查看有关请求和响应的详细信息,还可以查看有关应用程序对下游 AWS 资源、微服务、数据库和 HTTP Web API 的调用的详细信息。

一些关于AWS X-Ray 的概念:

  • Segments:运行应用程序逻辑的计算资源将有关其工作的数据作为Segments。Segments提供资源的名称、有关请求的详细信息以及有关已完成工作的详细信息。
  • Subsegments:Segments可以将有关已完成工作的数据分解为Subsegments。Subsegments提供更精细的时间信息和有关应用程序为满足原始请求而进行的下游调用的详细信息。
  • Service graph:X-Ray 使用应用程序发送的数据来生成服务图。
  • Traces:Trace ID 通过应用程序跟踪请求的路径。跟踪收集单个请求生成的所有Segments。
  • Annotations:注释是简单的键值对,它们被索引以与过滤器表达式一起使用。使用注释来记录要用于在控制台中或在调用 GetTraceSummaries API 时对跟踪进行分组的数据。
  • Metadata :元数据是具有任何类型值的键值对,包括对象和列表,但没有索引。使用元数据记录要存储在跟踪中但不需要用于搜索跟踪的数据。
  • X-Ray Daemon:AWS X-Ray Daemon是一个软件应用程序,用于侦听 UDP 端口 2000 上的流量、收集原始分段数据并将其中继到 AWS X-Ray API。

CloudWatch 日志

Log events:日志事件是被监视的应用程序或资源记录的某些活动的记录。
Log streams:日志流是共享同一源的一系列日志事件。
Log groups:日志组定义共享相同保留、监控和访问控制设置的日志流组。
Metric filters:可以使用指标过滤器从摄取的事件中提取指标观察结果,并将它们转换为 CloudWatch 指标中的数据点。
Retention settings:保留设置可用于指定日志事件在 CloudWatch Logs 中保留多长时间。

六、优化

1.Amazon CloudFront

AWS 边缘站点是 Amazon CloudFront 用来缓存您的内容副本以便更快地交付给全球用户的站点。通过将内容部署到边缘位置,可以为最终用户减少应用程序的延迟,因为他们在物理上比您最初托管资源的区域更靠近他们的位置访问资源。

2.Response Caching

我们可以在 Amazon API Gateway 中启用 API 缓存来缓存终端节点的响应。通过缓存,可以减少对端点的调用次数,还可以改善对 API 的请求延迟。

3.Lambda@Edge

Lambda@Edge 是 Amazon CloudFront 的一项功能,可让您在更靠近应用程序用户的位置运行代码,从而提高性能并减少延迟。

4.Lambda Layers

可以将 Lambda 函数配置为以层的形式引入额外的代码和内容。层是包含库、自定义运行时或其他依赖项的 ZIP 存档。使用层,您可以在函数中使用库,而无需将它们包含在部署包中。层可以让您的部署包保持较小,从而使开发更容易。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值