使用 AWS SCT 扩展包 - AWS Schema Conversion Tool

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 AWS SCT 扩展包

AWS SCT 扩展包是一个附加模块,用于模拟源数据库中存在的函数,这些函数在将对象转换为目标数据库时是必需的。在安装 AWS SCT 扩展包之前,需要先转换数据库架构。

每个 AWS SCT 扩展包都包含以下组件:

  • 数据库架构:包括用于模拟某些联机事务处理 (OLTP) 和联机分析处理 (OLAP) 数据库对象(例如序列)的 SQL 函数、过程和表。此外,还可以在源数据库 built-in-functions 中进行不支持的模拟。此架构名称采用以下格式:aws_database_engine_name_ext

  • AWS Lambda 函数(适用于某些 OLTP 数据库)-包括模拟复杂数据库功能的 AWS Lambda 函数,例如作业调度和发送电子邮件。

  • OLAP 数据库的自定义库 — 包括一组 Java 和 Python 库,您可以使用这些库将微软 SQL Server 集成服务 (SSIS) 提取、转换和加载 (ETL) 脚本迁移到或。 AWS Glue AWS Glue Studio

    Java 库包括以下模块:

    • spark-excel_2.11-0.13.1.jar:模拟 Excel 源组件和目标组件的功能。

    • spark-xml_2.11-0.9.0.jarpoi-ooxml-schemas-4.1.2.jarxmlbeans-3.1.0.jar:模拟 XML 源组件的功能。

    Python 库包括以下模块。

    • sct_utils.py:模拟源数据类型并准备 Spark SQL 查询参数。

    • ssis_datetime.py:模拟日期和时间内置函数。

    • ssis_null.py:模拟 ISNULLREPLACENULL 内置函数。

    • ssis_string.py:模拟字符串内置函数。

    有关这些库的更多信息,请参阅为 AWS SCT 扩展包使用自定义库

您可以通过两种方式应用 AWS SCT 扩展包:

  • AWS SCT 在应用目标数据库脚本时,可以通过从上下文菜单中选择 “应用于数据库” 来自动应用扩展包。 AWS SCT 先应用扩展包,然后再应用所有其他架构对象。

  • 要手动应用扩展包,请选择目标数据库,然后从上下文菜单中选择应用扩展包。对于大多数情况,自动应用已足够。但是,如果意外删除了扩展包,则可能需要手动应用该包。

每次将 AWS SCT 扩展包应用于目标数据存储时,组件都会被覆盖,并 AWS SCT 显示有关此的通知。要关闭这些通知,请选择设置全局设置通知,然后选择隐藏扩展包更换提醒

要从 Microsoft SQL Server 转换到 PostgreSQL,您可以使用 AWS SCT中的 SQL Server 到 PostgreSQL 扩展包。此扩展包模拟 SQL Server 代理和 SQL Server 数据库邮件。有关更多信息,请参阅 使用扩展包在 PostgreSQL 中模拟 SQL Server Agent使用扩展包在 PostgreSQL 中模拟 SQL Server 数据库邮件

接下来,您可以找到有关使用 AWS SCT 扩展包的更多信息。

使用 AWS SCT 扩展包的权限

Amazon Aurora 的 AWS SCT 扩展包使用 AWS Lambda 函数模拟邮件发送、作业调度、排队和其他操作。将 AWS SCT 扩展包应用于目标 Aurora 数据库时, AWS SCT 会创建一个新 AWS Identity and Access Management (IAM) 角色和内联 IAM 策略。接下来, AWS SCT 创建一个新的 Lambda 函数,并配置您的 Aurora 数据库集群以实现出站连接。 AWS Lambda要运行这些操作,请确保向 IAM 用户授予以下必需权限:

  • iam:CreateRole— 为您的 AWS 账户创建新的 IAM 角色。

  • iam:CreatePolicy— 为您的 AWS 账户创建新的 IAM 策略。

  • iam:AttachRolePolicy:将指定策略附加到 IAM 角色。

  • iam:PutRolePolicy:更新嵌入在 IAM 角色中的内联策略文档。

  • iam:PassRole:将指定的 IAM 角色传递给规则引擎。

  • iam:TagRole:将标签添加到 IAM 角色。

  • iam:TagPolicy:将标签添加到 IAM 策略中。

  • lambda:ListFunctions:查看您的 Lambda 函数列表。

  • lambda:ListTags:查看您的 Lambda 函数的标签列表。

  • lambda:CreateFunction:新建 Lambda 函数。

  • rds:AddRoleToDBCluster:将 IAM 角色与您的 Aurora 数据库集群关联。

Amazon Redshift 的 AWS SCT 扩展包模拟了将转换后的对象应用到 Amazon Redshift 时所需的源数据仓库基础函数。在将转换后的代码应用于 Amazon Redshift 之前,必须应用 Amazon Redshift 的扩展包。为此,请将 iam:SimulatePrincipalPolicy 操作包含在 IAM 策略中。

