【问题标题】:An error occurred (NoSuchChange) when calling the GetChange operation [closed]调用 GetChange 操作时发生错误(NoSuchChange)[关闭]
【发布时间】:2020-10-16 10:16:56
【问题描述】:

我有以下 bash 脚本:

#!/bin/sh
# Update the DNS

RECORD=$1
if [ -z "${RECORD}" ]; then
    echo "Please provide a valid record (URL endpoint)"
    exit 1
fi

ID=$(aws route53 change-resource-record-sets --hosted-zone-id ZONEID --cli-input-json "{\"HostedZoneId\":\"Z1R8UBAEXAMPLE\",\"ChangeBatch\":{\"Changes\":[{\"Action\":\"UPSERT\",\"ResourceRecordSet\":{\"Name\":\"www.domain.tld.\",\"Type\":\"CNAME\",\"TTL\":300,\"ResourceRecords\":[{\"Value\":\"${RECORD}\"}]}}]}}" | grep "/change/" | cut -c 15- | sed -e 's/"//g' | sed 's/\(.*\),/\1 /'))
echo "Change ID: ${ID}"
aws route53 get-change --id ${ID} | grep INSYNC
while [ $? -ne 0 ]
do
    echo "WAITING FOR DNS TO UPDATE... PLEASE WAIT"
    sleep 5s
    aws route53 get-change --id ${ID} | grep INSYNC
done

由于某种原因,返回的ID 在末尾附加了一个,,即使我已经用| grep "/change/" | cut -c 15- | sed -e 's/"//g' | sed 's/\(.*\),/\1 /') 明确删除了它

我也尝试了| jq -r '.ChangeInfo.Id',但, 仍被附加到ID

我错过了什么?

非常感谢任何建议

【问题讨论】:

  • aws route53 命令的 JSON 输出是什么?为什么必须用双引号将 JSON 存储复杂化并转义?使用单引号 - '{"HostedZoneId":"Z1R8UBAEXAMPLE","ChangeBatch":{"Changes":[{"Action":"UPSERT","ResourceRecordSet":{"Name":"www.domain.tld.","Type":"CNAME","TTL":300,"ResourceRecords":[{"Value":""}]}}]}}'
  • 来自文档docs.aws.amazon.com/cli/latest/reference/route53/… 它是一个 JSON 对象
  • 那么 | jq -r '.ChangeInfo.Id' 应该可以正常工作。您是否错误地将jq 的输出再次传送回sed?请发布 JSON 输出,没有它,很难解释为什么你会看到这个问题
  • { "ChangeInfo": { "Status": "PENDING", "SubmittedAt": "2020-10-16T10:45:56.841Z", "Id": "/change/C0155693NNXR37X9226V" } } 所以是的jq -r '.ChangeInfo.Id' 应该可以工作,但由于某种原因它附加了一个,
  • 这不可能发生,除非您仍然像最初发布的那样将sed 命令通过管道传输到 jq 的输出

标签: bash amazon-web-services sed jq aws-cli


【解决方案1】:

您可以使用--output optionwait command 来简化此操作

你可以做这样的事情(未测试)

ID=$(aws route53 change-resource-record-sets \
    --hosted-zone-id ZONEID \
    --cli-input-json "{\"HostedZoneId\":\"Z1R8UBAEXAMPLE\",\"ChangeBatch\":{\"Changes\":[{\"Action\":\"UPSERT\",\"ResourceRecordSet\":{\"Name\":\"www.domain.tld.\",\"Type\":\"CNAME\",\"TTL\":300,\"ResourceRecords\":[{\"Value\":\"${RECORD}\"}]}}]}}" \
    --query 'ChangeInfo.Id' \
    --output text)

aws route53 wait resource-record-sets-changed --id $ID
    

【讨论】:

    猜你喜欢
    • 2020-01-16
    • 2020-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-08
    • 2018-06-08
    • 2018-04-12
    • 2020-01-19
    相关资源
    最近更新 更多