AWS CDK步骤函数EcsRunTask使用输入变量定义任务



我正试图将我在JSON中转换为CDK (Typescript)的步骤函数,但我不确定如何从上一步引用输入变量。

My existing Step Function Task:

"Start Task": {
"Type": "Task",
"Resource": "arn:aws:states:::ecs:runTask.sync",
"Parameters": {
"LaunchType": "EC2",
"Cluster": "my cluster arn",
"TaskDefinition.$": "$.task"
},
"Next": "Task Success",
"Catch": [
{
"ErrorEquals": [
"States.ALL"
],
"Next": "Task Failure"
}
]
}

我如何在CDK中做"TaskDefinition.$": "$.task"?或者如果我使用CDK,我是否必须指定要运行的任务定义,而不是让输入决定?

任何帮助都将非常感激。谢谢!

CDK aws_stepfunctions_tasks模块有几种方法可以将ECS任务添加到步骤函数中:

EcsRunTask:添加ECS RunTask优化集成,但不接受导入的ARN作为任务定义。有一个开放的特性请求解释了为什么不可以。支持.sync(RUN_JOB)

CallAwsService:相当于Step Functions AWS SDK集成的CDK。您可以传递$.task作为任务定义ARN,但不能使用.sync模式。

要为任务定义使用输入变量并等待.sync的响应,您将需要动手并子类化TaskStateBase构造。您必须自己处理IAM权限。下面是一个最小的实现:

export class RunEcsTaskAtPath extends sfn.TaskStateBase {
protected readonly taskMetrics?: sfn.TaskMetricsConfig;
protected readonly taskPolicies?: iam.PolicyStatement[];
constructor(scope: Construct, id: string, private readonly props: TaskStateBaseProps) {
super(scope, id, props);

this.taskPolicies = [
// add the required policies:
//    https://docs.aws.amazon.com/step-functions/latest/dg/ecs-iam.html
// see also the `EcsRunTaskBase` `makePolicyStatements` method_
//    https://github.com/aws/aws-cdk/blob/main/packages/%40aws-cdk/aws-stepfunctions-tasks/lib/ecs/run-ecs-task-base.ts
];
}
protected _renderTask(): any {
return sfn.FieldUtils.renderObject({
Resource: 'arn:aws:states:::ecs:runTask.sync',
Parameters: {
LaunchType: 'EC2',
Cluster: 'my cluster arn',
TaskDefinition: sfn.JsonPath.stringAt('$.task'),
// other config: https://docs.aws.amazon.com/step-functions/latest/dg/connect-ecs.html
},
});
}
}

注意使用了CDK JsonPath帮助程序。这是可选的。您也可以硬编码状态机语法('TaskDefinition.$': '$.task')。

最新更新