gpt4 book ai didi

aws-cloudformation - 从 CFN 模板在本地动态创建 Step Function 状态机

转载 作者:行者123 更新时间:2023-12-03 07:39:26 25 4
gpt4 key购买 nike

目标

我正在尝试从生成的 Cloud Formation (CFN) 模板在本地动态创建状态机。我需要能够在不部署到 AWS 账户或手动创建定义字符串的情况下执行此操作。

问题

如何将 CFN 模板“构建”为可在本地使用的定义字符串?

我原来的目标有可能实现吗?如果没有,其他人如何在本地成功测试 SFN?

设置

我正在使用云开发套件 (CDK) 编写状态机定义,并使用 cdk Synth 生成 CFN json 模板。我已经关注了instructions from AWS here创建本地 Docker 容器来托管 Step Functions (SFN)。我能够使用 AWS CLI 在本地 SFN Docker 实例上成功创建、运行状态机等。我还托管一个 DynamoDB Docker 实例,并使用 sam local start-lambda 来托管我的 lambda。这一切都按预期工作。

为了使本地测试更容易,我编写了一系列 bash 脚本来动态解析 CFN 模板并通过调用 AWS CLI 创建 json 输入文件。当编写没有引用(没有 lambda、来自其他堆栈的资源等)的简单状态机时,这可以成功工作。当我想创建和测试更复杂的状态机时,就会出现问题。我生成的 CFN 模板中的状态机 DefinitionString 看起来像:

{'Fn::Join': ['', ['{
"StartAt": "Step1",
"States": {
{
"StartAt": "Step1",
"States": {
"Step1": {
"Next": "Step2",
"Retry": [
{
"ErrorEquals": [
"Lambda.ServiceException",
"Lambda.AWSLambdaException",
"Lambda.SdkClientException"
],
"IntervalSeconds": 2,
"MaxAttempts": 6,
"BackoffRate": 2
}
],
"Type": "Task",
"Resource": "arn:', {'Ref': 'AWS::Partition'}, ':states:::lambda:invoke",
"Parameters": {
"FunctionName": "', {'Fn::ImportValue': 'OtherStackE9E150CFArn77689D69'}, '",
"Payload.$": "$"
}
},
"Step2": {
"Next": "Step3",
"Retry": [
{
"ErrorEquals": [
"Lambda.ServiceException",
"Lambda.AWSLambdaException",
"Lambda.SdkClientException"
],
"IntervalSeconds": 2,
"MaxAttempts": 6,
"BackoffRate": 2
}
],
"Type": "Task",
"Resource": "arn:', {'Ref': 'AWS::Partition'}, ':states:::lambda:invoke",
"Parameters": {
"FunctionName": "', {'Fn::ImportValue': 'OtherStackE9E150CFArn77689D69'}, '",
"Payload.$": "$"
}
}
}
}
]
},
"TimeoutSeconds": 10800
}']]}

问题

AWS CLI 不支持 json 对象,不支持 'Fn::Join' 等 CFN 函数,并且不允许引用 (定义字符串中的 {'Ref': 'AWS::Partition'})。

最佳答案

这里不会有任何魔法来完成这件事。 CDK 呈现 CloudFormation,而 CloudFormation 并不是真正的 ASL,因为正如您所指出的,它包含对其他资源的引用。

您可以采取的一个方向是将 SFN 部署到沙箱堆栈,并允许 CFN 取消引用所有值并在服务中生成 SFN ASL,然后重新提取该 ASL 进行本地测试。

这很 hacky,但我不知道有任何其他方法可以做到这一点,除非您想开始编写将所有这些 JSON 内在函数(如 Fn:Join)转换为静态字符串的解析。

关于aws-cloudformation - 从 CFN 模板在本地动态创建 Step Function 状态机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73367470/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com