本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
SQL 服务器安装
在您的 SQL Server 环境中执行以下步骤以启用 AWS 转换现代化。
数据库设置和配置
步骤 1:创建具有所需权限的数据库用户
创建具有必要权限的 T AWS ransform 专用数据库用户。如果您已经有 DMS 架构转换用户,则可以重复使用该用户。
连接到您的 SQL Server 实例并运行以下命令:
-- Create the login in master database USE master; CREATE LOGIN [atx_user] WITH PASSWORD = 'YourStrongPassword123!'; -- Switch to your application database USE [YourDatabaseName]; CREATE USER [atx_user] FOR LOGIN [atx_user]; -- Grant required permissions GRANT VIEW DEFINITION TO [atx_user]; GRANT VIEW DATABASE STATE TO [atx_user]; ALTER ROLE [db_datareader] ADD MEMBER [atx_user]; -- Grant master database permissions USE master; GRANT VIEW SERVER STATE TO [atx_user]; GRANT VIEW ANY DEFINITION TO [atx_user];
注意
对要实现现代化的每个数据库重复特定于数据库的命令(USE、CREATE USER、GRANT)。
db_datareader 角色仅在数据迁移时是必需的,而不仅仅是架构转换所必需的。
db_datareader 角色授予对数据库中所有表的读取权限
只有在执行数据迁移时才需要此角色。
仅适用于架构转换(不包括数据迁移),不需要 db_datareader 角色
其他权限(视图定义、查看数据库状态等)足以进行架构转换
第 2 步:将凭据存储在 AWS Secrets Manager
将您的数据库凭据安全地存储在 S AWS ecrets Manager 中。如果您已经为 DMS 创建了密钥,请跳过此步骤。
在控制台中导航到 S AWS ecrets Manager
选择 “存储新密钥”
配置密钥:
密钥类型:其他数据库的凭证
数据库:微软 SQL Server
用户名:atx_user(或您选择的用户名)
密码:您创建的密码
服务器名称:您的 SQL Server 端点
数据库名称:您的数据库名称
端口:1433(或您的自定义端口)
选择下一步。
输入秘密名称:atx-db-modernization-sqlserver
添加必需的标签(这些标签是必填的):
关键:项目,价值:atx-db-现代化
密钥:所有者,值:数据库连接器
在剩余屏幕中选择 “下一步”
选择商店
记下秘密 ARN,以便在下一步中使用
重要
数据库密码只能使用可打印的 ASCII 字符,不包括 '/'、'@'、'"' 和空格。计划删除的密钥可能会导致转换失败。
步骤 3:创建所需的 DMS 角色
AWS 转换需要特定的 IAM 角色才能进行 DMS 操作。使用下面的 CloudFormation 模板部署这些角色。
注意
如果您的 AWS 账户已有 DMS-related 角色,请修改此模板以重复使用这些资源,而不是创建重复的角色。
创建一个名为 dms-roles.yaml 的文件,其中包含以下内容:
AWSTemplateFormatVersion: '2010-09-09' Description: 'DMS Service Roles for AWS Transform SQL Server Modernization' Resources: DMSCloudWatchLogsRole: Type: AWS::IAM::Role Properties: RoleName: dms-cloudwatch-logs-role AssumeRolePolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Principal: Service: - dms.amazonaws.com - schema-conversion.dms.amazonaws.com Action: sts:AssumeRole ManagedPolicyArns: - arn:aws:iam::aws:policy/service-role/AmazonDMSCloudWatchLogsRole DMSS3AccessRole: Type: AWS::IAM::Role Properties: RoleName: dms-s3-access-role AssumeRolePolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Principal: Service: - dms.amazonaws.com - schema-conversion.dms.amazonaws.com Action: sts:AssumeRole Policies: - PolicyName: S3TaggedAccess PolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Action: - s3:GetBucketLocation - s3:GetBucketVersioning - s3:PutObject - s3:PutBucketVersioning - s3:GetObject - s3:GetObjectVersion - s3:ListBucket - s3:DeleteObject Resource: arn:aws:s3:::atx-db-modernization-* Condition: StringEquals: aws:ResourceAccount: !Ref AWS::AccountId DMSSecretsManagerRole: Type: AWS::IAM::Role Properties: RoleName: dms-secrets-manager-role AssumeRolePolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Principal: Service: - dms.amazonaws.com - schema-conversion.dms.amazonaws.com Action: sts:AssumeRole Policies: - PolicyName: SecretsManagerTaggedAccess PolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Action: - secretsmanager:GetSecretValue - secretsmanager:DescribeSecret Resource: '*' Condition: StringEquals: secretsmanager:ResourceTag/Project: atx-db-modernization secretsmanager:ResourceTag/Owner: database-connector DMSVPCRole: Type: AWS::IAM::Role Properties: RoleName: dms-vpc-role AssumeRolePolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Principal: Service: - dms.amazonaws.com - schema-conversion.dms.amazonaws.com Action: sts:AssumeRole ManagedPolicyArns: - arn:aws:iam::aws:policy/service-role/AmazonDMSVPCManagementRole DMSServerlessRole: Type: AWS::IAM::ServiceLinkedRole Properties: AWSServiceName: dms.amazonaws.com Description: 'Service Linked Role for AWS DMS Serverless' Outputs: DMSCloudWatchLogsRoleArn: Description: ARN of the DMS CloudWatch Logs Role Value: !GetAtt DMSCloudWatchLogsRole.Arn DMSS3AccessRoleArn: Description: ARN of the DMS S3 Access Role Value: !GetAtt DMSS3AccessRole.Arn DMSSecretsManagerRoleArn: Description: ARN of the DMS Secrets Manager Role Value: !GetAtt DMSSecretsManagerRole.Arn DMSVPCRoleArn: Description: ARN of the DMS VPC Role Value: !GetAtt DMSVPCRole.Arn Export: Name: !Sub ${AWS::StackName}-VPCRole DMSServerlessRoleArn: Description: ARN of the DMS Serverless Role Value: !Sub 'arn:aws:iam::${AWS::AccountId}:role/aws-service-role/dms.amazonaws.com/AWSServiceRoleForDMSServerless' Export: Name: !Sub ${AWS::StackName}-ServerlessRole
使用 AWS CLI 部署 CloudFormation 堆栈:
aws cloudformation create-stack \ --stack-name dms-roles \ --template-body file://dms-roles.yaml \ --capabilities CAPABILITY_NAMED_IAM \ --region us-east-1
或者使用 AWS 控制台进行部署:
在 AWS 控制台 CloudFormation 中导航至
选择创建堆栈
选择上传模板文件
上传 dms-roles.yaml 文件
输入堆栈名称:dms-roles
确认 IAM 功能
选择创建堆栈
步骤 4:配置网络安全
确保 Transfor AWS m、您的 SQL Server 数据库和其他 AWS 服务之间的网络连接正确。
安全组配置(推荐方法)
推荐方法:使用基于安全组的访问控制而不是 IP-based 规则。这提供了更好的安全性,更易于管理,并且可以与Transform的 AWS 架构无缝协作。
为什么要进行安全 Group-Based 访问控制?
DMS 架构转换在您的 VPC 中创建弹性网络接口 (ENI)
您的数据库不必是公开访问的
AWS 转换不会暴露私有 IP 地址,这使得 IP-based 规则变得复杂
随着资源的扩展,安全组引用提供动态、自动的更新
配置你的 SQL Server 安全组
在转换中 AWS 配置 DMS 架构转换实例配置文件时,可以为 DMS SC 实例指定安全组。您的数据库安全组应允许来自此 DMS SC 安全组的入站流量。
Step-by-step 配置:
确定 DMS 架构转换安全组:
这是在 AWS 转换中创建实例配置文件时指定的
记下安全组 ID(例如 sg-0123456789abcdef0)
更新您的 SQL Server 安全组入站规则:
类型:自定义 TCP
端口:1433(或您的自定义 SQL 服务器端口)
来源:DMS 架构转换安全组 ID
描述:“允许 DMS 架构转换访问权限”
对于 Aurora PostgreSQL 目标(创建后):
类型:P ostgreSQL
端口:5432(或您的自定义 PostgreSQL 端口)
来源:DMS 架构转换安全组 ID
描述:“允许 DMS 架构转换访问权限”
重要
对于权限最低的安全模型很重要:如果您的组织使用默认会阻止所有流量的 “最低权限” 安全模型,则必须明确允许从 DMS 架构转换安全组到您的数据库端口的入站流量。不要向所有源或 IP 范围开放端口 1433。
必填 AWS 服务连接
确保您的 VPC 可以与以下设备通信:
AWS 转换服务端点
AWS DMS 端点
Aurora PostgreSQL 终端节点
用于对象存储的 S3 端点
AWS Secrets Manager 端点
AWS CodeConnections 端点
VPC 终端节点:对于私有网络,请为所需的 AWS 服务配置 VPC 终端节点,以避免依赖互联网网关。
外部托管数据库的要求
如果您的 SQL Server 数据库托管在外部 AWS,请确保满足以下先决条件,然后在开始现代化之前完成设置步骤。
先决条件
-
拥有 VPC 的 AWS 账户
-
VPC 和外部数据库之间的网络连接。有关配置网络连接的信息,请参阅《 AWS DMS 用户指南》中的配置网络连接。
设置步骤
-
使用外部数据库 AWS Secrets Manager 的连接详细信息在中创建密钥。有关更多信息,请参阅 第 2 步:将凭据存储在 AWS Secrets Manager。
-
出现提示时,请提供用于连接外部数据库的 VPC ID 和安全组 ID。 AWS Transform 会提示您输入此信息,因为密码中的数据库主机名无法在 AWS 账户中解析。