Lambda TEST 知识点

Lambda test 知识点

1

  1. Lambda function可以配置所用内存大小,当程序所需内存大小超出配置,会返回错误提示,而不是timeout提醒;
  1. Report RequestID:XXXX ,Duration:xxxx ms ,Billed Duration:xxxx ms
  2. Memory size:128 max Memory , Used:129MB, RequestedId:xxxx Process exited before completing request
  1. Lambda的每次调用限制
  1. Memory allocate range:128MB-3008MB,按照64M递增
  2. Ephemeral disk capacity:512M
  3. Number file descriptors:1024
  4. Number of processes or thread :1024
  5. Maximum execution duration per request:300 seconds
  6. Invoke request(Request/Response synchronize) body payload size:6MB
  7. Invoke request(event/asynchronous) body payload size:6MB
  1. 在Lambda function创建的时候需要指定访问S3 ENDPOINT的private VPC配置,一般是通过NAT GATEWAY或者S3的VPC endpoint在路由表中配置;如果不配置就会timeout;
  2. 如果Lambda Function访问S3是通过互联网访问的,就不需要配置S3 ENDPOINT,也不用关注S3在哪个region了;

2

  1. Lambda Function支持的Event Source如下
  • Amazon S3
  • Amazon DynamoDB
  • Amazon Kinesis Data Streams
  • Amazon Simple Notification Service
  • Amazon Simple Email Service
  • Amazon Simple Queue Service
  • Amazon Cognito
  • AWS CloudFormation
  • Amazon CloudWatch Logs
  • Amazon CloudWatch Events
  • AWS CodeCommit
  • Scheduled Events (powered by Amazon CloudWatch Events)
  • AWS Config
  • Amazon Alexa
  • Amazon Lex
  • Amazon API Gateway
  • AWS IoT Button
  • Amazon CloudFront
  • Amazon Kinesis Data Firehose
  • Other Event Sources: Invoking a Lambda Function On Demand

3

  1. Lambda Dead Letter Queues

  2. Dead-letter queues are a powerful concept, which help software developers find software issue patterns in their asynchronous processing components. The way it works is simple—when your messaging component receives a message and detects a fatal or unhandled error while processing the message, it sends information about the message that failed to another location, such as another queue or another notification system. SQS provides dead letter queues today, sending messages that couldn’t be handled to a different queue for further investigation.

  3. AWS Lambda Dead Letter Queues builds upon the concept by enabling Lambda functions to be configured with an SQS queue or SNS topic as a destination to which the Lambda service can send information about an asynchronous request when processing fails. The Lambda service sends information about the failed request when the request will no longer be retried. Supported invocations include:

  • An event type invocation from a custom application
  • Any AWS event source that’s not a DynamoDB table, Amazon Kinesis stream, or API Gateway resource request integration

4

  1. 一般因为Lambda Function本身限制或者产生的其他异常无法处理的payload,你可以通过Lambda Dead Letter Queues进行收集,然后通知对应的负责人;

5

  1. AWS X-Ray 是一项服务,收集您应用程序所服务的请求的相关数据,并提供用于查看、筛选和获取数据洞察力的工具,以确定问题和发现优化的机会。对于任何被跟踪的对您应用程序的请求,您不仅可以查看请求和响应的详细信息,还可以查看您的应用程序对下游 AWS 资源、微服务、数据库和 HTTP Web API 进行的调用的详细信息
  2. X-Ray 开发工具包提供:
  • 拦截器,可添加到您的代码中以跟踪传入 HTTP 请求
  • 客户端处理程序,可分析您的应用程序用来调用其他 AWS 服务的 AWS 开发工具包客户端
  • HTTP 客户端,用于分析对其他内部和外部 HTTP Web 服务的调用

6

  1. Lambda支持的语言包括:java、c#、node.js、go、Python
  2. 当我们是用Lambda的时候,我们只需要关注代码;
  3. Lambda负责提供计算、网络、内存等资源,这也就限制了我们的访问自由,我们是无法登陆到操作系统,安装测试环境及语言环境等;Lambda完成的运维及管理工作,这些工作包括容量获取、健康检查、安全补丁包、代码部署、监控和logging你的代码

