|
32 | 32 | set -eu
|
33 | 33 |
|
34 | 34 | REGION_SEPARATOR='--'
|
35 |
| -MAX_ITERATION=5 |
36 |
| -SLEEP_DURATION=5 |
| 35 | +START_INSTANCE_TIMEOUT=300 |
| 36 | +START_INSTANCE_CHECK_INTERVAL=5 |
37 | 37 |
|
38 | 38 | ec2_instance_id="$1"
|
39 | 39 | ssh_user="$2"
|
|
48 | 48 | ec2_instance_id="${ec2_instance_id%%${REGION_SEPARATOR}*}"
|
49 | 49 | fi
|
50 | 50 |
|
51 |
| -function start_instance(){ |
52 |
| - # Instance is offline - start the instance |
53 |
| - >/dev/stderr echo "\n🚀 Starting ec2 Instance ${ec2_instance_id}" |
54 |
| - aws ec2 start-instances --instance-ids $ec2_instance_id --profile ${AWS_PROFILE} --region ${AWS_REGION} |
55 |
| - sleep ${SLEEP_DURATION} |
56 |
| - COUNT=0 |
57 |
| - >/dev/stderr echo " ⏳ Wait until ${ec2_instance_id} is running" |
58 |
| - while [ ${COUNT} -le ${MAX_ITERATION} ]; do |
59 |
| - STATUS=`aws ssm describe-instance-information --filters Key=InstanceIds,Values=${ec2_instance_id} --output text --query 'InstanceInformationList[0].PingStatus' --profile ${AWS_PROFILE} --region ${AWS_REGION}` |
60 |
| - if [ ${STATUS} == 'Online' ]; then |
61 |
| - break |
62 |
| - fi |
63 |
| - # Max attempts reached, exit |
64 |
| - if [ ${COUNT} -eq ${MAX_ITERATION} ]; then |
65 |
| - exit 1 |
66 |
| - else |
67 |
| - >/dev/stderr echo " ⁃ [${COUNT}|${MAX_ITERATION}] - retry in ${SLEEP_DURATION} seconds" |
68 |
| - let COUNT=COUNT+1 |
69 |
| - sleep ${SLEEP_DURATION} |
70 |
| - fi |
71 |
| - done |
72 |
| -} |
| 51 | +>/dev/stderr echo "EC2 Proxy Command..." |
73 | 52 |
|
74 |
| - |
75 |
| ->/dev/stderr echo "⚙️ Ec2 Proxy Command \n" |
76 |
| ->/dev/stderr echo "🧪 Check if instance ${ec2_instance_id} is running" |
77 | 53 | STATUS=`aws ssm describe-instance-information --filters Key=InstanceIds,Values=${ec2_instance_id} --output text --query 'InstanceInformationList[0].PingStatus' --profile ${AWS_PROFILE} --region ${AWS_REGION}`
|
78 |
| - |
79 |
| -# If the instance is online, start the session |
80 |
| -if [ $STATUS == 'Online' ]; then |
81 |
| - >/dev/stderr echo " − State: 🟢 ${STATUS}" |
82 |
| - ~/.ssh/aws-ssm-ec2-proxy-command.sh $ec2_instance_id $ssh_user $ssh_port $ssh_public_key_path |
83 |
| -else |
84 |
| - >/dev/stderr echo " − State: 🔴 Offline" |
85 |
| - start_instance |
86 |
| - ~/.ssh/aws-ssm-ec2-proxy-command.sh $ec2_instance_id $ssh_user $ssh_port $ssh_public_key_path |
| 54 | +if [ $STATUS != 'Online' ] |
| 55 | +then |
| 56 | + aws ec2 start-instances --instance-ids "${ec2_instance_id}" --profile "${AWS_PROFILE}" --region "${AWS_REGION}" |
| 57 | + >/dev/stderr echo "Waiting for EC2 Instance ${ec2_instance_id}..." |
| 58 | + START_INSTANCE_START="$(date +%s)" |
| 59 | + while [ $(( $(date +%s) - $START_INSTANCE_START)) -le ${START_INSTANCE_TIMEOUT} ] |
| 60 | + do |
| 61 | + >/dev/stderr echo -n "." |
| 62 | + sleep ${START_INSTANCE_CHECK_INTERVAL} |
| 63 | + STATUS=`aws ssm describe-instance-information --filters Key=InstanceIds,Values=${ec2_instance_id} --output text --query 'InstanceInformationList[0].PingStatus' --profile ${AWS_PROFILE} --region ${AWS_REGION}` |
| 64 | + if [ ${STATUS} == 'Online' ] |
| 65 | + then |
| 66 | + break |
| 67 | + fi |
| 68 | + done |
| 69 | + >/dev/stderr echo |
| 70 | + |
| 71 | + if [ $STATUS != 'Online' ] |
| 72 | + then |
| 73 | + >/dev/stderr echo "Timeout." |
| 74 | + exit 1 |
| 75 | + fi |
87 | 76 | fi
|
| 77 | + |
| 78 | + ~/.ssh/aws-ssm-ec2-proxy-command.sh $ec2_instance_id $ssh_user $ssh_port $ssh_public_key_path |
0 commit comments