如何将stepfunctionexecutionId解析为SageMaker批量转换作业名称?

2024-06-20

我创建了一个步骤函数,该状态机的定义如下(step-function.json) 在 terraform 中使用(使用本页中的语法:https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html)

如果我第一次执行此状态机,它将创建一个名为的 SageMaker 批量转换作业example-jobname,但是我需要每天执行这个状态机,那么它会给我错误"error": "SageMaker.ResourceInUseException", "cause": "Job name must be unique within an AWS account and region, and a job with this name already exists .

原因是因为作业名称被硬编码为example-jobname因此,如果状态机在第一次之后执行,由于作业名称需要唯一,任务将会失败,只是想知道如何添加一个字符串(例如作业名称末尾的 ExecutionId 之类的字符串)。这是我尝试过的:

  1. I added "executionId.$": "States.Format('somestring {}', $$.Execution.Id)" in the Parametersjson 文件中的部分,但是当我执行任务时出现错误 "error": "States.Runtime", "cause": "An error occurred while executing the state 'SageMaker CreateTransformJob' (entered at the event id #2). The Parameters '{\"BatchStrategy\":\"SingleRecord\",..............\"executionId\":\"somestring arn:aws:states:us-east-1:xxxxx:execution:xxxxx-state-machine:xxxxxxxx72950\"}' could not be used to start the Task: [The field \"executionId\" is not supported by Step Functions]"}

  2. 我将json文件中的jobname修改为"TransformJobName": "example-jobname-States.Format('somestring {}', $$.Execution.Id)",,当我执行状态机时,它给了我错误:"error": "SageMaker.AmazonSageMakerException", "cause": "2 validation errors detected: Value 'example-jobname-States.Format('somestring {}', $$.Execution.Id)' at 'transformJobName' failed to satisfy constraint: Member must satisfy regular expression pattern: ^[a-zA-Z0-9](-*[a-zA-Z0-9]){0,62}; Value 'example-jobname-States.Format('somestring {}', $$.Execution.Id)' at 'transformJobName' failed to satisfy constraint: Member must have length less than or equal to 63

我真的没有想法了,有人可以帮忙吗?非常感谢。


所以根据文档 https://docs.aws.amazon.com/step-functions/latest/dg/sample-train-model.html#sample-train-model-code-examples,我们应该按以下格式传递参数

        "Parameters": {
            "ModelName.$": "$$.Execution.Name",  
            ....
        },

如果您仔细查看,您的定义中缺少一些内容,因此您的步骤函数定义应该如下所示:

either

      "TransformJobName.$": "$$.Execution.Id",

OR

      "TransformJobName.$: "States.Format('mytransformjob{}', $$.Execution.Id)"

完整的状态机定义:

    {
        "Comment": "Defines the statemachine.",
        "StartAt": "Generate Random String",
        "States": {
            "Generate Random String": {
                "Type": "Task",
                "Resource": "arn:aws:lambda:eu-central-1:1234567890:function:randomstring",
                "ResultPath": "$.executionid",
                "Parameters": {
                "executionId.$": "$$.Execution.Id"
                },
                "Next": "SageMaker CreateTransformJob"
            },
        "SageMaker CreateTransformJob": {
            "Type": "Task",
            "Resource": "arn:aws:states:::sagemaker:createTransformJob.sync",
            "Parameters": {
            "BatchStrategy": "SingleRecord",
            "DataProcessing": {
                "InputFilter": "$",
                "JoinSource": "Input",
                "OutputFilter": "xxx"
            },
            "Environment": {
                "SAGEMAKER_MODEL_SERVER_TIMEOUT": "300"
            },
            "MaxConcurrentTransforms": 100,
            "MaxPayloadInMB": 1,
            "ModelName": "${model_name}",
            "TransformInput": {
                "DataSource": {
                    "S3DataSource": {
                        "S3DataType": "S3Prefix",
                        "S3Uri": "${s3_input_path}"
                    }
                },
                "ContentType": "application/jsonlines",
                "CompressionType": "Gzip",
                "SplitType": "Line"
            },
            "TransformJobName.$": "$.executionid",
            "TransformOutput": {
                "S3OutputPath": "${s3_output_path}",
                "Accept": "application/jsonlines",
                "AssembleWith": "Line"
            },    
            "TransformResources": {
                "InstanceType": "xxx",
                "InstanceCount": 1
            }
        },
            "End": true
        }
        }
    }

在上面的定义中,lambda 可以是一个解析我通过参数部分传递的执行 id arn 的函数:

 def lambda_handler(event, context):
    return(event.get('executionId').split(':')[-1])

或者,如果您不想通过执行 if ,它可以简单地返回随机字符串,例如

 import string
 def lambda_handler(event, context):
    return(string.ascii_uppercase + string.digits)

您可以生成各种随机字符串,或者在 lambda 中生成任何内容并将其传递给转换作业名称。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将stepfunctionexecutionId解析为SageMaker批量转换作业名称? 的相关文章

