

# Synthetics 运行时版本


创建或更新金丝雀时，您可以为金丝雀选择 Synthetics 运行时版本。Synthetics 运行时是调用脚本处理程序的 Synthetics 代码，以及捆绑依赖关系的 Lambda 层的组合。

CloudWatch Synthetics 当前支持使用 Node.js、Python 或 Java 语言的运行时，所支持的框架有 Puppeteer、Playwright 和 Selenium。

我们建议您始终为金丝雀使用最新的运行时版本，以便能够使用最新的功能和对 Synthetics 库进行的更新。

**请注意**：每当运行金丝雀来启用新版本的 Synthetics 运行时之时，金丝雀使用的所有 Synthetics 库函数也会自动移动到该 Synthetics 运行时所支持的同一个 NodeJS 版本。

**Topics**
+ [

# 使用 Java 的运行时版本
](CloudWatch_Synthetics_Library_Java.md)
+ [

# 使用 Node.js 和 Playwright 的运行时版本
](CloudWatch_Synthetics_Library_nodejs_playwright.md)
+ [

# 使用 Node.js 和 Puppeteer 的运行时版本
](CloudWatch_Synthetics_Library_nodejs_puppeteer.md)
+ [

# 使用 Python 和 Selenium Webdriver 的运行时版本
](CloudWatch_Synthetics_Library_python_selenium.md)
+ [

# 使用 Node.js 的运行时版本
](CloudWatch_Synthetics_Library_Nodejs.md)
+ [

# 运行时版本支持策略
](CloudWatch_Synthetics_Runtime_Support_Policy.md)
+ [

# 运行时版本更新
](CloudWatch_Synthetics_Runtime_Version_Update.md)

# 使用 Java 的运行时版本


下文包含有关 CloudWatch Synthetics Java 运行时版本的信息。该运行时不包含任何浏览器或框架。

这些运行时版本的命名约定为 `syn-language -majorversion.minorversion`。

## syn-java-1.0


**主要依赖项**：
+ AWS Lambda 运行时 Java 21

 **功能** 
+ *CloudWatch Logs 集成* – 您可以通过 CloudWatch Synthetics 控制台查询和筛选日志。每条日志消息都包含唯一 ` canaryRunId`，因此可以轻松搜索特定 Canary 运行的日志。
+ *指标* – 您可以通过 CloudWatch 指标监控金丝雀运行成功率和持续时间。您还可以配置警报，在金丝雀检测到问题时发出警报。
+ *金丝雀构件* – 每次金丝雀运行都会上传一份与该次运行和运行步骤相对应的详细报告。这些报告可通过 Amazon S3 访问。
+ *支持追踪功能* – 您可以通过 X-Ray 为金丝雀发出的所有请求生成追踪数据。每次金丝雀运行都与一个追踪 ID 相关联。

# 使用 Node.js 和 Playwright 的运行时版本


