I have several Amazon EC2 instances, running Ubuntu 10.04, with which I'd like to use Amazon's Route53. I setup a script as described in Shlomo Swidler's article, but I'm still missing something.
When the script runs, it doesn't return any output, which I initially assumed meant it ran correctly. However, when I check the DNS records using MyR53DNS, there are no entries for my instances. Here's my script:
#!/bin/tcsh -f
set root=`dirname $0`
setenv EC2_HOME /usr/lib/ec2-api-tools
setenv EC2_CERT /etc/cron.route53/ec2_x509_cert.pem
setenv EC2_PRIVATE_KEY /etc/cron.route53/ec2_x509_private.pem
setenv AWS_ACCESS_KEY_ID myaccesskeyid
setenv AWS_SECRET_ACCESS_KEY myaccesskey
/usr/bin/ec2-describe-instances | \
perl -ne '/^INSTANCE\s+(i-\S+).*?(\S+\.amazonaws\.com)/ \
and do { $dns = $2; print "$1 $dns\n" }; /^TAG.+\sShortName\s+(\S+)/ \
and print "$1 $dns\n"' | \
perl -ane 'print "$F[0] CNAME $F[1] --replace\n"' | \
xargs -n 4 /etc/cron.route53/cli53/cli53.py \
rrcreate -x 60 mydomain.com
Does anyone see a problem with this script? If its not the script, what else could be preventing my Route53 domain from being updated?
I am using the Security Groups to IP-restrict the instances. I've tried opening port 53, but that didn't seem to have an effect. Is there another port that Route53 uses?
I'd appreciate any help or guidance the Unix & Linux community can offer. Let me know if you need any further info.
Here is the results of running: tcsh -f -x /etc/cron.route53/aws-route53.sh
set root=`dirname $0`
dirname /etc/cron.route53/aws-route53.sh
setenv EC2_HOME /usr/lib/ec2-api-tools
setenv EC2_CERT /etc/cron.route53/ec2_x509_cert.pem
setenv EC2_PRIVATE_KEY /etc/cron.route53/ec2_x509_private.pem
setenv AWS_ACCESS_KEY_ID myaccesskeyid
setenv AWS_SECRET_ACCESS_KEY myaccesskey
I receive the same output whether the last 7 lines are commented or uncommented.
> cat -A /etc/cron.route53/aws-route53.sh
#!/bin/tcsh -f$
$
set root=`dirname $0`$
setenv EC2_HOME /usr/lib/ec2-api-tools$
setenv EC2_CERT /etc/cron.route53/ec2_x509_cert.pem$
setenv EC2_PRIVATE_KEY /etc/cron.route53/ec2_x509_private.pem$
setenv AWS_ACCESS_KEY_ID myaccesskeyid$
setenv AWS_SECRET_ACCESS_KEY myaccesskey$
$
/usr/bin/ec2-describe-instances | \$
perl -ne '/^INSTANCE\s+(i-\S+).*?(\S+\.amazonaws\.com)/ \$
and do { $dns = $2; print "$1 $dns\n" }; /^TAG.+\sShortName\s+(\S+)/ \$
and print "$1 $dns\n"' | \$
perl -ane 'print "$F[0] CNAME $F[1] --replace\n"' | \$
xargs -n 4 /etc/cron.route53/cli53/cli53.py \$
rrcreate -x 60 mydomain.com
> cat /etc/cron.route53/aws-route53.sh
#!/bin/tcsh -f
set root=`dirname $0`
setenv EC2_HOME /usr/lib/ec2-api-tools
setenv EC2_CERT /etc/cron.route53/ec2_x509_cert.pem
setenv EC2_PRIVATE_KEY /etc/cron.route53/ec2_x509_private.pem
setenv AWS_ACCESS_KEY_ID myaccesskeyid
setenv AWS_SECRET_ACCESS_KEY myaccesskey
/usr/bin/ec2-describe-instances | \
perl -ne '/^INSTANCE\s+(i-\S+).*?(\S+\.amazonaws\.com)/ \
and do { $dns = $2; print "$1 $dns\n" }; /^TAG.+\sShortName\s+(\S+)/ \
and print "$1 $dns\n"' | \
perl -ane 'print "$F[0] CNAME $F[1] --replace\n"' | \
xargs -n 4 /etc/cron.route53/cli53/cli53.py \
rrcreate -x 60 mydomain.com

/user/binshould be/usr/bin,$/etcshould be/etc. Did you try running the script in a terminal? Both problems would show an error message. If that's not your actual script, then copy-paste your actual script (except for the access keys of course). – Gilles Feb 14 '11 at 20:12tcsh -f -x /path/to/your/script. This will show a trace of the commands the shell runs. Post the trace. Also make a copy of the script that stops at/usr/bin/ec2-describe-instancesand post the output of that. On a separate note: I just happened to notice your edited question, but I wasn't notified of your comment. When you reply to a comment, you can use@usernameso that the author of the comment is notified. – Gilles Feb 14 '11 at 21:25cat -A aws-route53.shwithcat aws-route53.sh. The only difference should be a$at the end of each line. Is there any non-alphanumeric character inmyaccesskeyidormyaccesskey? – Gilles Feb 14 '11 at 22:08