aws cli:ssm 启动会话不使用变量作为参数值

aws cli: ssm start-session not working with a variable as a parameter value

我正在尝试通过创建一个 bash 函数使我的部分工作自动化,让我可以轻松地通过 ssm 进入我们的一个实例。为此,我只需要知道实例 ID。然后我 运行 aws ssm start-session 使用正确的配置文件。这是函数:

function ssm_to_cluster() {
  local instance_id=$(aws ec2 describe-instances --filters \
    "Name=tag:Environment,Values=staging" \
    "Name=tag:Name,Values=my-cluster-name" \
    --query 'Reservations[*].Instances[*].[InstanceId]' \
    | grep i- | awk '{print }' | tail -1)
  aws ssm start-session --profile AccountProfile --target $instance_id
}

当我运行这个函数时,我总是得到如下错误:

An error occurred (TargetNotConnected) when calling the StartSession operation: "i-0599385eb144ff93c" is not connected.

但是,然后我直接从我的终端获取实例 ID 和 运行,它有效:

aws ssm start-session --profile MyProfile --target i-0599385eb144ff93c

这是为什么?

您发送的实例 ID 为 "i-0599385eb144ff93c" 而不是 i-0599385eb144ff93c

修改后的功能应该可以工作 -

function ssm_to_cluster() {
  local instance_id=$(aws ec2 describe-instances --filters \
    "Name=tag:Environment,Values=staging" \
    "Name=tag:Name,Values=my-cluster-name" \
    --query 'Reservations[*].Instances[*].[InstanceId]' \
    | grep i- | awk '{print }' | tail -1 | tr -d '"')
  aws ssm start-session --profile AccountProfile --target $instance_id
}