Airflow 2 AWS Secret Manager中conn URI的session_kwargs参数报错问题
Airflow 2 AWS连接URI构造问题解决方案
问题复现
将AWS Secret Manager设置为Airflow 2的密钥后端,在Secret Manager中明文定义aws_default连接,原始URI写法如下:aws:///extra?region_name=us-east-1&session_kwargs={\"profile_name\": \"my_profile\"}
调用钩子AwsGlueCrawlerHook(aws_conn_id='aws_default')时触发如下类型错误:
TypeError: type object argument after ** must be a mapping, not str
仅保留aws:///extra?region_name=us-east-1时连接正常,可确定问题由session_kwargs参数的URI写法错误导致。
错误原因
Airflow解析连接URI的查询参数时,默认将所有参数值识别为字符串类型,而session_kwargs需要传入字典类型供**语法解包使用。直接拼接未处理的JSON字典字符串到URI中,不会被Airflow自动反序列化为Python字典,因此触发类型不匹配错误。
正确URI写法
需要对session_kwargs的JSON值做URL编码后再拼接到URI中,Airflow AWS连接的内置解析逻辑会自动将编码后的JSON字符串反序列化为Python字典。
构造步骤:
- 第一步:生成
session_kwargs的标准JSON字符串:{"profile_name": "my_profile"} - 第二步:对该JSON字符串做URL编码,编码后结果为:
%7B%22profile_name%22%3A%20%22my_profile%22%7D - 第三步:将编码后的值替换到URI的
session_kwargs参数位置,最终正确URI为:aws:///extra?region_name=us-east-1&session_kwargs=%7B%22profile_name%22%3A%20%22my_profile%22%7D
内容的提问来源于stack exchange,提问作者Flo
相关产品推荐
相关产品推荐