以下各节包含有关用于 Node.js 和 Playwright 的 CloudWatch Synthetics 运行时版本的信息。Playwright 是用于浏览器测试的开源自动化库。有关 Playwright 的更多信息，请参阅 [https://playwright.dev/](https://playwright.dev) 

这些运行时版本的命名约定为 `syn-language -framework-majorversion. minorversion`。

## syn-nodejs-playwright-6.0


**重要**  
Synthetics `syn-nodejs-playwright-5.1` 及更高版本中，Synthetics 运行时将使用新的命名空间。请迁移金丝雀脚本以使用新的命名空间。在未来的版本中，旧命名空间将被弃用。  
@amzn/synthetics-playwright → @aws/synthetics-playwright

**主要依赖项**：
+ AWS Lambda 运行时 Node.js 22.x
+ Playwright 版本 1.58.2
+ Playwright/test 版本 1.58.2
+ Chromium 145.0.7632.77 版
+ Firefox 版本 146.0.1

 **syn-nodejs-playwright-6.0 中的变化** 
+ 应用了安全补丁，并更新了 Playwright 和浏览器版本。

有关更多信息，请参阅下列内容：
+  [Playwright 更改日志](https://playwright.dev/docs/release-notes) 
+  [Playwright API 参考](https://playwright.dev/docs/api/class-playwright) 

## 先前的 Node.js 和 Playwright 运行时版本


下列 Node.js 和 Playwright 的早期运行时版本仍受支持。

### syn-nodejs-playwright-5.1


**主要依赖项**：
+ AWS Lambda 运行时 Node.js 22.x
+ Playwright 版本 1.57.0
+ Playwright/test 版本 1.57.0
+ Chromium 143.0.7499.169 版
+ Firefox 版本 142.0.1

 **syn-nodejs-playwright-5.1 中的变化** 
+ Synthetics 运行时命名空间迁移。
+ 类型定义在 [npm 注册表](https://www.npmjs.com/package/@aws/synthetics-playwright)中可用。请确保类型定义包的版本与您的金丝雀的运行时版本相匹配。

有关更多信息，请参阅下列内容：
+  [Playwright 更改日志](https://playwright.dev/docs/release-notes) 
+  [Playwright API 参考](https://playwright.dev/docs/api/class-playwright) 

### syn-nodejs-playwright-5.0


**主要依赖项**：
+ AWS Lambda 运行时 Node.js 22.x
+ Playwright 版本 1.57.0
+ Playwright/test 版本 1.57.0
+ Chromium 143.0.7499.4 版
+ Firefox 版本 142.0.1

 **syn-nodejs-playwright-5.0 中的变化** 
+ 应用了安全补丁，并更新了 Playwright 和浏览器版本。

有关更多信息，请参阅下列内容：
+  [Playwright 更改日志](https://playwright.dev/docs/release-notes) 
+  [Playwright API 参考](https://playwright.dev/docs/api/class-playwright) 

### syn-nodejs-playwright-4.0


**主要依赖项**：
+ AWS Lambda 运行时 Node.js 22.x
+ Playwright 版本 1.55.0
+ Playwright/test 版本 1.55.0
+ Chromium 140.0.7339.16 版
+ Firefox 版本 141.0

 **syn-nodejs-playwright-4.0 中的变化** 
+ 应用了安全补丁，并更新了 Playwright 和浏览器版本。

有关更多信息，请参阅下列内容：
+  [Playwright 更改日志](https://playwright.dev/docs/release-notes) 
+  [Playwright API 参考](https://playwright.dev/docs/api/class-playwright) 

### syn-nodejs-playwright-3.0


**主要依赖项**：
+ AWS Lambda 运行时 Node.js 20.x
+ Playwright 版本 1.53.0
+ Playwright/test 版本 1.53.0
+ Chromium 版本 138.0.7204.168

 **syn-nodejs-playwright-3.0 中的变化** 
+ 多浏览器支持：现可在 Firefox 或 Chrome 中运行 nodejs puppeteer 金丝雀
+ 可视化监控支持

有关更多信息，请参阅下列内容：
+  [Playwright 更改日志](https://playwright.dev/docs/release-notes) 
+  [Playwright API 参考](https://playwright.dev/docs/api/class-playwright) 

### syn-nodejs-playwright-2.0


**主要依赖项**：
+ AWS Lambda 运行时 Node.js 20.x
+ Playwright 版本 1.49.1
+ Playwright/test 版本 1.49.1
+ Chromium 版本 131.0.6778.264

 **syn-nodejs-playwright-2.0 中的变化**：
+ 修复了 HAR 文件中给定请求的总持续时间和计时总和之间不一致的问题。
+ 支持对金丝雀进行试运行，允许临时执行或执行安全的金丝雀更新。

有关更多信息，请参阅下列内容：
+  [Playwright 更改日志](https://playwright.dev/docs/release-notes) 
+  [Playwright API 参考](https://playwright.dev/docs/api/class-playwright) 

### syn-nodejs-playwright-1.0


**主要依赖项**：
+ AWS Lambda 运行时 Node.js 20.x
+ Playwright 版本 1.44.1
+ Playwright/test 版本 1.44.1
+ Chromium 版本 126.0.6478.126

**功能：**
+ **PlayWright 支持** – 您可以使用 Playwright 自动化框架编写 Canary 脚本。您可以将现有的 Playwright 脚本作为 Canary 运行，并通过 AWS 监控功能对其进行增强。
+ **CloudWatch Logs 集成** – 您可以通过 CloudWatch Synthetics 控制台查询和筛选日志。每条日志消息都包含唯一 `canaryRunId`，因此可以轻松搜索特定 Canary 运行的日志。
+ **指标和 Canary 构件** – 您可以通过 CloudWatch 指标监控 Canary 运行通过率，并配置警报进而在 Canary 检测到问题时提醒您。
+ **屏幕截图和步骤关联** – 您可以使用原生 Playwright 功能捕获屏幕截图，以便在每次运行时可视化 Canary 脚本的各个阶段。屏幕截图会自动与 Canary 步骤相关联，并上传到 Amazon S3 存储桶。
+ **多个选项卡** – 您可以创建打开多个浏览器选项卡的 Canary，并从每个选项卡访问屏幕截图。您可以在 Synthetics 中创建多选项卡和多步骤用户工作流程。

# 使用 Node.js 和 Puppeteer 的运行时版本


使用 Node.js 和 Puppeteer 的第一个运行时版本被命名为 `syn-1.0`。后续运行时版本采用命名约定 `syn-language -majorversion.minorversion`。从 `syn-nodejs-puppeteer-3.0` 开始，命名约定为 `syn- language-framework-majorversion .minorversion` 

额外添加的 `-beta` 后缀用以显示运行时版本当前为测试预览版。

具有相同主版本号的运行时版本将始终向后兼容。

金丝雀中的 Lambda 代码已配置为具有最多 1 GB 内存。在配置的超时值之后，该超时将适用于每个运行的金丝雀。如果未为金丝雀指定超时值，则 CloudWatch 会根据金丝雀的频率来选择超时值。如要配置超时值，请使此值不要短于 15 秒钟，以预留 Lambda 冷启动以及启动金丝雀工具的时间。

## syn-nodejs-puppeteer-15.0


`syn-nodejs-puppeteer-15.0` 是 Node.js 和 Puppeteer 最新的 Synthetics 运行时系统。

**重要**  
Synthetics `syn-nodejs-puppeteer-13.1` 及更高版本中，Synthetics 运行时将使用新的命名空间。请迁移金丝雀脚本以使用新的命名空间。在未来的版本中，旧命名空间将被弃用。  
Synthetics → @aws/synthetics-puppeteer
SyntheticsLink → @aws/synthetics-link
SyntheticsLogger → @aws/synthetics-logger
SyntheticsLogHelper → @aws/synthetics-log-helper
BrokenLinkCheckerReport → @aws/synthetics-broken-link-checker-report

**重要**  
Synthetics 运行时 `syn-nodejs-puppeteer-11.0` 及更高版本仅支持以下步骤级配置覆盖：  
 `screenshotOnStepStart` 
 `screenshotOnStepSuccess` 
 `screenshotOnStepFailure` 
 `stepSuccessMetric` 
 `stepDurationMetric` 
 `continueOnStepFailure/continueOnHttpStepFailure` 
 `stepsReport` 

有关更多信息，请参阅下列内容：
+  [Puppeteer 更改日志](https://pptr.dev/CHANGELOG#24375-2026-02-19) 
+  [Puppeteer API 参考](https://github.com/puppeteer/puppeteer/blob/puppeteer-v24.37.5/docs/api/index.md) 

**主要依赖项**：
+ Lambda 运行时系统 Node.js 22.x
+ Puppeteer-core 版本 24.37.5
+ Chromium 145.0.7632.77 版
+ Firefox 版本 147.0.4

 **syn-nodejs-puppeteer-15.0 中的变化** 
+ 应用了安全补丁，并更新了 Puppeteer 和浏览器版本。
+ 修复了 continueOnHttpStepFailure 未得到尊重的错误，该错误导致尽管出现了 HTTP 步骤失败，但金丝雀运行仍被错误地标记为成功。

## 先前的 Node.js 和 Puppeteer 运行时版本


下列 Node.js 和 Puppeteer 的早期运行时版本仍受支持。

### syn-nodejs-puppeteer-14.0


有关更多信息，请参阅下列内容：
+  [Puppeteer 更改日志](https://pptr.dev/CHANGELOG#24340-2025-12-19) 
+  [Puppeteer API 参考](https://github.com/puppeteer/puppeteer/blob/puppeteer-v24.34.0/docs/api/index.md) 

**主要依赖项**：
+ Lambda 运行时系统 Node.js 22.x
+ Puppeteer-core 版本 24.34.0
+ Chromium 143.0.7499.169 版
+ Firefox 版本 146.x

 **syn-nodejs-puppeteer-14.0 中的变化** 
+ 应用了安全补丁，并更新了 Puppeteer 和浏览器版本。

### syn-nodejs-puppeteer-13.1


`syn-nodejs-puppeteer-13.1` 是 Node.js 和 Puppeteer 最新的 Synthetics 运行时系统。

有关更多信息，请参阅下列内容：
+  [Puppeteer 更改日志](https://pptr.dev/CHANGELOG#24250-2025-10-15) 
+  [Puppeteer API 参考](https://github.com/puppeteer/puppeteer/blob/puppeteer-v24.2.0/docs/api/index.md) 

**主要依赖项**：
+ Lambda 运行时系统 Node.js 22.x
+ Puppeteer-core 版本 24.25.0
+ Chromium 142.0.7444.175 版
+ Firefox 版本 145.x

 **syn-nodejs-puppeteer-13.1 中的变化** 
+ Synthetics 运行时命名空间迁移。
+ 类型定义在 npm 注册表中可用。请确保类型定义包的版本与您的金丝雀的运行时版本相匹配。
  +  [@aws/synthetics-puppeteer](https://www.npmjs.com/package/@aws/synthetics-puppeteer) 
  +  [@aws/synthetics-link](https://www.npmjs.com/package/@aws/synthetics-link) 
  +  [@aws/synthetics-broken-link-checker-report](https://www.npmjs.com/package/@aws/synthetics-broken-link-checker-report) 
  +  [@aws/synthetics-log-helper](https://www.npmjs.com/package/@aws/synthetics-log-helper) 
  +  [@aws/synthetics-logger](https://www.npmjs.com/package/@aws/synthetics-logger) 

### syn-nodejs-puppeteer-13.0


有关更多信息，请参阅下列内容：
+  [Puppeteer 更改日志](https://pptr.dev/CHANGELOG#24250-2025-10-15) 
+  [Puppeteer API 参考](https://github.com/puppeteer/puppeteer/blob/puppeteer-v24.2.0/docs/api/index.md) 

**主要依赖项**：
+ Lambda 运行时系统 Node.js 22.x
+ Puppeteer-core 版本 24.25.0
+ Chromium 142.0.7444.175 版
+ Firefox 版本 145.x

 **syn-nodejs-puppeteer-13.0 中的变化** 
+ 应用了安全补丁，并更新了 Puppeteer 和浏览器版本。
+ 错误修复：修复了由并发映射访问导致的间歇性运行时扩展崩溃问题

### syn-nodejs-puppeteer-12.0


有关更多信息，请参阅下列内容：
+  [Puppeteer 更改日志](https://pptr.dev/CHANGELOG#24221-2025-09-23) 
+  [Puppeteer API 参考](https://github.com/puppeteer/puppeteer/blob/puppeteer-v24.22.1/docs/api/index.md) 

**主要依赖项**：
+ Lambda 运行时系统 Node.js 22.x
+ Puppeteer-core 版本 24.22.1
+ Chromium 140.0.7339.185 版
+ Firefox 版本 143.0.1

 **syn-nodejs-puppeteer-12.0 中的变化** 
+ 应用了安全补丁，并更新了 Puppeteer 和浏览器版本。
+ 修复了受限标头编辑的错误：修复了在某些情况下，executeHttpStep() 中受限标头未正确编辑的问题。现在其行为与 Puppeteer 10.0 版本保持一致。
+ 修复了 includeResponseBody 配置错误的问题：修复了在某些情况下，HAR 文件生成可能错误应用 includeResponseBody 配置设置的问题。现在，HAR 可确保在配置设置时正确排除响应正文。
+ 修复了请求捕获生命周期的问题：修复了在某些情况下，HTTP 请求捕获器可能导致请求持续聚合的问题。现在，每次执行步骤后，记录都会正确终止。

### syn-nodejs-puppeteer-11.0


有关更多信息，请参阅下列内容：
+  [Puppeteer 更改日志](https://pptr.dev/CHANGELOG) 
+  [Puppeteer API 参考](https://github.com/puppeteer/puppeteer/blob/puppeteer-v24.2.0/docs/api/index.md) 

**主要依赖项**：
+ Lambda 运行时系统 Node.js 20.x
+ Puppeteer-core 版本 24.15.0
+ Chromium 版本 138.0.7204.168

 **syn-nodejs-puppeteer-11.0 中的变化** 
+ 多浏览器支持：现可在 Firefox 或 Chrome 中运行 Node.js Puppeteer 金丝雀
+ 简化打包：无需使用 Node.js/node\$1modules 目录结构即可直接在根目录下打包脚本
+ 屏幕截图集成：使用原生 Puppeteer 函数捕获屏幕截图，可视化展示金丝雀脚本的各执行阶段。Synthetics 会自动将屏幕截图与金丝雀检测步骤关联，并上传至 Amazon S3
+ 增强型日志查询：通过 CloudWatch Insights 控制台查询和筛选日志。每条日志消息都包含一个独特的 `canaryRunId` 以便于搜索
+ 配置文件支持：使用 synthetics.json 文件定义和更新 Synthetics 设置。这种配置与脚本逻辑的分离方式提高了可维护性和可复用性
+ 多选项卡支持：创建可打开多个浏览器选项卡的金丝雀，并从每个选项卡访问屏幕截图。在 Synthetics 中创建多选项卡和多步骤用户工作流程
+ 安全修复
+ 可视化监控错误修复
+ 增加了对具有可配置日志级别的结构化 JSON 日志的支持：日志现在以 JSON 格式发出，以便在 CloudWatch 中更轻松地进行解析和查询。日志级别（例如 DEBUG、INFO、TRACE）可通过环境变量进行配置，允许用户根据自己的需求控制详细程度
+ 对 ES 语法的支持

### syn-nodejs-puppeteer-10.0


有关更多信息，请参阅下列内容：
+  [Puppeteer 更改日志](https://pptr.dev/CHANGELOG) 
+  [Puppeteer API 参考](https://github.com/puppeteer/puppeteer/blob/puppeteer-v24.2.0/docs/api/index.md) 

**主要依赖项**：
+ Lambda 运行时系统 Node.js 20.x
+ Puppeteer-core 版本 24.2.0
+ Chromium 版本 131.0.6778.264

 **syn-nodejs-puppeteer-10.0 中的变化**：
+ 修复了关闭浏览器耗时过长的问题。
+ 支持对金丝雀进行试运行，允许临时执行或执行安全的金丝雀更新。

### syn-nodejs-puppeteer-9.1


**主要依赖项**：
+ Lambda 运行时系统 Node.js 20.x
+ Puppeteer-core 版本 22.12.1
+ Chromium 版本 126.0.6478.126

**syn-nodejs-puppeteer-9.1 中的变化**：修复了与 HAR 文件中的日期范围和待处理请求相关的错误。

### syn-nodejs-puppeteer-9.0


**主要依赖项**：
+ Lambda 运行时系统 Node.js 20.x
+ Puppeteer-core 版本 22.12.1
+ Chromium 版本 126.0.6478.126

**syn-nodejs-puppeteer-9.0 中的变化**：修复了启用视觉监控功能的错误。

### syn-nodejs-puppeteer-8.0


**警告**  
由于存在错误，`syn-nodejs-puppeteer-8.0` 运行时不支持在金丝雀系统中进行可视化监控。升级到 [syn-nodejs-puppeteer-9.0](#CloudWatch_Synthetics_runtimeversion-nodejs-puppeteer-9.0) 以修复可视化监视的错误。

**重要**  
Lambda Node.js 18 和更高版本运行时系统使用适用于 JavaScript V3 的 AWS SDK。如果需要从较早的运行时迁移金丝雀，请遵循 GitHub 上的 [aws-sdk-js-v3 Migration Workshop](https://github.com/aws-samples/aws-sdk-js-v3-workshop)。有关 AWS SDK for JavaScript 版本 3 的更多信息，请参阅[此博客文章](https://aws.amazon.com/blogs/developer/modular-aws-sdk-for-javascript-is-now-generally-available/)。

**主要依赖项**：
+ Lambda 运行时系统 Node.js 20.x
+ Puppeteer-core 22.10.0 版
+ Chromium 125.0.6422.112 版

**syn-nodejs-puppeteer-8.0 中的更新**：
+  **支持双重身份验证** 
+ 修复了与某些服务客户端在 Node.js SDK V3 响应中丢失数据相关的**错误**。

## 已弃用的 Node.js 和 Puppeteer 运行时版本


下列 Node.js 和 Puppeteer 运行时系统已弃用。有关运行时弃用日期的信息，请参阅 [CloudWatch Synthetics 运行时弃用日期](CloudWatch_Synthetics_Runtime_Support_Policy.md#runtime_deprecation_dates)。

### syn-nodejs-puppeteer-7.0


**主要依赖项**：
+ Lambda 运行时系统 Node.js 18.x
+ Puppeteer-core 21.9.0 版
+ Chromium 121.0.6167.139 版

**代码大小**：

您可以将大小为 80MB 的代码和依赖项打包到此运行时中。

**syn-nodejs-puppeteer-7.0 中的更新**：
+ **更新了 Puppeteer 和 Chromium 中捆绑库的版本**：Puppeteer 和 Chromium 依赖项已更新到新版本。
**重要**  
从 Puppeteer 19.7.0 迁移到 Puppeteer 21.9.0 引入了有关测试和筛选条件的重大更改。有关更多信息，请参阅 [puppeteer：v20.0.0](https://github.com/puppeteer/puppeteer/releases/tag/puppeteer-v20.0.0) 和 [puppeteer-core：v21.0.0](https://github.com/puppeteer/puppeteer/releases/tag/puppeteer-core-v21.0.0) 中的**重大更改**部分。

 **推荐升级到 AWS SDK v3** 

Lambda nodejs18.x 运行时不支持 AWS SDK v2。强烈建议您迁移到 AWS SDK v3。

### syn-nodejs-puppeteer-6.2


**主要依赖项**：
+ Lambda 运行时系统 Node.js 18.x
+ Puppeteer-core 19.7.0 版
+ Chromium 111.0.5563.146 版

**syn-nodejs-puppeteer-6.2 中的变化**：
+  **更新了 Chromium 中捆绑库的版本** 
+ **临时存储监控** — 此运行时系统会在客户账户中添加临时存储监控。
+  **错误修复** 

### syn-nodejs-puppeteer-6.1


**主要依赖项**：
+ Lambda 运行时系统 Node.js 18.x
+ Puppeteer-core 19.7.0 版
+ Chromium 111.0.5563.146 版

**syn-nodejs-puppeteer-6.1 中的更新**：
+ **稳定性提高**：新增自动重试逻辑，用于处理间歇性 Puppeteer 启动错误。
+ **依赖项升级**：升级部分第三方依赖项包。
+ **没有 Amazon S3 权限的 Canary**：通过错误修复使没有任何 Amazon S3 权限的 Canary 仍可运行。这些没有 Amazon S3 权限的 Canary 将无法将屏幕截图或其他构件上传到 Amazon S3。有关 Canary 权限的更多信息，请参阅 [金丝雀的必需角色和权限](CloudWatch_Synthetics_Canaries_CanaryPermissions.md)。

**重要**  
重要提示：在未来的运行时系统版本中，随附的适用于 JavaScript v2 的 AWS SDK 依赖项将被移除，并更新为使用适用于 JavaScript v3 的 AWS SDK。发生这种情况时，您可以更新金丝雀代码引用，也可以继续引用和使用随附的适用于 JavaScript v2 的 AWS SDK 依赖项，方法是将其作为依赖项添加到源代码 zip 文件中。

### syn-nodejs-puppeteer-6.0


**主要依赖项**：
+ Lambda 运行时系统 Node.js 18.x
+ Puppeteer-core 19.7.0 版
+ Chromium 111.0.5563.146 版

**syn-nodejs-puppeteer-6.0 中的更新**：
+ **依赖项升级** – Node.js 依赖项已升级到 18.x。
+ **拦截模式支持** – Synthetics 金丝雀运行时系统库中添加了 Puppeteer 合作拦截模式支持。
+ **跟踪行为更改** – 将默认跟踪行为更改为了仅跟踪 fetch 和 xhr 请求，而不跟踪资源请求。您可以通过配置 `traceResourceRequests` 选项来启用对资源请求的跟踪。
+ **持续时间指标已完善** – ` Duration` 指标现在不包括金丝雀用于上传构件、捕获屏幕截图和生成 CloudWatch 指标的操作时间。`Duration` 指标值会报告给 CloudWatch，您也可以在 Synthetics 控制台中进行查看。
+ **错误修复** – 清理 Chromium 在金丝雀运行期间崩溃时生成的核心转储。

**重要**  
重要提示：在未来的运行时系统版本中，随附的适用于 JavaScript v2 的 AWS SDK 依赖项将被移除，并更新为使用适用于 JavaScript v3 的 AWS SDK。发生这种情况时，您可以更新金丝雀代码引用，也可以继续引用和使用随附的适用于 JavaScript v2 的 AWS SDK 依赖项，方法是将其作为依赖项添加到源代码 zip 文件中。

### syn-nodejs-puppeteer-5.2


**主要依赖项**：
+ Lambda 运行时系统 Node.js 16.x
+ Puppeteer-core 19.7.0 版
+ Chromium 111.0.5563.146 版

**syn-nodejs-puppeteer-5.2 中的更新**：
+  **更新了 Chromium 中捆绑库的版本** 
+  **错误修复** 

### syn-nodejs-puppeteer-5.1


**主要依赖项**：
+ Lambda 运行时系统 Node.js 16.x
+ Puppeteer-core 19.7.0 版
+ Chromium 111.0.5563.146 版

**syn-nodejs-puppeteer-5.1 中的错误修复**：
+ **错误修复**：此运行时系统修复了 ` syn-nodejs-puppeteer-5.0` 中的一个错误，其中由金丝雀创建的 HAR 文件缺少请求标头。

### syn-nodejs-puppeteer-5.0


**主要依赖项**：
+ Lambda 运行时系统 Node.js 16.x
+ Puppeteer-core 19.7.0 版
+ Chromium 111.0.5563.146 版

**syn-nodejs-puppeteer-5.0 中的更新**：
+ **依赖关系升级** — Puppeteer-Core 版本已更新至 19.7.0。Chromium 版本已升级至 111.0.5563.146。

**重要**  
新的 Puppeteer-Core 版本并不完全向后兼容之前版本的 Puppeteer。此版本中的某些更改可能会导致使用已弃用的 Puppeteer 函数的现有金丝雀失败。有关更多信息，请参阅 [Puppeteer 变更日志](https://github.com/puppeteer/puppeteer/releases?q=breaking&expanded=true)中 Puppeteer-core 19.7.0 至 6.0 版变更日志中的重大更改。

### syn-nodejs-puppeteer-4.0


**主要依赖项**：
+ Lambda 运行时系统 Node.js 16.x
+ Puppeteer-core 5.5.0 版
+ Chromium 92.0.4512 版

**syn-nodejs-puppeteer-4.0 中的更新**：
+ **依赖项升级** – Node.js 依赖项已更新到 16.x。

### syn-nodejs-puppeteer-3.9


**重要**  
此运行时系统版本已于 2024 年 1 月 8 日弃用。有关更多信息，请参阅 [运行时版本支持策略](CloudWatch_Synthetics_Runtime_Support_Policy.md)。

**主要依赖项**：
+ Lambda 运行时 Node.js 14.x
+ Puppeteer-core 5.5.0 版
+ Chromium 92.0.4512 版

**syn-nodejs-puppeteer-3.9 中的更新**：
+ **依赖项升级** – 升级一些第三方依赖项包。

### syn-nodejs-puppeteer-3.8


**重要**  
此运行时系统版本已于 2024 年 1 月 8 日弃用。有关更多信息，请参阅 [运行时版本支持策略](CloudWatch_Synthetics_Runtime_Support_Policy.md)。

**主要依赖项**：
+ Lambda 运行时 Node.js 14.x
+ Puppeteer-core 5.5.0 版
+ Chromium 92.0.4512 版

**syn-nodejs-puppeteer-3.8 中的更新**：
+ **配置文件清理** – 现在，每次金丝雀脚本运行后，都会清理 Chromium 配置文件。

**syn-nodejs-puppeteer-3.8 中的错误修复**：
+ **错误修复** – 以前，在没有屏幕截图的情况下运行后，可视化监控金丝雀脚本有时会停止正常工作。此问题现已修复。

### syn-nodejs-puppeteer-3.7


**重要**  
此运行时系统版本已于 2024 年 1 月 8 日弃用。有关更多信息，请参阅 [运行时版本支持策略](CloudWatch_Synthetics_Runtime_Support_Policy.md)。

**主要依赖项**：
+ Lambda 运行时 Node.js 14.x
+ Puppeteer-core 5.5.0 版
+ Chromium 92.0.4512 版

**syn-nodejs-puppeteer-3.7 中的更新**：
+ **日志记录增强功能** — 即使 Amazon S3 超时或崩溃，金丝雀也会将日志上传到 Amazon S3。
+ **Lambda 层大小已减小** — 用于金丝雀的 Lambda 层的大小减小了 34%。

**syn-nodejs-puppeteer-3.7 中的错误修复**：
+ **错误修复** — 日语、简体中文和繁体中文字体将正确呈现。

### syn-nodejs-puppeteer-3.6


**重要**  
此运行时系统版本已于 2024 年 1 月 8 日弃用。有关更多信息，请参阅 [运行时版本支持策略](CloudWatch_Synthetics_Runtime_Support_Policy.md)。

**主要依赖项**：
+ Lambda 运行时 Node.js 14.x
+ Puppeteer-core 5.5.0 版
+ Chromium 92.0.4512 版

**syn-nodejs-puppeteer-3.6 中的更新**：
+ **更精确的时间戳** — 金丝雀运行的开始时间和停止时间现在精确到毫秒。

### syn-nodejs-puppeteer-3.5


**重要**  
此运行时系统版本已于 2024 年 1 月 8 日弃用。有关更多信息，请参阅 [运行时版本支持策略](CloudWatch_Synthetics_Runtime_Support_Policy.md)。

**主要依赖项**：
+ Lambda 运行时 Node.js 14.x
+ Puppeteer-core 5.5.0 版
+ Chromium 92.0.4512 版

**syn-nodejs-puppeteer-3.5 中的更新**：
+ **更新的项目依赖项**— 此运行时中唯一的新功能是更新的项目依赖项。

### syn-nodejs-puppeteer-3.4


**重要**  
此运行时版本于 2022 年 11 月 13 日弃用。有关更多信息，请参阅 [运行时版本支持策略](CloudWatch_Synthetics_Runtime_Support_Policy.md)。

**主要依赖项**：
+ Lambda 运行时 Node.js 12.x
+ Puppeteer-core 5.5.0 版
+ Chromium 88.0.4298.0 版

**syn-nodejs-puppeteer-3.4 中的更新**：
+ **自定义处理程序函数**— 您现在可以对金丝雀脚本使用自定义处理程序函数。之前的运行时要求脚本入口点包括 `.handler`。

  您还可以将金丝雀脚本放在任何文件夹中，并将文件夹名称作为处理程序的一部分进行传递。例如，`MyFolder/MyScriptFile.functionname` 可以用作入口点。
+ **扩展的 HAR 文件信息**— 您现在可以在金丝雀生成的 HAR 文件中看到恶意、待处理和未完成的请求。

### syn-nodejs-puppeteer-3.3


**重要**  
此运行时版本于 2022 年 11 月 13 日弃用。有关更多信息，请参阅 [运行时版本支持策略](CloudWatch_Synthetics_Runtime_Support_Policy.md)。

**主要依赖项**：
+ Lambda 运行时 Node.js 12.x
+ Puppeteer-core 5.5.0 版
+ Chromium 88.0.4298.0 版

**syn-nodejs-puppeteer-3.3 中的更新**：
+ **用于构件加密的更多选项** – 对于使用此运行时或更高版本运行时（而不是使用 AWS 托管式密钥）来加密金丝雀存储在 Amazon S3 中的构件的金丝雀，您可以选择使用 AWS KMS 客户托管式密钥或 Amazon S3 托管式密钥。有关更多信息，请参阅 [加密金丝雀构件](CloudWatch_Synthetics_artifact_encryption.md)。

### syn-nodejs-puppeteer-3.2


**重要**  
此运行时版本于 2022 年 11 月 13 日弃用。有关更多信息，请参阅 [运行时版本支持策略](CloudWatch_Synthetics_Runtime_Support_Policy.md)。

**主要依赖项**：
+ Lambda 运行时 Node.js 12.x
+ Puppeteer-core 5.5.0 版
+ Chromium 88.0.4298.0 版

**syn-nodejs-puppeteer-3.2 中的更新**：
+ **使用屏幕截图进行可视化监控** – 使用此运行时或更高版本运行时的金丝雀可以将运行期间捕获的屏幕截图与相同屏幕截图的基准版本进行比较。如果屏幕截图与指定百分比阈值之间的差异较大，则金丝雀将失败。有关更多信息，请参阅 [可视化监控](CloudWatch_Synthetics_Canaries_Library_Nodejs.md#CloudWatch_Synthetics_Library_SyntheticsLogger_VisualTesting) 或 [可视监控蓝图](CloudWatch_Synthetics_Canaries_Blueprints.md#CloudWatch_Synthetics_Canaries_Blueprints_VisualTesting)。
+ **与敏感数据相关的新函数**：您可以阻止敏感数据出现在金丝雀日志和报告中。有关更多信息，请参阅 [SyntheticsLogHelper 类](CloudWatch_Synthetics_Canaries_Library_Nodejs.md#CloudWatch_Synthetics_Library_SyntheticsLogHelper)。
+ **已弃用的函数**：` RequestResponseLogHelper` 类已弃用，以支持其他新配置选项。有关更多信息，请参阅 [RequestResponseLogHelper 类](CloudWatch_Synthetics_Canaries_Library_Nodejs.md#CloudWatch_Synthetics_Library_RequestResponseLogHelper)。

### syn-nodejs-puppeteer-3.1


**重要**  
此运行时版本于 2022 年 11 月 13 日弃用。有关更多信息，请参阅 [运行时版本支持策略](CloudWatch_Synthetics_Runtime_Support_Policy.md)。

**主要依赖项**：
+ Lambda 运行时 Node.js 12.x
+ Puppeteer-core 5.5.0 版
+ Chromium 88.0.4298.0 版

**syn-nodejs-puppeteer-3.1 中的更新**：
+ **CloudWatch 指标配置功能** – 使用此运行时，您可以禁用不需要的指标。否则，金丝雀会发布每次金丝雀运行的各种 CloudWatch 指标。
+ **屏幕截图链接** – 您可以在金丝雀步骤完成后将屏幕截图链接到该步骤。为此，您可以使用 **takeScreenshot** 方法捕获屏幕截图，并使用要与屏幕截图关联的步骤的名称。例如，您可能想要执行某个步骤，添加等待时间，然后捕获屏幕截图。
+ **检测信号监控器蓝图可以监控多个 URL** – 您可以使用 CloudWatch 控制台中的检测信号监控蓝图来监控多个 URL，并在金丝雀运行报告的步骤摘要中查看每个 URL 的状态、持续时间、关联的屏幕截图和故障原因。

### syn-nodejs-puppeteer-3.0


**重要**  
此运行时版本于 2022 年 11 月 13 日弃用。有关更多信息，请参阅 [运行时版本支持策略](CloudWatch_Synthetics_Runtime_Support_Policy.md)。

**主要依赖项**：
+ Lambda 运行时 Node.js 12.x
+ Puppeteer-core 5.5.0 版
+ Chromium 88.0.4298.0 版

**syn-nodejs-puppeteer-3.0 中的更新**：
+ **升级的依赖项** – 此版本使用 Puppeteer 5.5.0 版、Node.js 12.x 和 Chromium 88.0.4298.0。
+ **跨区域存储桶访问** – 您现在可以指定另一个区域中的 S3 存储桶作为金丝雀存储其日志文件、屏幕截图和 HAR 文件的存储桶。
+ **可用的新函数** – 此版本添加了库函数来检索金丝雀名称和 Synthetics 运行时版本。

  有关更多信息，请参阅 [Synthetics 类](CloudWatch_Synthetics_Canaries_Library_Nodejs.md#CloudWatch_Synthetics_Library_Synthetics_Class_all)。

### syn-nodejs-2.2


本节包含有关 `syn-nodejs-2.2` 运行时版本的信息。

**重要**  
此运行时版本已于 2021 年 5 月 28 日弃用。有关更多信息，请参阅 [运行时版本支持策略](CloudWatch_Synthetics_Runtime_Support_Policy.md)。

**主要依赖项**：
+ Lambda 运行时 Node.js 10.x
+ Puppeteer-core 3.3.0 版
+ Chromium 83.0.4103.0 版

**syn-nodejs-2.2 中的变化**：
+ **作为 HTTP 步骤监控您的金丝雀** – 您现在可以在一个金丝雀中测试多个 API。每个 API 都作为单独的 HTTP 步骤进行测试，CloudWatch Synthetics 会使用步骤指标和 CloudWatch Synthetics 步骤报告监控每个步骤的状态。CloudWatch Synthetics 会为每个 HTTP 步骤创建 ` SuccessPercent` 和 `Duration` 指标。

  此功能由 **executeHttpStep(stepName, requestOptions, callback, stepConfig)** 函数实现。有关更多信息，请参阅 [executeHttpStep(stepName, requestOptions, [callback], [stepConfig])](CloudWatch_Synthetics_Canaries_Library_Nodejs.md#CloudWatch_Synthetics_Library_executeHttpStep)。

  API 金丝雀蓝图已更新为使用此新功能。
+ **HTTP 请求报告** – 您现在可以查看详细的 HTTP 请求报告，这些报告捕获的是请求/响应标头、响应正文、状态代码、错误和性能计时、TCP 连接时间、TLS 握手时间、第一字节时间和内容传输时间等详细信息。所有使用后台 HTTP/HTTPS 模块的 HTTP 请求都在此处捕获。预设情况下不会捕获标头和响应正文，但可以通过设置配置选项来启用捕获标头和响应正文。
+ **全局和步骤级配置** – 您可以在全局级别设置 CloudWatch Synthetics 配置，这些配置应用于金丝雀的所有步骤。您还可以通过传递配置键/值对来启用或禁用某些选项，在步骤级别覆盖这些配置。

  有关更多信息，请参阅 [SyntheticsConfiguration 类](CloudWatch_Synthetics_Canaries_Library_Nodejs.md#CloudWatch_Synthetics_Library_SyntheticsConfiguration)。
+ **继续执行步骤故障配置** – 您可以选择在步骤故障时继续执行金丝雀。对于 ` executeHttpStep` 函数，预设情况下，此选项处于启用状态。您可以在全局级别设置此选项一次，或者针对每个步骤做出不同的设置。

### syn-nodejs-2.1


**重要**  
此运行时版本已于 2021 年 5 月 28 日弃用。有关更多信息，请参阅 [运行时版本支持策略](CloudWatch_Synthetics_Runtime_Support_Policy.md)。

**主要依赖项**：
+ Lambda 运行时 Node.js 10.x
+ Puppeteer-core 3.3.0 版
+ Chromium 83.0.4103.0 版

**syn-nodejs-2.1 中的更新**：
+ **可配置的屏幕截图行为** – 提供关闭 UI 金丝雀捕获屏幕截图的功能。在使用以前版本运行时的金丝雀中，UI 金丝雀始终在每个步骤前后捕获屏幕截图。在 `syn-nodejs-2.1` 中，可配置此行为。关闭屏幕截图可以降低您的 Amazon S3 存储成本，并有助于您遵守 HIPAA 法规。有关更多信息，请参阅 [SyntheticsConfiguration 类](CloudWatch_Synthetics_Canaries_Library_Nodejs.md#CloudWatch_Synthetics_Library_SyntheticsConfiguration)。
+ **自定义 Google Chrome 启动参数**：现在，您可以配置当金丝雀启动 Google Chrome 浏览器窗口时使用的参数。有关更多信息，请参阅 [launch(options)](CloudWatch_Synthetics_Canaries_Library_Nodejs.md#CloudWatch_Synthetics_Library_LaunchOptions)。

与更早版本的金丝雀运行时相比，使用 syn-nodejs-2.0 或更高版本时，金丝雀持续时间可能会略有增加。

### syn-nodejs-2.0


**重要**  
此运行时版本已于 2021 年 5 月 28 日弃用。有关更多信息，请参阅 [运行时版本支持策略](CloudWatch_Synthetics_Runtime_Support_Policy.md)。

**主要依赖项**：
+ Lambda 运行时 Node.js 10.x
+ Puppeteer-core 3.3.0 版
+ Chromium 83.0.4103.0 版

**syn-nodejs-2.0 中的更新**：
+ **升级的依赖项** – 此运行时版本使用 Puppeteer-core 3.3.0 版和 Chromium 83.0.4103.0 版
+ **支持 X-Ray 活动跟踪。**金丝雀启用跟踪后，将针对由使用浏览器、AWS SDK 或 HTTP 或 HTTPS 模块的金丝雀发出的所有调用发送 X-Ray 跟踪。启用了跟踪的 Canary 会显示在 X-Ray 跟踪地图中，即使它们没有向启用了跟踪的其他服务或应用程序发送请求。有关更多信息，请参阅 [金丝雀和 X-Ray 跟踪](CloudWatch_Synthetics_Canaries_tracing.md)。
+ **Synthetics 报告** – CloudWatch Synthetics 会针对每次金丝雀运行创建一个名为 ` SyntheticsReport-PASSED.json` 或 ` SyntheticsReport-FAILED.json` 的报告，其中记录了开始时间、结束时间、状态和故障等数据。报告中还记录金丝雀脚本的每个步骤的 PASSED/FAILED 状态，以及每个步骤捕获的失败和屏幕截图。
+ **无效链接检查器报告** – 此运行时中包含的新版本无效链接检查器会创建一个报告，其中包括已检查的链接、状态代码、故障原因（如有）以及源页面和目标页面屏幕截图。
+ **新 CloudWatch 指标** – Synthetics 在 `CloudWatchSynthetics` 命名空间中发布名为 `2xx`、`4xx`、`5xx` 和 `RequestFailed` 的指标。这些指标会显示金丝雀运行中 200 秒、400 秒、500 秒和请求故障的数量。在此运行时版本中，这些指标仅针对 UI 金丝雀报告，而不针对 API 金丝雀报告。从 ` syn-nodejs-puppeteeer-2.2` 运行时版本开始，也针对 API 金丝雀报告这些指标。
+ **可排序的 HAR 文件** – 您现在可以按状态代码、请求大小和持续时间对 HAR 文件进行排序。
+ **指标时间戳** – 现在基于 Lambda 调用时间而非金丝雀运行结束时间报告 CloudWatch 指标。

**syn-nodejs-2.0 中的错误修复**：
+ 修复了不报告金丝雀构件上载错误的问题。此类错误现在显示为执行错误。
+ 修复了将重定向请求 (3xx) 误记为错误的问题。
+ 修复了从 0 开始编号屏幕截图的问题。现在应从 1 开始编号。
+ 修复了中文和日文字体屏幕截图乱码的问题。

与更早版本的金丝雀运行时相比，使用 syn-nodejs-2.0 或更高版本时，金丝雀持续时间可能会略有增加。

### syn-nodejs-2.0-beta


**重要**  
此运行时版本已于 2021 年 2 月 8 日弃用。有关更多信息，请参阅 [运行时版本支持策略](CloudWatch_Synthetics_Runtime_Support_Policy.md)。

**主要依赖项**：
+ Lambda 运行时 Node.js 10.x
+ Puppeteer-core 3.3.0 版
+ Chromium 83.0.4103.0 版

**syn-nodejs-2.0-beta 中的变化**：
+ **升级的依赖项** – 此运行时版本使用 Puppeteer-core 3.3.0 版和 Chromium 83.0.4103.0 版
+ **Synthetics 报告** – CloudWatch Synthetics 会针对每次金丝雀运行创建一个名为 ` SyntheticsReport-PASSED.json` 或 ` SyntheticsReport-FAILED.json` 的报告，其中记录了开始时间、结束时间、状态和故障等数据。报告中还记录金丝雀脚本的每个步骤的 PASSED/FAILED 状态，以及每个步骤捕获的失败和屏幕截图。
+ **无效链接检查器报告** – 此运行时中包含的新版本无效链接检查器会创建一个报告，其中包括已检查的链接、状态代码、故障原因（如有）以及源页面和目标页面屏幕截图。
+ **新 CloudWatch 指标** – Synthetics 在 `CloudWatchSynthetics` 命名空间中发布名为 `2xx`、`4xx`、`5xx` 和 `RequestFailed` 的指标。这些指标会显示金丝雀运行中 200 秒、400 秒、500 秒和请求故障的数量。仅针对 UI 金丝雀报告而不针对 API 金丝雀报告这些指标。
+ **可排序的 HAR 文件** – 您现在可以按状态代码、请求大小和持续时间对 HAR 文件进行排序。
+ **指标时间戳** – 现在基于 Lambda 调用时间而非金丝雀运行结束时间报告 CloudWatch 指标。

**syn-nodejs-2.0-beta 中的错误修复**：
+ 修复了不报告金丝雀构件上载错误的问题。此类错误现在显示为执行错误。
+ 修复了将重定向请求 (3xx) 误记为错误的问题。
+ 修复了从 0 开始编号屏幕截图的问题。现在应从 1 开始编号。
+ 修复了中文和日文字体屏幕截图乱码的问题。

### syn-1.0


第一个 Synthetics 运行时版本是 `syn-1.0`。

**主要依赖项**：
+ Lambda 运行时 Node.js 10.x
+ Puppeteer-core 1.14.0 版
+ 与 Puppeteer-core 1.14.0 匹配的 Chromium 版本

# 使用 Python 和 Selenium Webdriver 的运行时版本


以下各节包含有关用于 Python 和 Selenium Webdriver 的 CloudWatch Synthetics 运行时版本的信息。Selenium 是一种开源浏览器自动化工具。有关 Selenium 的更多信息，请参阅 [www.selenium.dev/](https://www.selenium.dev)

关于 Synthetics 运行时在 Selenium 框架中支持的功能和方法，请参阅[仅适用于 UI Canary 的 Python 和 Selenium 库类和函数](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries_Library_Python.html#CloudWatch_Synthetics_Library_Python_UIcanaries)以及 [Selenium API 参考](https://www.selenium.dev/selenium/docs/api/py/api.html)。

这些运行时版本的命名约定为 `syn-language -framework-majorversion. minorversion`。

## syn-python-selenium-10.0


版本 10.0 是适用于 Python 和 Selenium 的最新 CloudWatch Synthetics 运行时。

**主要依赖项**：
+ Python 3.11
+ Selenium 4.32.0
+ Chromium 145.0.7632.77 版

**syn-python-selenium-10.0 中的更改** 
+ 应用了安全补丁，并更新了浏览器版本。

有关更多信息，请参阅下列内容：
+  [Selenium 更改日志](https://www.selenium.dev/blog/2025/selenium-4-32-released) 
+  [Selenium 文档](https://www.selenium.dev/selenium/docs/api/py/api.html) 

## 先前的 Python 和 Selenium 运行时版本


下列 Python 和 Selenium 的早期运行时版本仍受支持。

### syn-python-selenium-9.0


**主要依赖项**：
+ Python 3.11
+ Selenium 4.32.0
+ Chromium 143.0.7499.169 版

**syn-python-selenium-9.0 中的更改** 
+ 应用了安全补丁，并更新了浏览器版本。

有关更多信息，请参阅下列内容：
+  [Selenium 更改日志](https://www.selenium.dev/blog/2025/selenium-4-32-released) 
+  [Selenium 文档](https://www.selenium.dev/selenium/docs/api/py/api.html) 

### syn-python-selenium-8.0


版本 8.0 是适用于 Python 和 Selenium 的最新 CloudWatch Synthetics 运行时。

**主要依赖项**：
+ Python 3.11
+ Selenium 4.32.0
+ Chromium 142.0.7444.175 版

**syn-python-selenium-8.0 中的更改** 
+ 应用了安全补丁，并更新了 Selenium 和浏览器版本。
+ 修改了失败的 HAR 网络请求日志级别，从 ERROR 改为 INFO。

有关更多信息，请参阅下列内容：
+  [Selenium 更改日志](https://www.selenium.dev/blog/2025/selenium-4-32-released) 
+  [Selenium 文档](https://www.selenium.dev/selenium/docs/api/py/api.html) 

### syn-python-selenium-7.0


**主要依赖项**：
+ Python 3.11
+ Selenium 4.32.0
+ Chromium 版本 138.0.7204.168

 **syn-python-selenium-7.0 中的更改** 
+ 应用了安全补丁，并更新了 Selenium 和浏览器版本。

有关更多信息，请参阅下列内容：
+  [Selenium 更改日志](https://www.selenium.dev/blog/2025/selenium-4-32-released) 
+  [Selenium 文档](https://www.selenium.dev/selenium/docs/api/py/api.html) 

### syn-python-selenium-6.0


**主要依赖项**：
+ Python 3.11
+ Selenium 4.21.0
+ Chromium 版本 131.0.6778.264

 **syn-python-selenium-6.0 中的变化**：
+ 从 Python 3.9 升级到 Python 3.11。

有关更多信息，请参阅下列内容：
+  [Selenium 更改日志](https://www.selenium.dev/blog/2024/selenium-4-21-released/) 
+  [Selenium 文档](https://www.selenium.dev/selenium/docs/api/py/api.html) 

### syn-python-selenium-5.1


**主要依赖项**：
+ Python 3.9
+ Selenium 4.21.0
+ Chromium 版本 131.0.6778.264

 **syn-python-selenium-5.1 中的变化**：
+ 对指标上报功能进行了细微更新。
+ 支持对金丝雀进行试运行，允许临时执行或执行安全的金丝雀更新。

### syn-python-selenium-5.0


**主要依赖项**：
+ Python 3.9
+ Selenium 4.21.0
+ Chromium 版本 131.0.6778.264

**syn-python-selenium-5.0 中的变化**：
+ 如果浏览器无法启动，则会自动重试。

### syn-python-selenium-4.1


**主要依赖项**：
+ Python 3.9
+ Selenium 4.15.1
+ Chromium 版本 126.0.6478.126

**syn-python-selenium-4.1 中的变化**：
+ **修复安全漏洞**：此运行时包含用于解决 [CVE-2024-39689](https://nvd.nist.gov/vuln/detail/CVE-2024-39689) 漏洞的更新。

### syn-python-selenium-4.0


**主要依赖项**：
+ Python 3.9
+ Selenium 4.15.1
+ Chromium 版本 126.0.6478.126

**syn-python-selenium-4.0 中的变化**：
+ **修复了** HAR 解析器日志记录中的错误。

## 已弃用的 Python 和 Selenium 运行时版本


下列 Python 和 Selenium 的早期运行时版本已弃用。有关运行时弃用日期的信息，请参阅 [CloudWatch Synthetics 运行时弃用日期](CloudWatch_Synthetics_Runtime_Support_Policy.md#runtime_deprecation_dates)。

### syn-python-selenium-3.0


**主要依赖项**：
+ Python 3.8
+ Selenium 4.15.1
+ Chromium 121.0.6167.139 版

**syn-python-selenium-3.0 中的变化**：
+ **更新了 Chromium 中捆绑库的版本**：Chromium 依赖项已更新到新版本。

### syn-python-selenium-2.1


**主要依赖项**：
+ Python 3.8
+ Selenium 4.15.1
+ Chromium 111.0.5563.146 版

**syn-python-selenium-2.1 中的变化**：
+ **更新了 Chromium 中捆绑库的版本**：Chromium 和 Selenium 依赖项已更新到新版本。

### syn-python-selenium-2.0


**主要依赖项**：
+ Python 3.8
+ Selenium 4.10.0
+ Chromium 111.0.5563.146 版

**syn-python-selenium-2.0 中的变化**：
+ **更新了依赖项** — Chromium 和 Selenium 依赖项已更新到新版本。

**syn-python-selenium-2.0 中的错误修复**：
+ **添加了时间戳** — 已将时间戳添加到金丝雀日志。
+ **会话重用** — 修复了一个错误，因此金丝雀现在无法重用以前金丝雀运行的会话。

### syn-python-selenium-1.3


**主要依赖项**：
+ Python 3.8
+ Selenium 3.141.0
+ Chromium 92.0.4512.0 版

**syn-python-selenium-1.3 中的变化**：
+ **更精确的时间戳** — 金丝雀运行的开始时间和停止时间现在精确到毫秒。

### syn-python-selenium-1.2


**主要依赖项**：
+ Python 3.8
+ Selenium 3.141.0
+ Chromium 92.0.4512.0 版
+ **更新的项目依赖项**— 此运行时中唯一的新功能是更新的项目依赖项。

### syn-python-selenium-1.1


**主要依赖项**：
+ Python 3.8
+ Selenium 3.141.0
+ Chromium 83.0.4103.0 版

**功能：**
+ **自定义处理程序函数**— 您现在可以对金丝雀脚本使用自定义处理程序函数。之前的运行时要求脚本入口点包括 `.handler`。

  您还可以将金丝雀脚本放在任何文件夹中，并将文件夹名称作为处理程序的一部分进行传递。例如，`MyFolder/MyScriptFile.functionname` 可以用作入口点。
+ **用于添加指标和步骤失败配置的配置选项**— 这些选项已在适用于 Node.js 金丝雀的运行时中提供。有关更多信息，请参阅 [SyntheticsConfiguration 类](CloudWatch_Synthetics_Canaries_Library_Python.md#CloudWatch_Synthetics_Library_SyntheticsConfiguration_Python)。
+ **Chrome 中的自定义参数**— 您现在可以用无痕模式打开浏览器或用代理服务器配置进行传递。有关更多信息，请参阅 [Chrome()](CloudWatch_Synthetics_Canaries_Library_Python.md#CloudWatch_Synthetics_Library_Python_Chrome)。
+ **跨区域构件存储桶**— 金丝雀可以将其构件存储在不同区域的 Simple Storage Service (Amazon S3) 存储桶中。
+ **错误修复，包括修复 `index.py` 问题**— 对于之前的运行时，名为 ` index.py` 的金丝雀文件导致异常，因为其与库文件的名称冲突。此问题现已修复。

### syn-python-selenium-1.0


**主要依赖项**：
+ Python 3.8
+ Selenium 3.141.0
+ Chromium 83.0.4103.0 版

**功能：**
+ **Selenium 支持** – 您可以使用 Selenium 测试框架编写金丝雀脚本。您可以将其他地方的 Selenium 脚本添加到 CloudWatch Synthetics 中，只需做出最少的更改，它们即可用于 AWS 服务。

# 使用 Node.js 的运行时版本


以下部分包含有关 CloudWatch Synthetics Node.js 运行时版本的信息。该运行时不包含任何浏览器或框架。

这些运行时版本的命名约定为 `syn-language -majorversion.minorversion`。

## syn-nodejs-4.1


**重要**  
Synthetics `syn-nodejs-3.1` 及更高版本中，Synthetics 运行时将使用新的命名空间。请迁移金丝雀脚本以使用新的命名空间。在未来的版本中，旧命名空间将被弃用。  
@amzn/synthetics-core → @aws/synthetics-core

**主要依赖项**：
+ AWS Lambda 运行时 Node.js 22.x

 **syn-nodejs-4.1 中的变化** 
+ 升级到 `fast-xml-parser` 5.5.7 以解决下列 CVE 问题：
  + CVE-2026-25128
  + CVE-2026-25896
  + CVE-2026-26278
  + CVE-2026-27942
  + CVE-2026-33036

## 先前的 Node.js 运行时版本


下列 Node.js 的早期运行时版本仍受支持。

### syn-nodejs-4.0


**主要依赖项**：
+ AWS Lambda 运行时 Node.js 22.x

 **syn-nodejs-4.0 中的变化** 
+ 应用了安全补丁。

### syn-nodejs-3.1


**重要**  
Synthetics `syn-nodejs-3.1` 及更高版本中，Synthetics 运行时将使用新的命名空间。请迁移金丝雀脚本以使用新的命名空间。在未来的版本中，旧命名空间将被弃用。  
@amzn/synthetics-core → @aws/synthetics-core

**主要依赖项**：
+ AWS Lambda 运行时 Node.js 20.x

 **syn-nodejs-3.1 中的变化** 
+ Synthetics 运行时命名空间迁移。
+ 类型定义在 [npm 注册表](https://www.npmjs.com/package/@aws/synthetics-core)中可用。请确保类型定义包的版本与您的金丝雀的运行时版本相匹配。

### syn-nodejs-3.0


**主要依赖项**：
+ AWS Lambda 运行时 Node.js 20.x

 **syn-nodejs-3.0 中的变化** 
+ 对多重检查蓝图的支持。

# 运行时版本支持策略


Synthetics 运行时版本受维护和安全更新的约束。如果不再支持运行时版本的任何组件，则该 Synthetics 运行时版本将被弃用。

您无法使用已弃用的运行时版本创建金丝雀。使用已弃用运行时的金丝雀将继续运行。您可以停止、启动和删除这些金丝雀。您可以通过将金丝雀更新为使用受支持的运行时版本，来更新使用已弃用运行时版本的现有金丝雀。

如果您有使用计划将在未来 60 天内弃用的运行时的金丝雀，则 CloudWatch Synthetics 会通过电子邮件通知您。我们建议您将金丝雀迁移到受支持的运行时版本，以享受最新版本中包含的新功能、安全性和性能增强的益处。

## CloudWatch Synthetics 运行时弃用日期


下表中列出了每个已弃用的 CloudWatch Synthetics 运行时的弃用日期。


| 运行时版本 | 弃用日期 | 
| --- | --- | 
|   `syn-python-selenium-5.1`   |  2026 年 2 月 3 日  | 
|   `syn-python-selenium-5.0`   |  2026 年 2 月 3 日  | 
|   `syn-python-selenium-4.1`   |  2026 年 2 月 3 日  | 
|   `syn-python-selenium-4.0`   |  2026 年 2 月 3 日  | 
|   `syn-nodejs-puppeteer-7.0`   |  2026 年 1 月 22 日  | 
|   `syn-nodejs-puppeteer-6.2`   |  2026 年 1 月 22 日  | 
|   `syn-nodejs-puppeteer-5.2`   |  2026 年 1 月 22 日  | 
|   `syn-python-selenium-3.0`   |  2026 年 1 月 22 日  | 
|   `syn-python-selenium-2.1`   |  2026 年 1 月 22 日  | 
|   `syn-nodejs-puppeteer-6.1`   |  2024 年 3 月 8 日  | 
|   `syn-nodejs-puppeteer-6.0`   |  2024 年 3 月 8 日  | 
|   `syn-nodejs-puppeteer-5.1`   |  2024 年 3 月 8 日  | 
|   `syn-nodejs-puppeteer-5.0`   |  2024 年 3 月 8 日  | 
|   `syn-nodejs-puppeteer-4.0`   |  2024 年 3 月 8 日  | 
|   `syn-nodejs-puppeteer-3.9`   |  2024 年 1 月 8 日  | 
|   `syn-nodejs-puppeteer-3.8`   |  2024 年 1 月 8 日  | 
|   `syn-python-selenium-2.0`   |  2024 年 3 月 8 日  | 
|   `syn-python-selenium-1.3`   |  2024 年 3 月 8 日  | 
|   `syn-python-selenium-1.2`   |  2024 年 3 月 8 日  | 
|   `syn-python-selenium-1.1`   |  2024 年 3 月 8 日  | 
|   `syn-python-selenium-1.0`   |  2024 年 3 月 8 日  | 
|   `syn-nodejs-puppeteer-3.7`   |  2024 年 1 月 8 日  | 
|   `syn-nodejs-puppeteer-3.6`   |  2024 年 1 月 8 日  | 
|   `syn-nodejs-puppeteer-3.5`   |  2024 年 1 月 8 日  | 
|   `syn-nodejs-puppeteer-3.4`   |  2022 年 11 月 13 日  | 
|   `syn-nodejs-puppeteer-3.3`   |  2022 年 11 月 13 日  | 
|   `syn-nodejs-puppeteer-3.2`   |  2022 年 11 月 13 日  | 
|   `syn-nodejs-puppeteer-3.1`   |  2022 年 11 月 13 日  | 
|   `syn-nodejs-puppeteer-3.0`   |  2022 年 11 月 13 日  | 
|   `syn-nodejs-2.2`   |  2021 年 5 月 28 日  | 
|   `syn-nodejs-2.1`   |  2021 年 5 月 28 日  | 
|   `syn-nodejs-2.0`   |  2021 年 5 月 28 日  | 
|   `syn-nodejs-2.0-beta`   |  2021 年 2 月 8 日  | 
|   `syn-1.0`   |  2021 年 5 月 28 日  | 

# 运行时版本更新


您可以使用 CloudWatch 控制台、AWS CloudFormation、AWS CLI 或 AWS SDK 更新金丝雀的运行时版本。当使用 CloudWatch 控制台更新时，您可以一次最多更新五个金丝雀，方法是在金丝雀列表页面中选中它们，然后选择**操作**、**更新运行时**。

在提交运行时更新之前，您可以先测试更新来验证其有效性。更新运行时版本时，请在 CloudWatch 控制台中选择**开始试运行**或**验证并稍后保存**选项，对原始金丝雀及其配置变更进行试运行测试。试运行会更新并执行金丝雀，验证运行时更新对金丝雀是否安全。在使用新的运行时版本验证金丝雀能正常工作后，您便可以更新金丝雀的运行时版本。有关更多信息，请参阅 [执行安全金丝雀更新](performing-safe-canary-upgrades.md)。

您也可以先使用 CloudWatch 控制台克隆金丝雀，然后更新其运行时版本，以此验证更新是否安全。这会再创建一个金丝雀，其是原始金丝雀的克隆。在使用新的运行时版本验证了金丝雀后，您便可以更新原始金丝雀的运行时版本并删除克隆金丝雀。

 您还可以使用升级脚本更新多个金丝雀。有关更多信息，请参阅 [金丝雀运行时升级脚本](#CloudWatch_Synthetics_Canaries_upgrade_script)。

如果升级金丝雀失败，请参阅 [排查失败金丝雀的问题](CloudWatch_Synthetics_Canaries_Troubleshoot.md)。

## 金丝雀运行时升级脚本


若要将金丝雀脚本升级到支持的运行时版本，请使用以下脚本。

```
const AWS = require('aws-sdk');

// You need to configure your AWS credentials and Region.
//   https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/setting-credentials-node.html
//   https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/setting-region.html

const synthetics = new AWS.Synthetics();

const DEFAULT_OPTIONS = {
  /**
   * The number of canaries to upgrade during a single run of this script.
   */
  count: 10,
  /**
   * No canaries are upgraded unless force is specified.
   */
  force: false
};

/**
 * The number of milliseconds to sleep between GetCanary calls when
 * verifying that an update succeeded.
 */
const SLEEP_TIME = 5000;

(async () => {
  try {
    const options = getOptions();

    const versions = await getRuntimeVersions();
    const canaries = await getAllCanaries();
    const upgrades = canaries
      .filter(canary => !versions.isLatestVersion(canary.RuntimeVersion))
      .map(canary => {
        return {
          Name: canary.Name,
          FromVersion: canary.RuntimeVersion,
          ToVersion: versions.getLatestVersion(canary.RuntimeVersion)
        };
      });

    if (options.force) {
      const promises = [];

      for (const upgrade of upgrades.slice(0, options.count)) {
        const promise = upgradeCanary(upgrade);
        promises.push(promise);
        // Sleep for 100 milliseconds to avoid throttling.
        await usleep(100);
      }

      const succeeded = [];
      const failed = [];
      for (let i = 0; i < upgrades.slice(0, options.count).length; i++) {
        const upgrade = upgrades[i];
        const promise = promises[i];
        try {
          await promise;
          console.log(`The update of ${upgrade.Name} succeeded.`);
          succeeded.push(upgrade.Name);
        } catch (e) {
          console.log(`The update of ${upgrade.Name} failed with error: ${e}`);
          failed.push({
            Name: upgrade.Name,
            Reason: e
          });
        }
      }

      if (succeeded.length) {
        console.group('The following canaries were upgraded successfully.');
        for (const name of succeeded) {
          console.log(name);
        }
        console.groupEnd()
      } else {
        console.log('No canaries were upgraded successfully.');
      }

      if (failed.length) {
        console.group('The following canaries were not upgraded successfully.');
        for (const failure of failed) {
          console.log('\x1b[31m', `${failure.Name}: ${failure.Reason}`, '\x1b[0m');
        }
        console.groupEnd();
      }
    } else {
      console.log('Run with --force [--count <count>] to perform the first <count> upgrades shown. The default value of <count> is 10.')
      console.table(upgrades);
    }
  } catch (e) {
    console.error(e);
  }
})();

function getOptions() {
  const force = getFlag('--force', DEFAULT_OPTIONS.force);
  const count = getOption('--count', DEFAULT_OPTIONS.count);
  return { force, count };

  function getFlag(key, defaultValue) {
    return process.argv.includes(key) || defaultValue;
  }
  function getOption(key, defaultValue) {
    const index = process.argv.indexOf(key);
    if (index < 0) {
      return defaultValue;
    }
    const value = process.argv[index + 1];
    if (typeof value === 'undefined' || value.startsWith('-')) {
      throw `The ${key} option requires a value.`;
    }
    return value;
  }
}

function getAllCanaries() {
  return new Promise((resolve, reject) => {
    const canaries = [];

    synthetics.describeCanaries().eachPage((err, data) => {
      if (err) {
        reject(err);
      } else {
        if (data === null) {
          resolve(canaries);
        } else {
          canaries.push(...data.Canaries);
        }
      }
    });
  });
}

function getRuntimeVersions() {
  return new Promise((resolve, reject) => {
    const jsVersions = [];
    const pythonVersions = [];
    synthetics.describeRuntimeVersions().eachPage((err, data) => {
      if (err) {
        reject(err);
      } else {
        if (data === null) {
          jsVersions.sort((a, b) => a.ReleaseDate - b.ReleaseDate);
          pythonVersions.sort((a, b) => a.ReleaseDate - b.ReleaseDate);
          resolve({
            isLatestVersion(version) {
              const latest = this.getLatestVersion(version);
              return latest === version;
            },
            getLatestVersion(version) {
              if (jsVersions.some(v => v.VersionName === version)) {
                return jsVersions[jsVersions.length - 1].VersionName;
              } else if (pythonVersions.some(v => v.VersionName === version)) {
                return pythonVersions[pythonVersions.length - 1].VersionName;
              } else {
                throw Error(`Unknown version ${version}`);
              }
            }
          });
        } else {
          for (const version of data.RuntimeVersions) {
            if (version.VersionName === 'syn-1.0') {
              jsVersions.push(version);
            } else if (version.VersionName.startsWith('syn-nodejs-2.')) {
              jsVersions.push(version);
            } else if (version.VersionName.startsWith('syn-nodejs-puppeteer-')) {
              jsVersions.push(version);
            } else if (version.VersionName.startsWith('syn-python-selenium-')) {
              pythonVersions.push(version);
            } else {
              throw Error(`Unknown version ${version.VersionName}`);
            }
          }
        }
      }
    });
  });
}

async function upgradeCanary(upgrade) {
  console.log(`Upgrading canary ${upgrade.Name} from ${upgrade.FromVersion} to ${upgrade.ToVersion}`);
  await synthetics.updateCanary({ Name: upgrade.Name, RuntimeVersion: upgrade.ToVersion }).promise();
  while (true) {
    await usleep(SLEEP_TIME);
    console.log(`Getting the state of canary ${upgrade.Name}`);
    const response = await synthetics.getCanary({ Name: upgrade.Name }).promise();
    const state = response.Canary.Status.State;
    console.log(`The state of canary ${upgrade.Name} is ${state}`);
    if (state === 'ERROR' || response.Canary.Status.StateReason) {
      throw response.Canary.Status.StateReason;
    }
    if (state !== 'UPDATING') {
      return;
    }
  }
}

function usleep(ms) {
  return new Promise(resolve => setTimeout(resolve, ms));
}
```