Amazon s3 如何以编程方式使用localstack s3端点设置Airflow 1.10日志记录?
在尝试为本地和kubernetes开发环境设置localstack s3存储桶的气流日志记录时,我遵循以下步骤。给出一点上下文,是一个本地AWS云堆栈,其中包含本地运行的s3在内的AWS服务 我在气流容器中添加了以下环境变量,以尝试登录到本地s3存储桶。这是我为所有气流容器添加到docker compose.yaml的内容:Amazon s3 如何以编程方式使用localstack s3端点设置Airflow 1.10日志记录?,amazon-s3,kubernetes,docker-compose,airflow,localstack,Amazon S3,Kubernetes,Docker Compose,Airflow,Localstack,在尝试为本地和kubernetes开发环境设置localstack s3存储桶的气流日志记录时,我遵循以下步骤。给出一点上下文,是一个本地AWS云堆栈,其中包含本地运行的s3在内的AWS服务 我在气流容器中添加了以下环境变量,以尝试登录到本地s3存储桶。这是我为所有气流容器添加到docker compose.yaml的内容: - AIRFLOW__CORE__REMOTE_LOGGING=True - AIRFLOW__CORE__REMOTE_BASE_LOG_FO
- 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 creds添加到了airflow.cfg
[MyS3Conn]
aws\u访问\u密钥\u id=foo
aws_secret_access_key=bar
aws_默认_地区=美国东部-1
主机=http://localstack:4572 #s3端口。不确定这是不是合适的地方
此外,我还安装了ApacheAirflow[hooks]和ApacheAirflow[s3],尽管根据实际情况还不清楚到底需要哪一个
我按照中的步骤尝试验证S3Hook是否可以写入我的localstack s3实例:
来自afflow.hook导入S3Hook
s3=s3挂钩(aws_conn_id='MyS3Conn')
s3.加载字符串('test','test',bucket\u name='local-afflow-logs')
但是我得到了botocore.exceptions.NoCredentialsError:找不到凭据
将凭据添加到/admin/connection/edit
下的airflow console后,如图所示:
这是新的异常,botocore.exceptions.ClientError:调用PutObject操作时发生错误(InvalidAccessKeyId):您提供的AWS访问密钥Id在我们的记录中不存在。
返回。这可能与网络有关
无论如何,需要的是程序设置,而不是手动设置
我能够使用一个独立的Python脚本(使用boto显式地输入AWS凭据)访问bucket,但它需要作为一部分工作
通过将MyS3Conn
添加到afflow.cfg
中,是否有合适的方法为S3Hook
设置主机/端口/凭据
基于,气流似乎还不支持自定义S3URL。但是,基于气流(父级),似乎可以设置端点url,包括端口,并且应该从aiffort.cfg
读取
我能够单独使用boto在localstack中检查并写入s3存储桶。另外,curlhttp://localstack:4572/local-mochi气流日志
返回气流容器中的铲斗内容。和aws——端点url=http://localhost:4572 s3 ls
返回无法连接到端点URL:“http://localhost:4572/“
如果要从docker中运行的airflow登录到localstack s3 Bucket,还需要哪些其他步骤,以及是否支持自动设置 我认为应该使用
localhost
而不是localstack
作为端点,例如host=http://localhost:4572
在Airflow 1.10中,您可以在每个连接的基础上覆盖端点,但不幸的是,它一次只支持一个端点,因此您将使用该连接更改所有AWS挂钩的端点。要覆盖它,请编辑相关连接,并在“额外”字段中输入:
{"host": "http://localhost:4572"}
我相信这会解决问题?这有助于我与其他供应商解决问题。