aws cli: запуск ssm-сеанса, не работающего с переменной в качестве значения параметра

#bash #amazon-web-services #aws-cli #ssm

#bash #amazon-веб-сервисы #aws-cli #ssm

Вопрос:

Я пытаюсь автоматизировать некоторую часть своей работы, создав функцию bash, которая позволяет мне легко использовать ssm в одном из наших экземпляров. Для этого мне нужно знать только идентификатор экземпляра. Затем я запускаю 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 $1}' | 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.
  

Однако затем я беру этот идентификатор экземпляра и запускаю его напрямую со своего терминала, он работает:

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

Почему это?

Ответ №1:

Вы отправляете идентификатор экземпляра как "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 $1}' | tail -1 | tr -d '"')
  aws ssm start-session --profile AccountProfile --target $instance_id
}
  

Комментарии:

1. Это работает. Однако я заметил кое-что интересное: когда я напрямую запускаю aws ssm start-session команду, я могу заключить строку идентификатора экземпляра в двойные кавычки (даже 2 двойные кавычки), и это работает. Я предполагаю, что это, вероятно, как-то связано с тем, как bash обрабатывает двойные кавычки внутри переменной по сравнению непосредственно с вводом в командной строке.

2. У меня такая же проблема, и я не совсем понимаю решение. Моя ошибка: Произошла ошибка (InternalServerError) при вызове операции StartSession (достигнуто максимальное количество попыток: 4): java.io.IOException: com.ctc.wstx.exc.WstxUnexpectedCharException: недопустимый символ ((CTRL-CHAR, код 27)) в [строке, кол {неизвестный источник}]: [2,42]