随机推荐

  • 从 UIPickerView 的选定行设置 UIButton 的标题

    详细场景是这样的 我使用循环创建 10 个按钮并设置 0 9 的标签 点击每个按钮时 我将调用 UIPickerView 在其中加载来自不同数组的数据 到这里我就得到了预期的结果 但我希望 pickerView 中选定的行应设置为相应按钮的
  • 当请求输入无效时,控制器周围的 Spring AOP 不起作用

    我已经使用编写了一个请求 响应记录器 Around Around value execution com xyz example controller public Object logControllers ProceedingJoinP
  • 如何从 SQL Server 2008 查询结果中删除“NULL”

    我有一个包含 59 列和超过 17K 行的表 很多行都有NULL在某些列中 我想删除NULL以便查询返回空白 而不是NULL 我可以运行一些更新功能来替换所有NULL with 使用 SQL Server 2008R2 Management
  • 使用 iframe 显示静态文本内容

    我有一个非常简单的要求 我有一个 div 我在其中显示一些文本内容的标签 我想在一个中显示相同的文本内容 我想要实现的目标已写在下面 有人可以帮忙吗 b div This is a content which I want to displ
  • Ninject Providers -> 在提供程序中获取另一个依赖项

    我想知道这里的最佳实践是什么 我需要为我的多租户应用程序构建一个 DbContext 因此我创建了一个如下所示的依赖项提供程序 public class TenantContextFactoryProvider Provider
  • Avro ENUM 字段

    我正在尝试在 Avro 模式中创建 Union 字段并用它发送相应的 JSON 消息 但要拥有其中一个字段 null https avro apache org docs 1 8 2 spec html Unions https avro
  • 设置文本视图 Android 的文本颜色

    在 string xml 文件中我使用以下标签
  • 我的 win32 程序应该在哪里保存其文件?

    我们的 win32 应用程序 用 C 编写 已经存在了 10 多年 并且尚未更新以遵循文件保存位置方面的 良好实践 应用程序默认安装在 C AppName 文件夹中 并将应用程序生成的文件 配置文件 下载的文件和保存的用户文档保存在该文件夹
  • 打字稿中的递归未定义

    我在组件内使用画布对象来生成图表 为了使其动画化 我递归地调用该方法 我不断收到错误消息 指出该方法未定义 不确定我需要如何构建它 任何帮助表示赞赏 Animate function protected animate draw to Cl
  • Open 方法仅使用完整路径打开文件 C++

    如果我写入完整路径 完整路径 roots txt 文件将打开 如果我只写文件名 roots txt 文件将无法打开 然而 roots txt 与 main cpp 位于同一文件夹中 我应该检查 XCode 上的任何设置吗 这是代码 stri
  • 从 X、Y、Z 数据、Excel 或其他工具进行 3D 绘图

    我的数据看起来像这样 1000 13 75 2 1000 21 79 21 1000 29 80 02 5000 29 87 9 5000 37 88 54 5000 45 88 56 10000 29 90 11 10000 37 90
  • 如何使用自定义比较器以不同的词汇顺序对数组进行排序?

    所以 我对 C 还很陌生 我正在尝试使用自定义比较器来订购数组 我创建了一个类 class MySorter IComparer public int Compare object x object y var chars jngmclqs
  • React-native-vision-camera无法访问后面的普通摄像头

    我正在尝试在 iPhone 11 Pro 上使用 普通 相机 我使用反应本机视觉相机 当我运行这段代码时 const devices useCameraDevices const deviceBack devices back consol
  • 设置图表的标签和值

    我正在使用创建饼图JFreeChart 我想像中一样单独设置值和标签iReport 换句话说 我希望图表在饼图上显示与图例中不同的结果 有什么办法可以实现这个目标吗 The MessageFormat 参数索引值对应于系列名称 domain
  • 如何识别拼写不同的相似单词

    我想从数据库中过滤掉重复的客户名称 一位客户可能有多个同名但拼写差异不大的系统条目 这是一个示例 名为 Brook 的客户可能有 3 个系统条目 有了这个变化 布鲁克 贝尔塔 布鲁克 贝尔塔 比鲁克 贝尔塔 假设我们将此名称放入一个数据库列
  • GET 和 POST 方法有什么区别? [复制]

    这个问题在这里已经有答案了 可能的重复 什么时候用POST 什么时候用GET https stackoverflow com questions 46585 when do you use post and when do you use
  • 读取 BCP 格式文件时发生 I/O 错误

    今天 我创建了一个新的临时表和一个 BCP fmt 文件 我创建了一些测试数据并尝试从命令行运行 BCP 实用程序 我从之前的工作中获得了大约 20 个不同格式的文件和暂存表 这是我第一次遇到此错误 我该如何修复这个错误 请注意 我在下面添
  • 404因为重新启动webpack-dev-server

    当我尝试更改反应组件并保存它以查看热加载器是否更新了我的页面时 我在开发人员工具中得到了这个 GET http localhost 3000 public bundle 76566a1ad7e45b834d4e hot update jso
  • 使用 实现可访问性的更好做法是什么?

    我有一个下载链接 但我找不到任何良好的可访问解决方案来说明如何处理这种情况 我遵循一个共同的经验法则 按钮做事 链接去地方 我的情况是 我有一个触发文档下载的按钮 同一页面 我相信这应该是一个具有按钮角色的锚点 因为它明确不触发重定向或导航
  • 如何将stepfunctionexecutionId解析为SageMaker批量转换作业名称?

    我创建了一个步骤函数 该状态机的定义如下 step function json 在 terraform 中使用 使用本页中的语法 https docs aws amazon com sagemaker latest APIReference