如何为 EmrCreateJobFlowOperator 指定配置文件?
Posted
技术标签:
【中文标题】如何为 EmrCreateJobFlowOperator 指定配置文件?【英文标题】:How can I specify a profile for EmrCreateJobFlowOperator? 【发布时间】:2021-07-20 08:43:17 【问题描述】:我正在使用 EmrCreateJobFlowOperator 创建 EMR 集群,但我需要为其指定配置文件以查找角色“EMR_EC2_DefaultRole”。如果我将“~/.aws/config”中的配置文件配置设置为默认配置文件,则以下代码适用于“aws_default”,但这是我不希望做的事情,因为我有许多不同的配置文件,默认配置文件应该是干净的。有什么解决办法吗?
为我的个人资料配置了正确的角色,但没有为默认角色配置,这是非常基本的:
aws iam list-roles --profile my_specific_profile | grep 'EMR_DefaultRole\|EMR_EC2_DefaultRole'
这仅在我更改“~/.aws/config”中的默认配置文件时才有效。
create_emr_cluster = EmrCreateJobFlowOperator(
task_id="create_emr_cluster",
job_flow_overrides=job_flow_overrides,
aws_conn_id="aws_default",
emr_conn_id="emr_default",
region_name="my_region",
dag=dag,
)
为了避免更改我的“~/.aws/config”,我还尝试了以下方法但没有成功:
create_emr_cluster = EmrCreateJobFlowOperator(
task_id="create_emr_cluster",
job_flow_overrides=job_flow_overrides,
aws_conn_id="aws_default",
emr_conn_id="emr_default",
region_name="my_region",
profile_name="my_specific_profile",
dag=dag,
)
和
create_emr_cluster = EmrCreateJobFlowOperator(
task_id="create_emr_cluster",
job_flow_overrides=job_flow_overrides,
aws_conn_id="aws_default",
emr_conn_id="emr_default",
region_name="my_region",
dag=dag,
)
boto3.setup_default_session(profile_name="my_specific_profile")
和
create_emr_cluster = EmrCreateJobFlowOperator(
task_id="create_emr_cluster",
job_flow_overrides=job_flow_overrides,
aws_conn_id="my_specific_profile",
emr_conn_id="emr_default",
region_name="my_region",
dag=dag,
)
错误是:
botocore.exceptions.ClientError: An error occurred (ValidationException) when calling the RunJobFlow operation: Invalid InstanceProfile: EMR_EC2_DefaultRole.
【问题讨论】:
【参考方案1】:解决方案很简单。事实上,我只需要通过在创建集群的代码之前添加以下命令来设置默认配置文件:
os.environ["AWS_DEFAULT_PROFILE"] = "my_specific_profile"
【讨论】:
我可以在不设置环境变量的情况下实现上述目标吗?喜欢将 boto3.client 与 EmrCreateJobFlowOperator 一起使用?以上是关于如何为 EmrCreateJobFlowOperator 指定配置文件?的主要内容,如果未能解决你的问题,请参考以下文章
如何为 RecyclerView 设置 onItemClickListener? [复制]