7

  1. Ephemeral disk capacity:512M,表示了Lambda的临时存储空间/tmp只有512M,如果我们下载一个超过这个大小的文件进行分析,那是会报错的;

8

  1. AWSLambdaKinesisExecutionRole:这个角色用来给Lambda处理Kinesis执行进行赋权的,如果你正在写一个Lambda function用于处理Kinesis stream event,那么你需要将这个权限policy加上;
  2. Lambda Function向CloudWatch中写LOG数据的时候,一定要记得赋权;

9

  1. 附加 Amazon SQS 队列作为 AWS Lambda 事件源是使用 Lambda 函数处理队列的内容的简单方式。Lambda 将负责:

  2. 自动检索消息并将它们定向到目标 Lambda 函数。

  3. 在您的 Lambda 函数成功完成后立即将其删除。

  4. 当使用这些操作将您的 Lambda 函数映射到 Amazon SQS 队列时,请注意以下配置参数:

  5. BatchSize:AWS Lambda 将从每次 ReceiveMessage 调用中检索的记录的最大数量。Amazon Simple Queue Service 支持的最大批处理大小为每批最多 10 个队列消息。

  6. 已启用:向 AWS Lambda 发送其应开始轮询您的指定 Amazon SQS 队列的信号的标记。

  7. EventSourceArn:AWS Lambda 为新消息监控您的 Amazon SQS 队列的 ARN(Amazon 资源名称)。

  8. FunctionName:当 AWS Lambda 在您的已配置 Amazon SQS 队列上检测到新消息时要调用的 Lambda 函数。

10

  1. When using an AWS Cloudwatch rule to trigger a Lambda event, one of the multiple options you have to pass data onto your Lamba function is “Constant (JSON Text)”. This handy feature allows you to send static content to your function instead of the matched event;
  2. 通过Constant这种方式我们就可以将静态值传递到Function中了

11

  1. 你可以通过一个定制的事件调用Lambda API来调用一个Lambda Function;

12

  1. 对于 CloudFront 分配中的每个缓存行为,当发生特定 CloudFront 事件时,您最多可添加使 Lambda 函数执行的四个触发器(关联)。CloudFront 触发器可以基于四个 CloudFront 事件之一;
  2. 可用于触发 Lambda@Edge 函数的 CloudFront 事件如下所示:
  3. View Request:查看请求器,当 CloudFront 收到查看器的请求但还未检查请求的对象是否在边缘缓存中时,该函数会执行。
  4. View Response:查看响应器,在将请求的文件返回给查看器之前,该函数会执行。请注意,无论文件是否已在边缘缓存中,该函数都会执行。在以下情况下该函数不会执行:‘
  1. 当源返回 400 或更高的 HTTP 状态代码时
  2. 当返回自定义错误页面时
  3. 当从由查看器请求事件触发的函数中生成响应时
  4. 当 CloudFront 将 HTTP 请求自动重定向到 HTTPS 时 (当 查看器协议政策 的值为 Redirect HTTP to HTTPS 时)
  1. Original Request:源请求,仅 当 CloudFront 将请求转发给您的源时,该函数才会执行。当请求的对象在边缘缓存中时,此函数不会执行。
  2. Original Response:源响应,在 CloudFront 收到来自源的响应之后及它将对象缓存在响应中之前,该函数会执行。请注意,即使从源返回了错误,该函数仍会执行。在以下情况函数不会执行
  1. 当请求的文件在边缘缓存中时
  2. 当从由源请求事件触发的函数中生成响应时

13

  1. 更新一个指定Lambda Function,这个操作必须被用在现有的Lambda Function上,不能用在更新Function 配置上;
  2. 如果你使用版本特性,这个API将永远更新$latest 版本;
  3. 当你修改一个Lambda Function的代码或者配置的时候,原来的代码仍旧是可以被调用的,大约一分钟左右的窗口期,对代码调用的请求可能是新的版本也可能是旧的版本;

14

  1. AWS支持以下基于轮询(POLL)的服务

  2. Amazon Kinesis

  3. Amazon DynamoDB

  4. Amazon SQS

