1

我为 AWS DMS 创建了一个堆栈,另一个为两个测试 Postgres dbs 创建了一个堆栈AWS::RDS::DBInstance,使用cfn-sphere 成功创建了两个堆栈,我能够在源数据库中创建一个表并将数据加载到其中。

我尝试使用 boto3 启动复制任务

client = boto3.client('dms')
response = client.start_replication_task(
    ReplicationTaskArn=replication_task_arn,
    StartReplicationTaskType='start-replication'
)

但它没有用,我得到了错误:

botocore.errorfactory.InvalidResourceStateFault:调用StartReplicationTask操作时发生错误(InvalidResourceStateFault):复制实例(url)的测试连接应该成功以启动复制任务

我试图从网站触发它,但我收到一条错误消息:

AWSDatabaseMigrationService:复制实例和端点的测试连接应该成功以启动复制任务

不幸的是,复制实例和目标点之间的连接在网站上不起作用(我的帐户具有完全访问权限)。但它从我的命令行与 boto3 dms 客户端test_connection一起工作。

我的安全组规则是:

  SecurityGroupIngress:
    Type: 'AWS::EC2::SecurityGroupIngress'
    Properties:
      GroupId: !Ref dbSecurityGroup
      IpProtocol: tcp
      FromPort: '5432'
      ToPort: '5432'
      CidrIp: //my public ip

任何人都可以指导我在哪里寻找以及如何解决它?(这是我的第一个 AWS 任务)

4

1 回答 1

2

1) 确保复制实例和目标端点在同一个 vpc 中。否则,您必须执行 vpc 对等互连。两者也应该在同一地区。

2) 将复制实例的安全组添加到目标数据库安全组的入站规则中。

Type: AWS::EC2::SecurityGroup
Properties: 
  GroupName: "target-endpoint-sg"
  GroupDescription: "security group of target db server"
  VpcId: <provide your vpc id>
  SecurityGroupIngress:
    - IpProtocol: tcp
      FromPort: '5432'
      ToPort: '5432'
      SourceSecurityGroupId: <sec-grp of ReplicationInstance>

3) 如果您的目标数据库已经创建,则在创建时正确提供完整的服务器名称(例如:target-database-name.xxxxxxxxxxx.us-east-1.rds.amazonaws.com)、用户名和密码值目标端点。在 aws 控制台中,必须DMS -> Endpoints -> Select your endpoint checkbox -> Test connection验证连接。

如果成功,则在boto3客户端配置和测试使用test_connection方法中使用相同用户的角色。

于 2017-10-06T20:13:40.953 回答