-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathupdate-route53.sh
83 lines (64 loc) · 2.2 KB
/
update-route53.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#!/bin/bash
TMPFILE=/tmp/u53tempfile
TMPFILE_URI="file://$TMPFILE"
AWS=/usr/local/bin/aws
function try {
output=$(eval "$*")
if ! $output; then
echo "Error while evaluating \"$*\", exiting..."
exit 1
fi
}
try rm -f $TMPFILE
sleep 180 # Wait for the ECS agent to register the task
if [[ -z "${ECS_CONTAINER_METADATA_URI}" ]] ; then
echo "Missing ECS_CONTAINER_METADATA_URI, exiting..."
exit 1
fi
try curl -s "$ECS_CONTAINER_METADATA_URI" -o $TMPFILE
ECS_CLUSTER=$(cat $TMPFILE | jq -r '.Cluster'|cut -d/ -f2)
ECS_TASK=$(cat $TMPFILE | jq -r '.TaskARN'|cut -d/ -f2)
if [[ -z "${ECS_CLUSTER}" ]] || [[ -z "${ECS_TASK}" ]] ; then
echo "Missing Task or Cluster ID, exiting..."
exit 1
fi
try $AWS ecs describe-tasks --tasks "$ECS_TASK" --cluster "$ECS_CLUSTER" > $TMPFILE
ENI_ID=$(cat $TMPFILE | jq -r '.tasks[].attachments[].details[] | select(.name =="networkInterfaceId") | .value ')
if [[ -z "${ENI_ID}" ]] ; then
echo "Missing ENI ID, exiting..."
exit 1
fi
try $AWS ec2 describe-network-interfaces --filters Name=network-interface-id,Values="$ENI_ID" > $TMPFILE
R53_PUBLIC_IP=$(cat $TMPFILE | jq -r '.NetworkInterfaces[0].Association.PublicIp')
if [[ -z "${R53_PUBLIC_IP}" ]] ; then
echo "Missing Public IP, exiting..."
exit 1
fi
# The below two parameters are expected to be supplied as environment variables.
# Preferably supplied under Container settings in the ECS task definition
if [[ -z "${R53_HOST}" ]] || [[ -z "${R53_ZONEID}" ]] ; then
echo "Missing required parameters to update Route53, exiting..."
exit 1
fi
cat << EOF > $TMPFILE
{
"Comment": "Upsert record for new ECS public address",
"Changes": [
{
"Action": "UPSERT",
"ResourceRecordSet": {
"Name": "$R53_HOST",
"Type": "A",
"TTL": 60,
"ResourceRecords": [
{
"Value": "$R53_PUBLIC_IP"
}
]
}
}
]
}
EOF
echo "Trying to upsert $R53_HOST to $R53_PUBLIC_IP in zone $R53_ZONEID"
try $AWS route53 change-resource-record-sets --hosted-zone-id "$R53_ZONEID" --change-batch $TMPFILE_URI