15

  1. 您可以为 Lambda 函数创建一个或多个别名。AWS Lambda 别名 类似于指向特定 Lambda 函数版本的指针。有关版本控制的更多信息,请参阅AWS Lambda 版本控制简介。
  2. 通过使用别名,您可以访问别名指向的 Lambda 函数 (例如,调用函数),而调用方无需了解别名指向的特定版本。
  3. AWS Lambda 别名支持以下使用案例:
  1. 根据需要,更轻松地支持提升和回滚新的 Lambda 函数版本– 在最初创建 Lambda 函数 ($LATEST 版本) 后,您可以发布该函数的版本 1。通过创建名为 PROD 的指向版本 1 的别名,现在可以使用 PROD 别名调用 Lambda 函数的版本 1。
  2. 现在您可以使用所有改进来更新代码($LATEST 版本),然后发布另一个改进后的稳定版本(版本 2)。可以通过重新映射 PROD 别名以使其指向版本 2,来将版本 2 提升到生产中。如果发现问题,您可以通过重新映射 PROD 别名以使其指向版本 1,来轻松将生产版本回滚到版本 1。
  3. 简化事件源映射管理– 您可以在事件源映射中使用别名 ARN,而不是使用 Lambda 函数的 Amazon 资源名称 (ARN)。这种方法意味着,在提升新版本或回滚到以前的版本时,您不需要更新事件源映射。

16

  1. Lambda function ARN的形式
  1. ARN:AWS:LAMBDA:AWS-REGION:ACCT-ID:FUNCTION:HELLOWORD:$LASTEST
  2. ARN:AWS:LAMBDA:AWS-REGION:ACCT-ID:FUNCTION:HELLOWORD
  3. ARN:AWS:LAMBDA:AWS-REGION:ACCT-ID:FUNCTION:HELLOWORD:PRODUCTION

17

  1. 看是否是有效的Lambda配置需要遵循的规则
  1. Memory allocate range:128MB-3008MB,按照64M递增
  2. Ephemeral disk capacity:512M
  3. 超时时间:300s以内
  1. 一般如果设置的内存在规定范围内一定要是以64M递增的

18

  1. AWS CONSOLE不支持直接修改Lambda Function Policy的permission,你直接通过CLI或者SDK进行修改;
  2. permission不能加到execution role上;

19

  1. 创建Lambda函数:在您创建 Lambda 函数时,create-function CLI 命令将指定 --vpc-config 参数来提供 VPC 信息。请注意,--runtime 参数指定 python3.6。您还可以使用 python2.7。
  1. $ aws lambda create-function \
  2. --function-name ExampleFunction \
  3. --runtime python3.6 \
  4. --role execution-role-arn \
  5. --zip-file fileb://path/app.zip \
  6. --handler app.handler \
  7. --vpc-config SubnetIds=comma-separated-vpc-subnet-ids,SecurityGroupIds=comma-separated-security-group-ids \
  8. --memory-size 1024
  9. 当您将 VPC 配置添加到 Lambda 函数时,它只能访问该 VPC 中的资源。如果 Lambda 函数既要访问 VPC 资源又要访问公共 Internet,那么 VPC 内部必须具有网络地址转换 (NAT) 实例。
  10. 当 Lambda 函数配置为在 VPC 中运行时,它会带来额外的 ENI 启动性能损失。这意味着,在尝试连接到网络资源时,可能会延迟地址解析。
  11. 如果您的 Lambda 函数需要访问 Internet,请不要将它附加到公共子网或未接入 Internet 的私有子网。相反,仅通过 NAT 实例或 Amazon VPC NAT 网关将它附加到接入了 Internet 的私有子网。
  1. 设置支持VPC的Lambda函数的准则:您的 Lambda 函数会自动根据它处理的事件数量进行扩展。下面提供了设置支持 VPC 的 Lambda 函数来支持扩展行为的一般准则
  1. 如果您的 Lambda 函数访问 VPC,则必须确保您的 VPC 具备足够的 ENI 容量,可以满足您的 Lambda 函数的扩展需求。您可以使用以下公式来确定大致的 ENI 容量。
  1. Projected peak concurrent executions * (Memory in GB / 3GB)
  2. Projected peak concurrent execution – 使用 管理并发 中的信息来确定此值。
  3. Memory – 您为 Lambda 函数配置的内存量。
  4. 所以当我们需要100Lambda Function,在1G的Lambda Function memory的场景下,大哥需要100* 1G/3G=34个ENI;
  1. 您指定的子网应具有足量的可用 IP 地址以匹配 ENI 的数目。
  2. 如果您的 VPC 没有足够的 ENI 或子网 IP,您的 Lambda 函数将不会随着请求的增加而扩展,并且您将会看到函数失败的次数不断增加。AWS Lambda 当前不会将 ENI 或子网 IP 不足而导致的错误记录到 CloudWatch Logs。如果您看到错误不断增加而没有对应的 CloudWatch Logs,则可以同步调用 Lambda 函数来获取错误响应(例如,在 AWS Lambda 控制台中测试您的 Lambda 函数,因为控制台会同步调用您的 Lambda 函数并显示错误)。
  3. 24 CIDR range come with 256 IP address with 251 available ip address;
  4. 25 CIDR range come with 128 IP address with 123 available ip address;
  5. 26 CIDR range come with 64 IP address with 59 available ip address;
  6. 27 CIDR range come with 32 IP address with 27 available ip address;

