Linux
嘗試使用腳本更新 Amazon Route53,但未更新域
我有幾個執行 Ubuntu 10.04 的 Amazon EC2 實例,我想使用 Amazon 的 Route53。我按照 Shlomo Swidler 的文章中的描述設置了一個腳本,但我仍然缺少一些東西。
當腳本執行時,它不會返回任何輸出,我最初認為這意味著它執行正確。但是,當我使用MyR53DNS檢查 DNS 記錄時,我的實例沒有條目。這是我的腳本:
#!/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
有人看到這個腳本有問題嗎?如果不是腳本,還有什麼可能阻止我的 Route53 域被更新?
我正在使用安全組對實例進行 IP 限制。我已經嘗試打開埠 53,但這似乎沒有效果。Route53 是否使用了另一個埠?
我很感激 Unix 和 Linux 社區可以提供的任何幫助或指導。如果您需要任何進一步的資訊,請告訴我。
這是執行的結果: 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
無論最後 7 行是註釋還是未註釋,我都會收到相同的輸出。
> 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
啊哈!您的腳本末尾缺少換行符。Unix 文本文件(如腳本)是行序列,每一行(甚至最後一行)都必須以換行符結束。
大多數現代 unix 工具可以處理格式錯誤的文本文件,但 tcsh 不算現代:它看起來忽略了最後一個未終止的邏輯行(最後一個換行符之後沒有反斜杠的所有內容)。
一個好的編輯器(例如 Emacs 或 Vi(m))會自動確保 csh 腳本以換行符終止。¹看起來您的編輯器沒有做正確的事情,因此請確保您的腳本確實以換行符結尾(
cat /path/to/script
必須在下一個提示上方顯示最後一個腳本行,而不是在它旁邊)。¹在一個非常好的編輯器中,比如 Emacs,這不適用於其他類型的文件,這些文件可能合法地不是換行符終止的。