如何解决在本地运行“aws stepfunctions”时如何使用状态机 ASL 文件进行定义
AWS var c = document.createElement("canvas")
var ctx = c.getContext("2d");
const em = 16;
c.width = em;
c.height = em;
["\uFFFF","\uFFFF\uFFFF","?","☺","☹","☠","?"].forEach(e => console.log(e + ":using center pixel:" + supports(e) + ",using checksum:" + supports2(e) + ",using toDataURL:" + supports3(e)));
//using center pixel detection
function supports(e) {
let ctx = document.createElement("canvas").getContext("2d");
ctx.fillText(e,-2,4);
return ctx.getimageData(0,1,1).data[3] > 0; // Not a transparent pixel
}
//using checksum method
function supports2(e) {
//https://en.wikipedia.org/wiki/Specials_(Unicode_block) (NON-Character)
var unsupported = ["\uFFFF","\uFFFF\uFFFF"].map(b => {
ctx.clearRect(0,em,em);
ctx.fillText(b,em);
let d = ctx.getimageData(0,em).data
let sum = d.reduce((acc,cur) => {
return acc + cur
})
return sum
});
ctx.clearRect(0,em);
ctx.fillText(e,em);
let d = ctx.getimageData(0,em).data
let sum = d.reduce((acc,cur) => {
return acc + cur
})
return !unsupported.some(b => b == sum)
}
//using toDataURL() method
function supports3(e) {
ctx.clearRect(0,em);
let emo = c.toDataURL()
ctx.clearRect(0,em);
ctx.fillText('\uFFFF',em);
let bad1 = c.toDataURL()
ctx.clearRect(0,em);
ctx.fillText('\uFFFF\uFFFF',em);
let bad2 = c.toDataURL()
return (emo != bad1) && (emo != bad2)
}
和 sam
环境中是否可以使用与 SAM 项目中定义的相同的 json 文件在本地调用 SAM 步骤函数?
我正在尝试在本地调用 AWS“Stock Trade”示例中的示例 step 函数,但提供 .asl.json 文件的 filename 而不是手动重新创建 json(为了 de -引用变量名)并将其粘贴到命令行中。
我有两个必需的 docker 容器正在运行,例如
aws
和
sam local start-lambda
在单独的 Mac 终端窗口中运行。
步进函数定义在文件docker run -p 8083:8083 amazon/aws-stepfunctions-local
问题是,我能找到的 100% 的指南只是重复了相同的 AWS 示例,该示例通过 stdin 而不是文件名创建状态机。
虽然我找不到任何记录在案的例子,但我凭直觉发现我可以通过使用 statemachine/stock_Trader.asl.json
来提供一个 json 文件,例如
--deFinition file://PATH/FILE
但是,这(自然地)只是插入文字 json 文件...例如,使用变量名称(例如 aws stepfunctions --endpoint http://localhost:8083 create-state-machine \
--deFinition file://statemachine/stock_Trader.asl.json \
--name StockTradingStateMachine --role-arn "arn:aws:iam::012345678901:role/DummyRole"
)而不是资源的本地 ARN。
有什么办法可以取消引用json文件中的变量名?还是我们必须手动创建(和维护)重复的 json 文件,并为每个引用的资源手动替换“本地”ARN?
解决方法
我希望有更好的解决方案出现,但这是我目前所做的......
我在 Bash 脚本中调用状态机,它调用 sed 手动将通用模板重写到 json 文件中,参数替换为 bash 脚本中指定的值
这是一个小的单变量示例:
$template_source=template.json
$sm_actual=ready_to_use.json # a "runable" tmp file with placeholders replaced with actual variable names
$sm_function_tag=REPLACEMENT_TEXT
$sm_name=MyFunctionName
$sm_arn=arn:aws:states:us-east-1:MYACCOUNT:stateMachine:$sm_name
# THIS creates the de-referenced json file
# (can have 5 -e params if replacing 5 placeholders)
sed -e "s/REPLACEME/$sm_function_tag/" ./statemachine/$template_source > ./statemachine/$sm_actual || exit 2
# THIS copies the file into a bash variable
json_text=$(cat ./statemachine/$sm_actual)
# This supplies the de-referenced json file contents to the `--definition` parameter:
aws stepfunctions CMD-INVOKE-UPLOAD-WHATEVER \
--no-cli-pager \
--state-machine-arn $sm_arn \
--role-arn $sm_role_arn \
--definition "$json_text" \
--profile AWS-PROFILE-TO-USE || exit 2
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。