天天看点

AWS - DMS - Redshift 作为目标端时的

当 Redshift 集群作为 DMS 中的 目标端 时, IAM Role的这一步经常会被忽略。

导致在执行DMS任务时,发现 表已经被创建在目标端了,但是数据确没过去。

查看日志,只有一条

Warning,Table 'public'.'tablename' (subtask 1 thread 1) is suspended (replicationtask.c:2471)。

再无其他信息。这时我们束手无策。返回头去查文档,发现没什么问题啊。同账号,同区域,网络都通,Role创建了,没有LOB。

AWS DMS 使用 Amazon S3 存储桶将数据传输到 Amazon Redshift 数据库。 这样就像在 Redshift中使用S3外部表一样。需要关联Role。

对于 AWS DMS 创建存储桶,DMS 控制台使用 IAM 角色 dms-access-for-endpoint。

那么这个 IAM 角色 dms-access-for-endpoint 尤为重要。

下面说一下最容易忽视的一点: IAM 角色 dms-access-for-endpoint。

如果这个Role 之前没有手工创建的话, DMS会自动创建。自动创建的 Role 是有问题的。 他只关联了DMS service。类似于

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "PrincipalGroup": {
        "AWS": "svc:dms.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
           

由于服务中没涉及到 Redshift,所以当Redshift 想要绑定 Role 的时候就会发现有问题。 Redshift 就会报错

error:  User arn:aws-cn:redshift:cn-northwest-1:000000000000:dbuser:chen-test/dbadmin is not authorized to assume IAM Role arn:aws-cn:iam::000000000000:role/dms-access-for-endpoint
           

(Debug时才能看到)

所以我们实际需要这个Role是关联两个服务的。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "1",
      "Effect": "Allow",
      "Principal": {
        "Service": "dms.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    },
    {
      "Sid": "2",
      "Effect": "Allow",
      "Principal": {
        "Service": "redshift.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
           

所以就要重新设置这个 Role。

  1. 检查 Redshift 集群中是否关联了 dms-access-for-endpoint , 如果有,先删除。
  2. 进入 IAM 控制台, 将当前 dms-access-for-endpoint 删除。
  3. 按照文档[2]中 《创建 dms-access-for-endpoint IAM 角色以用于将 Amazon Redshift 作为目标数据库》 步骤,进行配置。
  4. 将 dms-access-for-endpoint 关联至 Redshift 集群。

之后重新执行 DMS 任务,就可以了。

如何Debug。参照文档[3]

参考文档:

[1] https://docs.amazonaws.cn/dms/latest/userguide/CHAP_Target.Redshift.html#CHAP_Target.Redshift.Prerequisites

[2] https://docs.amazonaws.cn/dms/latest/userguide/CHAP_Security.html#CHAP_Security.APIRole

[3] https://amazonaws-china.com/cn/premiumsupport/knowledge-center/dms-enable-debug-logging/?nc1=h_ls

继续阅读