20

  1. 任何异步调用的 Lambda 函数都将重试两次,然后才会丢弃事件。如果重试失败并且您无法确定具体原因,请使用死信队列 (DLQ) 将未处理的事件直接发送到 Amazon SQS 队列或 Amazon SNS 主题以分析失败原因。
  2. AWS Lambda 会将无法处理的事件直接发送到指定的 Amazon SNS 主题或 Amazon SQS 队列。未指定 DLQ 的函数会在用尽重试次数之后丢弃事件。有关重试策略的更多信息,请参阅了解重试行为。

21

  1. 环境变量:利用 Lambda 函数的环境变量,您可以将设置动态传递到函数代码和库,而无需对代码进行任何更改。环境变量是您使用 AWS Lambda 控制台、AWS Lambda CLI 或 AWS Lambda 软件开发工具包作为函数配置的一部分创建并修改的密钥值对。AWS Lambda 随后会使用相应语言所支持的标准 API(如适用于 Node.js 函数的 process.env)将这些密钥值对提供给您的 Lambda 函数代码。
  2. 环境变量应用:您可以使用环境变量帮助库了解以下信息:安装文件的目录、存储输出的位置、存储连接和日志记录设置等。通过仅这些设置与应用程序逻辑分隔开,您在需要基于不同设置更改相应函数行为时将无需更新您的函数代码
  3. 环境变量加密:当您创建或更新使用环境变量的 Lambda 函数时,AWS Lambda 将使用 AWS Key Management Service 对其进行加密。当系统调用您的 Lambda 函数时,这些值已被加密且可供 Lambda 代码使用。
  1. 当您第一次在某个区域中创建或更新使用环境变量的 Lambda 函数时,系统会在 AWS KMS.中自动为您创建一个默认服务密钥。此密钥用于加密环境变量。但是,如果您希望使用加密帮助程序,并在创建 Lambda 函数后使用 KMS 加密环境变量,则您必须创建自己的 AWS KMS 键并选择它而不是默认键。默认键在选择时将给出错误。创建您自己的密钥可以实现更高的灵活性,让您可以创建、轮换、禁用和定义访问控制,并审核用于保护数据的加密密钥。有关更多信息,请参阅 AWS Key Management Service 开发人员指南。
  1. 存储敏感信息:如上一节所述,当您部署 Lambda 函数时,您指定的所有环境变量都会在部署过程中 (而不是之后) 默认加密。然后当调用相应函数时,AWS Lambda 会自动解密这些环境变量。如果您需要在环境变量中存储敏感信息,我们强烈建议您先加密此类信息,然后再部署您的 Lambda 函数。

