Запустить служебный скрипт с помощью AWS CLI?

Я пытаюсь настроить экземпляр EC2 с автоматической связью с определенным AWS SQS во время загрузки экземпляра. Для этого я написал сценарий запуска systemd, который выполнит сценарий оболочки.

[Unit]
Description=NewUnit

[Service]
ExecStart=/usr/local/bin/startup_script.sh

[Install]
WantedBy=default.target

Сценарий оболочки в основном измеряет использование ЦП экземпляром и отправляет эту информацию в очередь. Критическая часть, из-за которой мой план проваливается, - это строка, в которой я пытаюсь вызвать функцию aws cli 'send-message':

while true; do
CONTENT='{"vmid":{"DataType":"String","StringValue":"'$(getEC2ID)'"},"vmcpu":{"DataType":"Number","StringValue":"'$(getCPU)'"},"vmmemory":{"DataType":"Number","StringValue":"'$(getMemory)'"},"vmdisk":{"DataType":"Number","StringValue":"12345"}}'

aws sqs send-message \
    --queue-url "$QUEUE_URL" \
    --message-body "$CONTENT" \
    --message-group-id "$GROUP_ID" \
    --message-deduplication-id "$(getID)" \
#    --message-attributes "$CONTENT" \ || echo "not yet" >>/usr/local/bin/startup_report.txt
done

Я предполагаю, что проблема в том, что awscli еще не готов, когда скрипт выполняется. Итак, мой вопрос на данный момент: как я могу использовать systemd, чтобы дождаться, пока awscli выполнит этот сценарий оболочки впоследствии?


person nymvno    schedule 26.02.2019    source источник
comment
Что заставляет вас думать, что awscli еще не готов, когда скрипт выполняется? Вы получаете сообщение об ошибке?   -  person John Rotenstein    schedule 26.02.2019
comment
@ A.Ka, почему ты не можешь создать для этого будильник в облаке?   -  person titogeo    schedule 26.02.2019
comment
@JohnRotenstein Я зарегистрировал выполненные строки сценария оболочки и обнаружил, что последняя, ​​похоже, находится прямо перед строкой с командой awscli   -  person nymvno    schedule 26.02.2019
comment
Было бы полезно обнаружить ошибку, прежде чем делать предположения о том, что она не готова. В качестве сценария запуска вы можете использовать Выполнение команд на вашем экземпляре Linux при запуске - Amazon Elastic Compute Cloud.   -  person John Rotenstein    schedule 26.02.2019


Ответы (1)


То, как вы написали свой служебный файл, не определяет никаких требований или порядка. Это позволяет systemd запускать его в любое время. В частности, до того, как сеть заработает, может пройти много времени, как это было в случае с моим скриптом, использующим aws cli. Добавьте следующую директиву в раздел Unit вашего файла:

After=network.target

... заставит его работать после того, как сеть заработает. Если это не сработает для вас, вы можете изменить его на:

After=network-online.target

... что должно гарантировать полную работу сети при запуске вашего скрипта.

person Jacek Prucia    schedule 27.02.2020