【问题标题】:How to pass a variable to EMR addStep in AWS StepFunctions如何在 AWS StepFunctions 中将变量传递给 EMR addStep
【发布时间】:2020-01-10 10:53:54
【问题描述】:

AWS Stepfunctions 最近添加了 EMR 集成,这很酷,但我找不到将变量从 step 函数传递到 addstep args 的方法。 例如,我想将“$.dayid”变量传递给“Parameters”>“Step”>“HadoopJarStep”>Args。类似于 "ClusterId.$": "$.ClusterId" (这个集群 id 变量有效)。

{
    "Step_One": {
    "Type": "Task",
    "Resource": "arn:aws:states:::elasticmapreduce:addStep.sync",
    "Parameters": {
        "ClusterId.$": "$.ClusterId",
        "Step": {
            "Name": "The first step",
            "ActionOnFailure": "CONTINUE",
            "HadoopJarStep": {
                "Jar": "command-runner.jar",
                "Args": [
                    "hive-script",
                    "--run-hive-script",
                    "--args",
                    "-f",
                    "s3://<region>.elasticmapreduce.samples/cloudfront/code/Hive_CloudFront.q",
                    "-d",
                    "INPUT=s3://<region>.elasticmapreduce.samples",
                    "-d",
                    "OUTPUT=s3://<mybucket>/MyHiveQueryResults/$.dayid"
                ]
            }
        }
    },
    "End": true
}

【问题讨论】:

    标签: amazon-emr aws-step-functions


    【解决方案1】:

    参数允许您定义键值对,因此“Args”键的值是一个数组,您将无法动态引用数组中的特定元素,您需要引用整个代替数组。例如“Args.$”:“$.Input.ArgsArray”。话虽如此,您也无法像在 "OUTPUT=s3:///MyHiveQueryResults/$.dayid" 中尝试在字符串中引用替换值

    因此,对于您的用例,实现此目的的最佳方法是在调用此状态之前添加一个预处理状态。在预处理状态下,我建议您调用 Lambda 函数来构造字符串“OUTPUT=s3:///MyHiveQueryResults/$.dayid”以及发送到 Args 的完整数组。

    {
        "StartAt": "Pre-Process",
        "States": {
            "Pre-Process": {
                "Type": "Task",
                "Resource": "<Lambda function to generate the string OUTPUT=s3://<mybucket>/MyHiveQueryResults/$.dayid and output the Args array>",
                "Next": "Step_One"
            },
            "Step_One": {
                "Type": "Task",
                "Resource": "arn:aws:states:::elasticmapreduce:addStep.sync",
                "Parameters": {
                    "ClusterId.$": "$.ClusterId",
                    "Step": {
                        "Name": "The first step",
                        "ActionOnFailure": "CONTINUE",
                        "HadoopJarStep": {
                            "Jar": "command-runner.jar",
                            "Args.$": "$.ArgsGeneratedByPreProcessingState"
                        }
                    }
                },
                "End": true
            }
        }
    }
    

    【讨论】:

    • 2020 年 8 月发布了对步进函数的更新,它应该允许动态构建数组,包括在步进函数状态中使用对元素的引用。 aws.amazon.com/blogs/aws/…
    猜你喜欢
    • 2020-12-29
    • 2021-03-10
    • 2020-07-24
    • 1970-01-01
    • 2014-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-25
    相关资源
    最近更新 更多