В попытке настроить регистрацию потока воздуха в локальные стеки s3, для локальных сред и сред разработки kubernetes, я следую документации по потоку воздуха для регистрации в s3 . Чтобы дать небольшой контекст, localstack - это локальный облачный стек AWS с AWS службами, включая s3, работающий локально.
Я добавил следующие переменные среды в свои контейнеры воздушного потока аналогично этому другому сообщению переполнения стека при попытке войти в мои локальные сегменты s3. Это то, что я добавил к docker-compose.yaml
для всех контейнеров воздушного потока:
- AIRFLOW__CORE__REMOTE_LOGGING=True
- AIRFLOW__CORE__REMOTE_BASE_LOG_FOLDER=s3://local-airflow-logs
- AIRFLOW__CORE__REMOTE_LOG_CONN_ID=MyS3Conn
- AIRFLOW__CORE__ENCRYPT_S3_LOGS=False
Я также добавил свои кредиты localstack s3 к airflow.cfg
[MyS3Conn]
aws_access_key_id = foo
aws_secret_access_key = bar
aws_default_region = us-east-1
host = http://localstack:4572 # s3 port. not sure if this is right place for it
Кроме того, я установлен apache -airflow [hooks] и apache -airflow [s3], хотя неясно, какой из них действительно нужен, на основании документации .
, за которой я следовал шаги в предыдущем сообщении о переполнении стека при попытке проверить, может ли S3Hook записать в мой экземпляр s3 localstack:
from airflow.hooks import S3Hook
s3 = S3Hook(aws_conn_id='MyS3Conn')
s3.load_string('test','test',bucket_name='local-airflow-logs')
Но я получаю botocore.exceptions.NoCredentialsError: Unable to locate credentials
.
После добавления учетных данных на консоли воздушного потока под /admin/connection/edit
, как показано: это новое исключение, botocore.exceptions.ClientError: An error occurred (InvalidAccessKeyId) when calling the PutObject operation: The AWS Access Key Id you provided does not exist in our records.
возвращается. Другие люди сталкивались с такой же проблемой , и это, возможно, было связано с сетью.
В любом случае, необходима программная c настройка, а не ручная.
Я смог получить доступ к корзине, используя автономный скрипт Python (явно вводя AWS учетные данные с помощью boto), но он должен работать как часть воздушного потока.
Есть ли правильный способ настроить хост / порт / учетные данные для S3Hook
путем добавления MyS3Conn
к airflow.cfg
?
Исходя из исходного кода перехватчика потока s3 , кажется, что пользовательский URL-адрес s3 может еще не поддерживаться потоком воздуха. Тем не менее, основываясь на исходном коде aws_hook воздушного потока (родительский), представляется возможным установить endpoint_url, включая порт, и он должен быть прочитан из airflow.cfg
.
Я могу для проверки и записи в мое ведро s3 в localalsck, используя только boto. Кроме того, curl http://localstack:4572/local-mochi-airflow-logs
возвращает содержимое контейнера из контейнера с воздушным потоком. И aws --endpoint-url=http://localhost:4572 s3 ls
возвращает Could not connect to the endpoint URL: "http://localhost:4572/"
.
Какие другие шаги могут потребоваться для регистрации в локальные стеки s3 из потока воздуха, работающего в docker, с автоматической настройкой, и поддерживается ли это еще?