AWS SCT 使用 IAM 策略模拟器检查安装 Amazon Redshift 扩展包所需的权限。即使您已正确配置 IAM 用户, IAM Policy Simulator 也会显示错误消息。这是 IAM Policy Simulator 的已知问题。此外,当 IAM 策略中没有 iam:SimulatePrincipalPolicy 操作时, IAM Policy Simulator 会显示一条错误消息。在这些情况下,您可以忽略错误消息,使用扩展包向导应用扩展包。有关更多信息,请参阅 应用扩展包

使用扩展包架构

转换数据库或数据仓库架构时, AWS SCT 会向您的目标数据库添加一个额外的架构。该架构用于实现将转换后的架构写入到目标数据库时必需的源数据库的 SQL 系统功能。这个额外的架构称为扩展包架构。

OLTP 数据库的扩展包架构按照源数据库命名,如下所示:

  • Microsoft SQL Server: AWS_SQLSERVER_EXT

  • MySQL:AWS_MYSQL_EXT

  • Oracle:AWS_ORACLE_EXT

  • PostgreSQL: AWS_POSTGRESQL_EXT

OLAP 数据仓库应用程序的扩展包架构按照源数据存储命名,如下所示:

  • Greenplum:AWS_GREENPLUM_EXT

  • Microsoft SQL Server: AWS_SQLSERVER_EXT

  • Netezza:AWS_NETEZZA_EXT

  • Oracle:AWS_ORACLE_EXT

  • Teradata:AWS_TERADATA_EXT

  • Vertica:AWS_VERTICA_EXT

为 AWS SCT 扩展包使用自定义库

在某些情况下, AWS SCT 无法将源数据库功能转换为目标数据库中的等效功能。相关的 AWS SCT 扩展包包含自定义库,这些库可以模拟目标数据库中的某些源数据库功能。

如果您要转换事务型数据库,请参阅 使用 AWS SCT 扩展包中的 AWS Lambda 函数

应用扩展包

您可以使用 AWS SCT 扩展包向导或在将转换后的代码应用于目标数据库时应用扩展包。

使用扩展包向导应用扩展包
  1. 在目标数据库树中 AWS Schema Conversion Tool,打开上下文(右键单击)菜单,选择 A pply extension pack for,然后选择您的源数据库平台。

    
                            “应用扩展包”上下文菜单

    扩展包向导随即出现。

  2. 查看 Welcome 页面,然后选择 Next

  3. AWS 配置文件页面上,执行以下操作。

    • 如果您只要重新安装扩展包架构,则选择 Skip this step for now,然后选择 Next暂时跳过此步骤选项仅适用于联机事务处理(OLTP)数据库。

    • 如果您要上传新库,则提供凭证以连接到您的 AWS 账户。仅在转换 OLAP 数据库或 ETL 脚本时使用此步骤。如果您已 AWS CLI 安装您的 AWS Command Line Interface (AWS CLI) 凭证,则可以使用该凭证。您也可以使用之前存储在全局应用程序设置的配置文件中且与项目关联的凭证。如有必要,请选择 “导航到全局设置” 以配置不同的配置文件或将其与您的 AWS SCT 项目关联。有关更多信息,请参阅 将 AWS 服务配置文件存储在 AWS SCT 中

  4. 如果您要上传新库,请在库上传页面上选择我需要上传库。仅在转换 OLAP 数据库或 ETL 脚本时使用此步骤。接下来,提供 Amazon S3 路径,然后选择将库上传到 S3

    如果您已经上传了库,请在库上传页面上选择我已经上传了库,使用我现有 S3 存储桶。接下来,提供 Amazon S3 路径。

    完成后,选择 Next

  5. 函数模拟页面上,选择创建扩展包。此时显示包含扩展包操作状态的消息。

    完成后,选择 Finish

在应用转换后的代码时应用扩展包
  1. 在您的 AWS 服务配置文件中指定 Amazon S3 存储桶。仅在转换 OLAP 数据库或 ETL 脚本时使用此步骤。有关更多信息,请参阅 将 AWS 服务配置文件存储在 AWS SCT 中

    确保 Amazon S3 存储桶策略包含以下权限:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["s3:ListBucket"], "Resource": ["*"] }, { "Effect": "Allow", "Action": ["s3:PutObject"], "Resource": ["*"] }, { "Effect": "Allow", "Action": ["iam:SimulatePrincipalPolicy"], "Resource": ["*"] }, { "Effect": "Allow", "Action": ["iam:GetUser"], "Resource": ["arn:aws:iam::111122223333:user/DataExtractionAgentName"] } ] }

    在前面的示例中,将 111122223333: user/ 替换为您的 IAM 用户的姓名DataExtractionAgentName

  2. 转换源数据仓库架构。有关更多信息,请参阅 将数据仓库架构转换为 Amazon Redshift

  3. 在右窗格中,选择转换后的架构。

  4. 打开架构元素的上下文 (右键单击) 菜单,然后选择 Apply to database

  5. AWS SCT 生成包含所需组件的扩展包,并将aws_database_engine_name_ext架构添加到目标树中。接下来,将转换后的代码和扩展包架构 AWS SCT 应用于目标数据仓库。

    当您将 Amazon Redshift 和组合使用 AWS Glue 作为目标数据库平台时, AWS SCT 会在扩展包中添加一个额外的架构。

