如何为 EmrCreateJobFlowOperator 指定配置文件?

How can I specify a profile for EmrCreateJobFlowOperator?

我正在使用 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.

解决方法很简单。事实上,我只需要通过在创建集群的代码之前添加以下命令来设置默认配置文件:

os.environ["AWS_DEFAULT_PROFILE"] = "my_specific_profile"