22

  1. 为了简化创建执行角色的过程,AWS Lambda 提供了以下您可以使用的 AWS 托管(预定义)权限策略。这些策略包括特定情景的常用权限:
  1. AWSLambdaBasicExecutionRole - 仅为写入日志的 Amazon CloudWatch Logs 操作授予权限。如果您的 Lambda 函数除了写入日志之外不访问任何其他 AWS 资源,您可以使用此策略。
  2. AWSLambdaKinesisExecutionRole - 授予 Amazon Kinesis Data Streams 操作和 CloudWatch Logs 操作权限。如果您在编写 Lambda 函数来处理 Kinesis 流事件,您可以附加此权限策略。
  3. AWSLambdaDynamoDBExecutionRole - 授予 DynamoDB 流操作和 CloudWatch Logs 操作的权限。如果您在编写 Lambda 函数来处理 DynamoDB 流事件,您可以附加此权限策略。
  4. AWSLambdaVPCAccessExecutionRole - 授予 Amazon Elastic Compute Cloud (Amazon EC2) 操作管理弹性网络接口 (ENI) 的权限。如果您正在编写 Lambda 函数来访问 Amazon Virtual Private Cloud (Amazon VPC) 服务中 VPC 的资源,则您可以附加此权限策略。该策略还授予 CloudWatch Logs 操作写入日志的权限。
  1. AWSLambdaBasicExecutionRole对应的设置
  1. logsCreateLogGroup
  2. logsCreateLogStream
  3. logsPutLogsEvent

23

  1. AWS Lambda CloudWatch 指标

    1. Invocations:测量某个函数在响应某个事件或调用 API 调用时被调用的次数。这将替代已弃用的 RequestCount 指标。这包括成功调用和失败调用,但不包括被阻止的尝试。这等于函数的计费请求数。请注意,如果这些指标具有非零值,则 AWS Lambda 仅将这些指标发送到 CloudWatch。
    2. Errors:测量由于函数出错(响应代码 4XX)而导致失败的调用数。这将替代已弃用的 ErrorCount 指标。失败的调用可能会触发成功的重试尝试。这包括:
  • 已处理的异常 (例如 context.fail(error))
  • 导致代码退出的未处理的异常
  • 内存不足异常
  • 超时
  • 权限错误
  • 这不包括由于调用速率超出默认并行限制(错误代码 429)导致失败的调用或由于内部服务错误(错误代码 500)导致的失败
  1. Dead Letter Error:当 Lambda 无法将失败的事件负载写入您配置的死信队列时将提高。原因可能如下:
  • 权限错误
  • 下游服务限制
  • 资源配置错误
  • 超时
  1. Duration:测量从函数代码作为调用的结果开始执行到其停止执行所经过的时间。这将替代已弃用的 Latency 指标。可能的最大数据点值为函数超时配置。计费的持续时间将向上涉入到近 100 毫秒。请注意,如果这些指标具有非零值,则 AWS Lambda 仅将这些指标发送到 CloudWatch。
  2. Throttles:测量由于调用速率超过客户的并行限制(错误代码 429)而被阻止的 Lambda 函数调用尝试次数。失败的调用可能会触发成功的重试尝试。
  3. IteratorAge:仅为基于流的调用发出 (由 Amazon DynamoDB 流或 Kinesis 流触发的功能)。度量每一批已处理记录的最后一条记录的年限。年限是 Lambda 收到批次的时间与批次中的最后一条记录写入到流的时间之差。
  4. ConcurrentExecutions:针对账户中的所有函数以及指定了自定义并发限制的函数,作为聚合指标发布。不适用于版本或别名。衡量给定函数在给定时间点并发执行的总和。如果在一个时间段内聚合,则必须将其视为平均指标。
  5. UnreservedConcurrentExecutions:仅作为账户中所有函数的聚合指标发出。不适用于函数、版本或别名。表示没有指定自定义并发限制的函数的并发总和。