使用 AWS SCT 扩展包中的 AWS Lambda 函数

AWS SCT 提供了一个扩展包,其中包含用于电子邮件、作业计划的 Lambda 函数以及托管在 Amazon EC2 上的数据库的其他功能。

使用 AWS Lambda 函数来模拟数据库功能

在某些情况下,数据库功能无法转换为等效的 Amazon RDS 功能。例如,Oracle 发送使用 UTL_SMTP 的电子邮件调用,Microsoft SQL Server 可以使用作业计划程序。如果您在 Amazon EC2 上托管和自行管理数据库,则可以通过使用 AWS 服务代替这些功能来模拟这些功能。

AWS SCT 扩展包向导可帮助您安装、创建和配置 Lambda 函数,以模拟电子邮件、作业计划和其他功能。

应用扩展包支持 Lambda 函数

您可以使用扩展包向导或在将转换后的代码应用于目标数据库时应用扩展包支持 Lambda 函数。

重要

只有在 Amazon EC2 上安装和自行管理的数据库,才支持 AWS 服务仿真功能。如果目标数据库位于 Amazon RDS 数据库实例上,请勿安装服务模拟功能。

使用扩展包向导应用扩展包
  1. 在目标数据库树中 AWS Schema Conversion Tool,打开上下文(右键单击)菜单,选择 A pply extension pack for,然后选择您的源数据库平台。

    
                            “应用扩展包”上下文菜单

    扩展包向导随即出现。

  2. 查看 Welcome 页面,然后选择 Next

  3. AWS 配置文件页面上,执行以下操作。

    • 如果您只要重新安装扩展包架构,则选择 Skip this step for now,然后选择 Next

    • 如果您正在安装 AWS 服务,请提供用于连接到您的服务的凭据 AWS 账户。如果您 AWS CLI 安装了 AWS CLI 证书,则可以使用您的凭证。您也可以使用之前存储在全局应用程序设置的配置文件中且与项目关联的凭证。如有必要,请选择 Navigate to Project Settings,将一个不同的配置文件与项目关联。如有必要,请选择 Global Settings 以创建新的配置文件。有关更多信息,请参阅 将 AWS 服务配置文件存储在 AWS SCT 中

  4. Email Sending Service 页面上,执行以下操作:

    • 如果您只要重新安装扩展包架构,则选择 Skip this step for now,然后选择 Next

    • 如果您正在安装 AWS 服务并且已有 Lambda 函数,则可以提供该函数。否则,向导将为您创建该函数。完成后,选择 Next

  5. Job Emulation Service 页面上,执行以下操作:

    • 如果您只要重新安装扩展包架构,则选择 Skip this step for now,然后选择 Next

    • 如果您正在安装 AWS 服务并且已有 Lambda 函数,则可以提供该函数。否则,向导将为您创建该函数。完成后,选择 Next

  6. 函数模拟页面上,选择创建扩展包。此时显示包含扩展包操作状态的消息。

    完成后,选择 Finish

注意

要更新扩展包并覆盖旧的扩展包组件,请确保使用最新版本的 AWS SCT。有关更多信息,请参阅 安装、验证和更新 AWS SCT

为 AWS SCT 扩展包配置函数

扩展包包含在使用前必须配置的功能。该常量CONVERSION_LANG定义了补丁包使用的语言。这些功能适用于英语和德语。

要将语言设置为英语或德语,请在函数代码中进行以下更改。找到以下常量声明:

CONVERSION_LANG CONSTANT VARCHAR := '';

CONVERSION_LANG要设置为英语,请将该行更改为以下内容:

CONVERSION_LANG CONSTANT VARCHAR := 'English';

CONVERSION_LANG要设置为英语,请将该行更改为以下内容:

CONVERSION_LANG CONSTANT VARCHAR := 'Deutsch';

为以下功能设置此设置:

  • aws_sqlserver_ext.conv_datetime_to_string

  • aws_sqlserver_ext.conv_date_to_string

  • aws_sqlserver_ext.conv_string_to_date

  • aws_sqlserver_ext.conv_string_to_datetime

  • aws_sqlserver_ext.conv_string_to_datetime

  • aws_sqlserver_ext.parse_to_date

  • aws_sqlserver_ext.parse_to_datetime

  • aws_sqlserver_ext.parse_to_time