Создать или заменить AWS Glue Crawler - PullRequest
0 голосов
/ 09 марта 2020

Использование boto3 :

  1. Можно ли проверить, существует ли AWS Glue Crawler, и создать его, если его нет?
  2. Если он уже существует, мне нужно обновить его.
  3. Как будет выглядеть скрипт создания сканера?

Будет ли это похоже на CREATE OR REPLACE TABLE в СУБД ...

Кто-нибудь сделал это или имеет рекомендации?

Спасибо :) Михаил

Ответы [ 3 ]

1 голос
/ 11 марта 2020

Да, вы можете сделать все это, используя boto3, однако, нет единой функции, которая могла бы сделать все это одновременно. Вместо этого вам придется выполнить ряд следующих вызовов API:

Каждый раз, когда эти функции будут возвращать ответ, который вам необходимо будет проанализировать / проверить / проверить вручную.

AWS довольно хорош в их документации, так что определенно проверьте это. Это может показаться ошеломляющим, но в начале вы можете легко скопировать и вставить систему запросов, которую они предоставляют в документах, а затем удалить ненужные части и т. Д. c. Хотя boto3 очень полезно для автозаполнения / предложений, но есть проект, который может помочь с этим mypy_boto3_builder и его предшественниками mypy_boto3 , boto3_type_annotations .

Если что-то идет не так, т.е. вы не указали некоторые параметры правильно, их ответы об ошибках довольно хороши и полезны.

Вот пример того, как вы можете перечислить все существующие сканеры

import boto3
from pprint import pprint

client = boto3.client('glue')
response = client.list_crawlers()
available_crawlers = response["CrawlerNames"]

for crawler_name in available_crawlers:
    response = client.get_crawler(Name=crawler_name)
    pprint(response)

Предполагая, что в IAM у вас есть AWSGlueServiceRoleDefault со всеми необходимыми разрешениями для сканера клея, вот как вы можете его создать:

response = client.create_crawler(
    Name='my-crawler-via-api',
    Role='AWSGlueServiceRoleDefault',
    Description='Crawler generated with Python API',  # optional
    Targets={
        'S3Targets': [
            {
                'Path': 's3://some/path/in/s3/bucket',
            },
        ],
    },
)
1 голос
/ 11 марта 2020

Насколько я знаю, для этого нет API. Мы вручную перечисляем сканеры с помощью list_crawlers и перебираем список, чтобы решить, добавлять ли или обновлять сканеры (update_crawler).

Ознакомьтесь с API @ https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/glue.html

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

Я использовал стандартную обработку исключений Python:

#Instantiate the glue client.
glue_client = boto3.client(
    'glue', 
    region_name = 'us-east-1'
)

#Attempt to create and start a glue crawler on PSV table or update and start it if it already exists.
try:
    glue_client.create_crawler(
        Name = 'crawler name',
        Role = 'role to be used by glue to create the crawler',
        DatabaseName = 'database where the crawler should create the table',
        Targets = 
        {
            'S3Targets': 
            [
                {
                    'Path':'full s3 path to the directory that crawler should process'
                }
            ]
        }
    )
    glue_client.start_crawler(
        Name = 'crawler name'
    )
except:
    glue_client.update_crawler(
        Name = 'crawler name',
        Role = 'role to be used by glue to create the crawler',
        DatabaseName = 'database where the crawler should create the table',
        Targets = 
        {
            'S3Targets': 
            [
                {
                    'Path':'full s3 path to the directory that crawler should process'
                }
            ]
        }
    )
    glue_client.start_crawler(
        Name = 'crawler name'
    )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...