Airflow/Amazon EMR:VPC/子网配置无效:需要子网:指定的实例类型 m5.xlarge 只能在 VPC 中使用

alt*_*rse 3 python amazon-web-services amazon-emr apache-spark airflow

我想创建一个通过 Amazon EMR 上的 Airflow 触发的 emr 集群。emr 集群显示在 Amazon EMR 的 UI 中,但显示错误: “VPC/子网配置无效:需要子网:指定的实例类型 m5.xlarge 只能在 VPC 中使用”

json以下是Airflow 脚本中使用的此任务的代码片段和配置详细信息格式。

我的问题是如何将有关 VPC 和子网的信息(id 代码)合并到 json 中(如果可能的话)?那里没有明确的例子。

提示:网络和 EC2 子网已创建

JOB_FLOW_OVERRIDES = {
    "Name": "sentiment_analysis",
    "ReleaseLabel": "emr-5.33.0",
    "Applications": [{"Name": "Hadoop"}, {"Name": "Spark"}], # We want our EMR cluster to have HDFS and Spark
    "Configurations": [
        {
            "Classification": "spark-env",
            "Configurations": [
                {
                    "Classification": "export",
                    "Properties": {"PYSPARK_PYTHON": "/usr/bin/python3"}, # by default EMR uses py2, change it to py3
                }
            ],
        }
    ],
    "Instances": {
        "InstanceGroups": [
            {
                "Name": "Master node",
                "Market": "SPOT",
                "InstanceRole": "MASTER",
                "InstanceType": "m5.xlarge",
                "InstanceCount": 1,
            },
            {
                "Name": "Core - 2",
                "Market": "SPOT", # Spot instances are a "use as available" instances
                "InstanceRole": "CORE",
                "InstanceType": "m5.xlarge",
                "InstanceCount": 2,
            },
        ],
        "KeepJobFlowAliveWhenNoSteps": True,
        "TerminationProtected": False, # this lets us programmatically terminate the cluster
    },
    "JobFlowRole": "EMR_EC2_DefaultRole",
    "ServiceRole": "EMR_DefaultRole",
}

Run Code Online (Sandbox Code Playgroud)
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",
    dag=dag,
)
Run Code Online (Sandbox Code Playgroud)

小智 5

EmrCreateJobFlowOperatorcreate_job_flow来自emr.py的调用,它与boto3 emr client中的相同 api 匹配。

"Ec2SubnetId"因此,您可以将带有您的子网 ID 的项目作为值放入"Instances"字典中。

这对我在 Apache Airflow 2.0.2 上有效