本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
自定义操作 Lambda 执行块
自定义操作 Lambda 执行块允许您使用 Lambda 函数向计划添加自定义步骤。
配置
要配置 Lambda 执行块,请输入以下值。
重要
在配置执行块之前,请确保计划的执行角色具有正确的 IAM 策略。有关更多信息,请参阅 自定义操作 Lambda 执行块示例策略。
步骤名称:输入名称。
步骤描述(可选):输入步骤的描述。
要@@ 在主区域和次要区域调用的 Lambda 函数的 ARN:指定要在此步骤中运行的 Lambda 函数的 ARN。
负载(可选):输入有效的 JSON 负载以调用 Lambda 函数。
运行 Lambda 函数的区域:在下拉菜单中,选择您想要在其中运行 Lambda 函数的区域。
超时:输入超时值。
重试间隔:输入重试间隔,如果在此间隔内没有成功,则重新运行 Lambda 函数。
不雅执行(可选):选择是否在非优雅(计划外)执行期间跳过此执行块。如果您不选择跳过该阻止,则区域切换将在不雅的执行期间调用 Lambda 函数。
然后,选择保存步骤。
工作原理
当计划执行达到此步骤时,区域切换将调用指定的 Lambda 函数。调用详情(调用的 Lambda 的 ARN 和有效负载)可在与该步骤对应的执行事件日志中找到。调用后,区域切换会轮询 Lambda 以返回成功响应,直到达到步骤超时为止。如果 Lambda 在配置的超时时间内遇到错误,则该步骤将失败,执行将暂停,等待您重试、跳过或取消。
当您的负载是 JSON 对象时(或者未配置任何负载时),区域切换会添加以下执行元数据密钥:
InvokedBy—始终设置为。RegionSwitchPlanArn— 计划的 ARN。ExecutionId— 执行标识符,形式为region/execution-id。StepName— 步骤的名称。
此块支持优雅和非优雅的执行模式。在非正常执行期间,只有当您将不雅行为配置为跳过时,区域切换才会跳过该步骤。如果您未配置不当行为,则区域切换将使用与优雅执行相同的配置来调用 Lambda 函数。
当您为 Lambda 执行块配置负载时,区域切换会按如下方式处理执行元数据注入:
JSON 对象有效负载:区域切换会将其执行元数据密钥(例如
PlanArnExecutionId、和StepName)合并到 JSON 对象的顶层。如果您的负载包含与元数据键同名的密钥,则您的值优先,并且会省略冲突的元数据密钥。请注意,密钥匹配区分大小写,例如,密钥与元数据密钥planArn不冲突。PlanArnNon-JSON-object payloads:如果您的负载是 JSON 字符串、数字、布尔值或数组,则 Region switch 会将您的负载转发到 Lambda 函数不变,并且不会注入执行元数据。
要在您的 Lambda 函数中接收区域切换执行元数据,请确保您的负载是 JSON 对象。如果您的负载是任何其他类型,则不会包含元数据。此外,如果要保留区域切换注入的元数据值,请避免使用与元数据键匹配的密钥名称。
停用区域依赖关系
创建自定义操作 Lambda 执行块时,必须指定两个 Lambda 函数,分别位于计划的每个区域。您可以配置在执行期间在哪个区域调用 Lambda:激活区域或停用区域。如果您将 Lambda 配置为在停用区域中执行,请注意,您依赖的是该区域的可用性,而该可用性在故障转移期间可能不可用。考虑为该区块启用非优雅模式,以便在停用区域不可用时可以选择跳过此步骤。
示例:带有按键碰撞且接近匹配的有效载荷
假设您在配置执行块时输入了以下有效负载。请注意,StepName与元数据密钥完全匹配(区分大小写冲突),但planArn不匹配,PlanArn因为大小写不同:
{ "action": "enable-maintenance-page", "environment": "production", "StepName": "my-custom-step-label", "planArn": "arn:aws:my-custom:value" }
当区域切换调用 Lambda 函数时,它会将执行元数据合并到您的对象中。因为StepName会发生碰撞,所以你的值获胜,元数据StepName被省略。由于大小写planArn不同PlanArn,因此两个密钥都存在于最终有效载荷中:
{ "action": "enable-maintenance-page", "environment": "production", "StepName": "my-custom-step-label", "planArn": "arn:aws:my-custom:value", "InvokedBy": "RegionSwitch", "PlanArn": "arn:aws:arc-region-switch:us-east-1:123456789012:plan/my-recovery-plan", "ExecutionId": "us-west-2/abc123-def456" }
示例:未配置有效负载
如果您未配置有效负载,则区域切换仅发送执行元数据密钥:
{ "InvokedBy": "RegionSwitch", "PlanArn": "arn:aws:arc-region-switch:us-east-1:123456789012:plan/my-recovery-plan", "ExecutionId": "us-west-2/abc123-def456", "StepName": "Display maintenance page" }
示例: Non-JSON-object 有效载荷
如果您的负载不是 JSON 对象,则区域切换会将其转发到 Lambda 函数,且不会注入执行元数据。例如,如果您输入以下字符串有效负载:
"enable-maintenance-page"
Lambda 函数正好接收该字符串,不添加任何元数据密钥。