尝试运行第二个命令时,在 bash 脚本中运行 AWS 服务会产生错误,我做错了吗?

Posted

技术标签:

【中文标题】尝试运行第二个命令时,在 bash 脚本中运行 AWS 服务会产生错误,我做错了吗?【英文标题】:Running AWS services in bash script creates an error when trying to run the second command, am I doing something wrong? 【发布时间】:2021-07-07 06:50:19 【问题描述】:

所以我有一个 bash 脚本,它运行一些 AWS 命令​​来启动 ECS 服务,然后我想向它附加一些自动缩放策略,但我收到了一个错误。我不确定这是否与 AWS 服务 CLI 有任何关系,或者我在 bash 中运行不正确,根据 AWS 文档,语法上看起来不错。

代码如下:

aws ecs create-service \
      --cluster $1 \
      --service-name $2 \
      --task-definition $3:$4 \
      --desired-count $DESIRED_COUNT \
      --launch-type FARGATE \
      --platform-version LATEST \
      --network-configuration "awsvpcConfiguration=subnets=[$SUBNETS[0]$SUBNETS[1]$SUBNETS[2]],securityGroups=[$SECURITY_GROUPS],assignPublicIp=ENABLED" \
      --service-registries registryArn=$SERVICE_DISCOVERY_ARN \
      --load-balancers targetGroupArn=$BACKEND_TARGETGROUP,containerName=$BACKEND_CONTAINERNAME,containerPort=$BACKEND_CONTAINERPORT \
      --profile $PROFILE

    echo "============ Now creating $2 service auto-scaling policies ============"
    aws application-autoscaling register-scalable-target \
      --service-namespace ecs \
      --scalable-dimension ecs:service:DesiredCount \
      --resource-id "service/$CLUSTER/$BACKEND_SERVICE" \
      --min-capacity $MINIMUM_APP_COUNT --max-capacity $MAXIMUM_APP_COUNT
    
    aws application-autoscaling put-scaling-policy 
      --service-namespace ecs \
      --scalable-dimension ecs:service:DesiredCount \
      --resource-id "service/$CLUSTER/$BACKEND_SERVICE" \
      --policy-name "$CLUSTER_scale_up" --policy-type StepScaling \
      --step-scaling-policy-configuration file://stepScalingUpPolicy.json
    
    aws application-autoscaling put-scaling-policy 
      --service-namespace ecs \
      --scalable-dimension ecs:service:DesiredCount \
      --resource-id "service/$CLUSTER/$BACKEND_SERVICE" \
      --policy-name "$CLUSTER_scale_down" --policy-type StepScaling \
      --step-scaling-policy-configuration file://stepScalingDownPolicy.json

运行第一个 aws 服务后,我的管道上的图像出现错误。 [1]:https://i.stack.imgur.com/5PxBW.png

【问题讨论】:

我注意到您有许多问题的答案,但没有一个答案被接受。如果他们都不好,那也没关系。但是,如果它们对您有所帮助,那么接受不仅是一种好习惯,而且还可以删除未回答列表中的问题并减少重复问题的数量。 对 SO 还是有点新用户,会去看看调整一下。 【参考方案1】:

您在两个命令后缺少斜杠\。应该是

 aws application-autoscaling put-scaling-policy \

aws application-autoscaling put-scaling-policy \

还要确保\\ 之后没有任何白色字符(空格或制表符)。

【讨论】:

是的,我明白这一点,实际上我没有这个,因为 AWS 文档不需要它,但是看看别的东西;答案可能是这样的:aws autoscaling put-scaling-policy --policy-name alb1000-target-tracking-scaling-policy \ 在服务声明后添加策略名称可能是答案,会让您知道结果 - 还会检查额外的空格。 @narliecholler 没问题,但你仍然应该有斜线,就像你的前两个命令一样。 @narliecholler 你在请求命令时缺少斜线,就像我在答案中写的第一行之后。这是关于多行中断命令,而不是链接它们。 我可以确认它现在可以工作了,我在查找本地文件来配置缩放配置时也遇到了错误,但我将其更改为内联。谢谢。

以上是关于尝试运行第二个命令时,在 bash 脚本中运行 AWS 服务会产生错误,我做错了吗?的主要内容,如果未能解决你的问题,请参考以下文章

函数内部 sed 命令中的 bash 语法错误,在命令行上工作正常

通过桌面图标运行 bash 脚本时找不到节点命令

如何从上一个 bash 命令中获取倒数第二个参数? (在交互式 bash shell 中)

无法从 BASH 脚本中运行 psql 命令

使用 git bash 运行 bash 脚本时出现“找不到免费命令”

用于打开外壳、在外壳中运行命令并保持外壳运行的 Bash 脚本