В MWAA я использую следующий код для доступа к файлам в моей корзине S3. Ковш S3 имеет следующую форму:
aws s3 ls s3://example-bucket/incoming/driver-events/ingestDate=2021-05-26/
Приведенная выше команда работает нормально. Теперь я пытаюсь получить ту же информацию из S3_hook.S3Hook()
вызова от Airflow. У меня есть следующий код:
bucket='s3://example-bucket/incoming/driver-events/ingestDate=2021-05-26/'
s3_handle = S3_hook.S3Hook(aws_conn_id='s3_default')
key_list = s3_handle.list_keys(bucket_name=bucket)
print(f"{len(key_list)} keys found in bucket")
for keys in key_list:
logging.info(keys)
Это приводит к ошибке от boto3:
botocore.exceptions.ParamValidationError: Parameter validation failed:
Invalid bucket name "s3://example-bucket/incoming/driver-events/ingestDate=2021-05-26/": Bucket name must match the regex "^[a-zA-Z0-9.\-_]{1,255}$" or be an ARN matching the regex "^arn:(aws).*:s3:[a-z\-0-9]+:[0-9]{12}:accesspoint[/:][a-zA-Z0-9\-]{1,63}$|^arn:(aws).*:s3-outposts:[a-z\-0-9]+:[0-9]{12}:outpost[/:][a-zA-Z0-9\-]{1,63}[/:]accesspoint[/:][a-zA-Z0-9\-]{1,63}$"
Я могу понять, что ошибка возникает, потому что boto3 пытается выполнить проверку некоторых параметров, а регулярное выражение слишком ограничивающее.
Как мне справиться с этим случаем в Airflow? Можно ли как-нибудь отключить проверку параметров? Я вижу, что можно установить «parameter_validation» на False
в boto3 с помощью некоторых настроек конфигурации, но как мне это сделать при использовании S3Hook()
в Airflow, который уже настроен по умолчанию и не может принять конфигурацию boto3? И еще сложнее то, что я должен делать это на MWAA, что не дает вам никакого контроля над папкой ~/.boto/
.