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, 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, 0, em, em);
ctx.fillText(b, 0, em);
let d = ctx.getImageData(0, 0, em, em).data
let sum = d.reduce((acc, cur) => {
return acc + cur
})
return sum
});
ctx.clearRect(0, 0, em, em);
ctx.fillText(e, 0, em);
let d = ctx.getImageData(0, 0, em, 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, 0, em, em);
ctx.fillText(e, 0, em);
let emo = c.toDataURL()
ctx.clearRect(0, 0, em, em);
ctx.fillText('\uFFFF', 0, em);
let bad1 = c.toDataURL()
ctx.clearRect(0, 0, em, em);
ctx.fillText('\uFFFF\uFFFF', 0, 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?
答案 0 :(得分:0)
我希望有更好的解决方案出现,但这是我目前所做的......
我在 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