重构提供程序特定的边界
要重构特定于提供程序的边界,请执行以下步骤:
- 将业务逻辑提取到提供商中立的模块中。仅为在比较测试期间重放捕获的源事件添加 AWS 事件解析器。
- 为目标调用模式创建 OCI 适配器:请求/响应、CloudEvent、队列消息、流记录、对象事件、通知或集成请求。
- 使用接口替换 AWS SDK 直接调用,并在这些接口后实施 OCI 服务调用。对配置、密钥访问、日志记录、度量和重试处理执行相同的操作。
- 重放捕获的 Lambda 事件并比较状态代码、标头、响应主体、对象元数据、下游写入、副作用、错误消息和幂等行为。
查找要与事件解析、SDK 调用、IAM 假设、日志记录、打包和重试处理分开的业务逻辑。
注意事项:避免与提供程序集成同时重写业务逻辑。改变两者会使等价测试变得更加困难。
了解 OCI 提供哪些功能
Oracle Cloud Infrastructure 提供功能执行、API 管理、事件、队列、调度、身份、网络、可观测性和部署等服务。但是,迁移可能仍需要进行特定于工作负载的更改,包括:
- 将 AWS 事件有效负载转换为应用程序预期的输入
- 使用 OCI SDK 调用替换 AWS SDK 调用
- 重新创建触发器、重试、排序和失败行为
- 转换 IAM 权限和网络访问
- 更新 CI/CD 管道和操作程序
在实施之前,请确定哪些步骤使用标准 OCI 配置,哪些步骤需要定制代码。在估计更广泛的迁移之前,使用代表性工作量验证该区别。
打包和部署 OCI 函数
要打包和部署函数,请执行以下步骤:
- 创建或更新函数项目和
func.yaml。设置来自测量源行为的内存和超时,而不是来自默认值。 - 根据需要将以前的 Lambda 层内容、本机依赖项、运行时依赖项、证书和系统软件包移动到映像或共享基本映像中。
- 跟踪容器映像内的映像大小、相关项版本、本机库兼容性、启动行为、初始化工作和运行时行为。
- 在连接生产触发器之前,先构建、推送、部署和调用具有代表性的成功和失败有效负载的功能。
验证映像是否可以构建、推送、部署、成功调用并记录预期输出,而不会泄漏机密。
注意事项:依赖包通常出现在隐藏的 Lambda 假设中,尤其是层、本机库、扩展和嵌入式 SDK 版本。
使用可重复的交付模式
要使用可重复的传送模式,请执行以下步骤:
- 将函数代码、配置、测试和基础结构定义存储在一起。
- 构建和测试版本化的函数构件。
- 扫描构件及其相关项。
- 跨环境提升经过测试的相同对象。
- 通过基础设施即代码预配或更新 OCI 资源。
- 部署后运行烟雾和集成测试。
- 保留以前的生产构件和配置以进行回退。
在可行的情况下使用现有的 CI/CD 平台。除非 OCI Functions 架构需要工具更改,否则无需更改工具。
迁移触发器和集成
要迁移触发器和集成,请执行以下步骤:
- 对于 HTTP 工作负载,请比较验证、方法、路径、标头、查询字符串、正文方案、状态代码、错误正文、有效负载大小、超时、延迟和调用方重试行为。
- 对于对象事件,比较事件方案、对象元数据、名称空间、存储桶和前缀筛选、创建/更新/删除行为、重试行为、重复事件、幂等性和防止输入和输出路径之间的循环。
- 对于队列和流,请为批处理大小、排序、部分故障、可见性或重试行为、DLQ 或故障目标、中毒消息、背压、重复、吞吐量和重放设计显式处理。
- 对于调度、通知、日志和集成流,验证调用类型、延迟、重试计数、故障路由、扇出行为、过滤和可观察性。
验证每个触发器是否具有已记录的 OCI 目标模式,以及是否通过正常、失败、重试和重复交付方案的测试。
注意:请勿假设 AWS 事件源映射具有直接 OCI 替代。保留所需行为,而不是 AWS 控制名称。
通用 Lambda 触发器模式
在实施之前验证所需行为:
| AWS 模式 | OCI 函数启动模式 | 要验证的项 |
|---|---|---|
| API 网关到 Lambda | OCI API Gateway 到 OCI Functions | 路由、方法、验证、请求和响应格式、有效负载限制、超时、状态代码以及同步错误行为 |
| EventBridge 到 Lambda | OCI Events 到 OCI Functions for OCI service events;使用适用的 OCI 事件路由服务满足更广泛的路由要求 | 事件覆盖率、筛选器、方案、交付行为、重试次数和重放要求 |
| SQS 到 Lambda | Oracle Cloud Infrastructure Queue 通过 OCI Connector Hub 连接到 OCI Functions | 批处理大小、可见性超时、最少一次交付、排序、重复处理、中毒消息和故障恢复 |
| S3 事件到 Lambda | OCI Object Storage 事件通过 OCI Events 到 OCI Functions | 事件方案、筛选器、重复传送、对象权限、重试行为和下游副作用 |
| Lambda 计划的事件 | OCI Resource Scheduler 到 OCI Functions | 计划表达式、时区、输入有效负载、超时、重叠执行以及成功或失败目标 |
不要假设 AWS 和 OCI 服务具有相同的行为。在实施之前验证每个工作量所需的行为。
保留触发器和失败行为
要保留触发和失败行为,请执行以下步骤:
对于分离的 OCI Functions 调用,成功和失败记录可以发送到 OCI Queue、 OCI Streaming 或 OCI Notifications 目标。此行为特定于分离的调用,不应被描述为每个 AWS 死信队列模式的通用替换。
配置 IAM、密钥和网络
要配置 OCI Identity and Access Management (IAM)、密钥和网络,请执行以下步骤:
- 将每个源操作映射到 OCI 操作、资源和区间。除非工作负载真正要求他们和审核者批准,否则应避免制定广泛的策略。
- 使用动态组和资源主用户对 OCI 资源的运行时访问。测试允许和拒绝的路径,包括错误的区间、错误的存储桶、错误的密钥和缺少的策略用例。
- 将密钥移至 OCI Vault 或批准的模式。确认源代码、映像、日志、环境转储、CI 输出、堆栈跟踪或错误消息中未显示任何密钥值。
- 验证路由规则、安全规则、服务网关或 NAT 行为、专用端点、DNS、TLS 信任、外部允许列表和下游连接限制。
验证允许的服务调用是否成功、被拒绝的路径是否安全失败,以及所需的网络路径是否可以访问,而不会暴露未经授权的路径。
注意:IAM 翻译应该从观察到的运行时行为开始,而不是从 AWS 策略名称或广泛的托管策略开始。
重新创建观测和操作
要重新创建观测和操作,请执行以下步骤:
- 发出具有相关性 ID、请求 ID、触发器 ID、对象或消息标识符、状态、持续时间、重试计数、已清理错误详细信息和下游相关性结果的日志。
- 确认调用计数、持续时间、错误率、超时计数、限制或容量症状、DLQ 或故障计数、队列使用期限或积压、分离的交付结果以及下游故障的度量和预警。
- 为运行状况、延迟、错误、容量、触发积压和依赖关系状态创建仪表盘或批准的视图。
- 使用调用测试、日志查询、预警响应、升级联系人、回退触发器、回退步骤和预期恢复时间更新运行手册。
验证生产操作员是否可以在流量移动之前观察迁移的功能并对其进行故障排除。
注意事项:仅当该函数起作用时,迁移就不能用于生产。操作员必须能够检测故障触发器、密钥、网络路径或下游依赖性并从中恢复。