如何连续 运行 aws bash 命令?

How to run aws bash commands consecutively?

如何连续执行以下 bash 个命令?

aws logs create-export-task --task-name "cloudwatch-log-group-export1" \
  --log-group-name "/my/log/group1" \
  --from 1488708419000 --to 1614938819000 \
  --destination "my-s3-bucket" \
  --destination-prefix "my-log-group1"

aws logs create-export-task --task-name "cloudwatch-log-group-export" \
  --log-group-name "/my/log/group2" \
  --from 1488708419000 --to 1614938819000 \
  --destination "my-s3-bucket" \
  --destination-prefix "my-log-group2"

上面的命令我遇到的问题是,第一个命令执行完成后,脚本会卡在下面的状态,导致第二个命令无法访问。

{
    "taskId": "0e3cdd4e-1e95-4b98-bd8b-3291ee69f9ae"
}

看来我应该想办法等待cloudwatch-log-group-export1任务完成

aws-cli 默认自动进入 vim 编辑模式。

你可以通过在执行aws命令之前设置AWS_PAGER环境变量为""来避免它。

export AWS_PAGER=""
aws logs create-export-task...

或者,您可以将其修复到 aws 的配置文件 (~/.aws/config):

[default]
cli_pager=

您可能必须创建一个 waiter 函数,它使用 describe-export-tasks 来获取导出作业的当前状态。

此类函数的示例:

wait_for_export() {

  local sleep_time=${2:-10}    

  while true; do

    job_status=$(aws logs describe-export-tasks \
                    --task-id  \
                    --query "exportTasks[0].status.code" \
                    --output text)

    echo ${job_status}

    [[ $job_status == "COMPLETED" ]] && break

    sleep ${sleep_time}

  done  
}

那你就用它:

task_id1=$(aws logs create-export-task \
  --task-name "cloudwatch-log-group-export1" \
  --log-group-name "/my/log/group1" \
  --from 1488708419000 --to 1614938819000 \
  --destination "my-s3-bucket" \
  --destination-prefix "my-log-group1" \
  --query 'taskId' --output text)


wait_for_export ${task_id1}

# second export