以编程方式生成“实例”定义以在 StepFunctions 中创建 EMR 集群

问题描述

我有一个案例,我想根据用户定义的配置动态创建 EMR 集群,并使用 AWS Step Functions 在其上执行一系列步骤。

为此,我计划提供实例配置作为步骤函数工作流的输入。

基于StepFunctions-EMR Integration Documentation,定义与RunJobFlow API相同。

但是,当我尝试通过将 JobFlowInstancesConfig 的实例序列化为 JSON 并将其作为输入传递给 StateMachine 来生成定义时,它抛出一个错误说:

The field 'Instances.KeepJobFlowAliveWhenNoSteps' is required but was missing

这是JSON生成的序列化后:

{
    "instanceFleets": [
        {
            "instanceFleetType": "MAIN","targetondemandCapacity": 1,"instanceTypeConfigs": [
                {
                    "instanceType": "m5.xlarge"
                }
            ]
        },{
            "instanceFleetType": "CORE","instanceTypeConfigs": [
                {
                    "instanceType": "c5.2xlarge"
                }
            ]
        }
    ],"keepJobFlowAliveWhenNoSteps": true
}

我在输入中传递它,并在下面任务的 StepFunctions 定义中访问它(我希望上面的定义替换 $.jobFlowInstancesConfig):

...
"GetCluster": {
    "Type": "Task","Resource": "arn:aws:states:::elasticmapreduce:createCluster.sync","Parameters": {
        "Name.$": "$.clusterName","VisibletoAllUsers": true,"ReleaseLabel": "emr-5.30.0","Applications": [
            {
                "Name": "Spark"
            }
        ],"ServiceRole": "EMR_DefaultRole","JobFlowRole": "EMR_EC2_DefaultRole","LogUri": "s3://my-aws-logs/elasticmapreduce/","Instances.$": "$.jobFlowInstancesConfig"
    }
}
...

我怀疑这是失败的,因为 StepFunctions 期望字段名称以大写开头。

问题:如何以编程方式生成适当的定义,而不必使用字符串来生成 JSON?有没有一种直接的方法可以将上述定义序列化为可以与 StepFunctions 一起使用的定义?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)