AWS Склеить задание для извлечения данных из DynamoDB в другой аккаунт - PullRequest
1 голос
/ 21 марта 2020

Я использую AWS Клей для копирования данных из DynamoDB в S3. Я написал код ниже, чтобы скопировать таблицу DyanmoDB на S3 в той же учетной записи. Он работает нормально, копирует мою таблицу с 600 миллионами записей без каких-либо проблем. Это займет около 20 минут.

from pyspark.context import SparkContext
from awsglue.context import GlueContext
from datetime import datetime

# inputs
dataset_date = datetime.strftime(datetime.now(), '%Y%m%d')
table_name = "table-name"
read_percentage = "0.5"
output_location = 's3://'+dataset_date
fmt ="json" 

# glue setup
sc = SparkContext()
glueContext = GlueContext(sc)

# scan the DDB table
table = glueContext.create_dynamic_frame.from_options("dynamodb",
                                                  connection_options={
                                                                      "dynamodb.input.tableName": table_name,
                                                                      "dynamodb.throughput.read.percent": read_percentage,
                                                                      "dynamodb.splits": "100"
                                                                      }
                                                )

# write to S3
glueContext.write_dynamic_frame.from_options(frame=table,
                                         connection_type="s3",
                                         connection_options={"path": output_location},
                                         format=fmt,
                                         transformation_ctx="datasink"
                                        )

Но теперь я хочу сделать дамп кросс-аккаунта S3, используя приведенный выше скрипт. Таблицы DynamoDB находятся в учетной записи A (учетная запись prod) и задании Glue для чтения из таблиц DynamoDB и корзины S3 для сброса этих данных в учетную запись B (учетная запись DW). Я не знаю, возможно ли использовать мой сценарий, но предоставлю кросс-аккаунт доступ Glue, чтобы он мог читать таблицы DynamoDB из учетной записи A

Ответы [ 2 ]

0 голосов
/ 30 марта 2020

Я не думаю, что это сработает со скриптом клея, работающим в учетной записи DW.

GlueContext подключается к DynamoDB с использованием имени таблицы:

https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-connect.html#aws -glue-Программирование-etl-Connect-DynamodB

Что вы должны исследовать, это запустить сценарий склеивания в учетной записи Prod и дать кросс-аккаунт доступ к вашим корзинам DW, чтобы Клей, работающий в учетной записи prod, может взять на себя роль записи целевых S3 Buckets в DW account .

0 голосов
/ 24 марта 2020

Создание роли IAM в учетной записи A ( Владелец таблицы DynamoDB учетная запись), которая позволяет Glue как Основной для чтения таблиц.

Настройка политики разрешений для роли IAM в учетной записи A ( владелец таблицы DynamoDB учетная запись), что позволяет считывать данные в таблицах. Пример, из которого вы можете построить, предоставляется следующим образом:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "ListAndDescribe",
            "Effect": "Allow",
            "Action": [
                "dynamodb:List*",
                "dynamodb:DescribeReservedCapacity*",
                "dynamodb:DescribeLimits",
                "dynamodb:DescribeTimeToLive"
            ],
            "Resource": "*"
        },
        {
            "Sid": "AllTables",
            "Effect": "Allow",
            "Action": [
                "dynamodb:BatchGet*",
                "dynamodb:DescribeStream",
                "dynamodb:DescribeTable",
                "dynamodb:Get*",
                "dynamodb:Query",
                "dynamodb:Scan"
            ],
            "Resource": [
                "arn:aws:dynamodb:*:*:table/table-1",
                "arn:aws:dynamodb:*:*:table/table-2"
            ]
        }
    ]
}

Настройте политику доверия в указанной выше роли IAM в учетной записи A ( таблицы Dynamo DB учетная запись), чтобы Glue мог принять это.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "glue.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

В роли IAM, настроенной для задания Glue в учетной записи B (которой не принадлежат таблицы), включите политику разрешений для принятия роли IAM в учетной записи A ( таблицы DB Dynamo владелец учетная запись).

    {
        "Sid": "DelegateDynamoDBTablesOwnerRoleArn",
        "Effect": "Allow",
        "Action": "sts:AssumeRole",
        "Resource": "arn:aws:iam::dynamo-db-table-owner-role-arn:role/*"
    }

Рекомендации

  1. https://docs.aws.amazon.com/glue/latest/dg/cross-account-access.html#cross -account-call-etl
...