24

  1. 在创建 Lambda 函数时,只有一个版本,即,$LATEST 版本。
  2. 您可使用此函数的 Amazon 资源名称 (ARN) 来引用它。有两个与该初始版本关联的 ARN
  1. 限定的 ARN - 具有版本后缀的函数 ARN:
  1. arn:aws:lambda:aws-region:acct-id:function:helloworld:$LATEST
  1. 非限定的 ARN - 不具有版本后缀的函数 ARN。您可以在所有相关的操作中使用该非限定 ARN。不过,您无法使用该 ARN 创建别名:您可以在所有相关的操作中使用该非限定 ARN。不过,您无法使用该 ARN 创建别名
  1. arn:aws:lambda:aws-region:acct-id:function:helloworld
  1. 您可以使用任何以下方法发布版本
  1. 显式发布版本 – 您可以使用 PublishVersion API 操作显式发布版本。有关更多信息,请参阅 PublishVersion。该操作使用 $LATEST 版本中的代码和配置创建新的版本。
  2. 在创建或更新 Lambda 函数时发布版本 – 也可以使用 CreateFunction 或 UpdateFunctionCode 请求并在请求中添加可选的 publish 参数以发布版本:
  1. 在 CreateFunction 请求中指定 publish 参数以创建新的 Lambda 函数 ($LATEST 版本)。然后,您可以立即创建一个快照并将其指定为版本 1 以发布新函数。有关 CreateFunction 的更多信息,请参阅 CreateFunction。
  2. 在 UpdateFunctionCode 请求中指定 publish 参数以更新 LATEST 中发布版本。有关 UpdateFunctionCode 的更多信息,请参阅 UpdateFunctionCode。
  1. Lambda 函数的每个版本均为具有 Amazon 资源名称 (ARN) 的唯一资源。以下示例显示了 helloworldLambda 函数的版本号 1 的 ARN。
  1. arn:aws:lambda:aws-region:acct-id:function:helloworld:1
  2. 该 ARN 是限定的,其中版本号为后缀。发布的版本只能有一个限定的 ARN。

25

  1. Lambda 函数可能会由于以下任意原因而失败:
  1. 函数在尝试访问终端节点时超时。
  2. 函数无法成功解析输入数据。
  3. 函数遇到资源限制,例如内存不足错误或者其他超时。
  1. 并非基于流的事件源- 这些事件源中的一部分设置为同步调用 Lambda 函数,另一些则异步调用。相应的异常处理方式分别如下:
  1. 同步调用- 发出调用的应用程序收到 429 错误并负责重试。有关支持的事件源列表及其使用的调用类型,请参阅支持的事件源。这些事件源可能会有内置到集成中的额外重试。如果您直接通过 AWS 开发工具包调用 Lambda 函数,则您的客户端会收到错误并可以选择重试。
  2. 异步调用– 使用异步事件调用 Lambda 函数之前会对它们进行排队。如果 AWS Lambda 无法完全处理事件,它将自动重试调用两次,且在重试之间有一定的延迟。如果为函数指定了一个死信队列,那么失败的事件将被发送到指定的 Amazon SQS 队列或 Amazon SNS 主题。如果保留默认设置,不指定死信队列 (DLQ) (非必需操作),那么系统将丢弃事件。有关更多信息,请参阅 死信队列。
  1. 基于轮询(或拉模型)事件源(基于流):这些包括 Kinesis Data Streams 或 DynamoDB。如果 Lambda 函数调用失败,AWS Lambda 尝试处理错误的记录批次,直至数据过期,这最多可以为七天。将异常作为阻塞处理,并且 AWS Lambda 不会从分区中读取任何新记录,直至失败的记录批次过期或者处理成功。这确保 AWS Lambda 按顺序处理流事件。
  2. 基于轮询的事件源(非基于流):这包括 Amazon Simple Queue Service。如果您将 Amazon SQS 队列配置为事件源,AWS Lambda 将轮询队列中的一批记录并调用您的 Lambda 函数。如果失败,AWS Lambda 将继续处理批处理中的其他消息。同时,AWS Lambda 将继续重试处理失败的消息,直到出现以下情况之一:
  1. 消息最终已成功调用:在这种情况下,消息将从队列中删除。
  2. 消息保留期到期:在这种情况下,消息将被删除,或者如果您已配置 Amazon SQS 死信队列,失败信息将在这里为您定向,以供您分析。

你可能感兴趣的:(Lambda TEST 知识点)