スクリプトを使用してAmazon Route53を更新しようとしましたが、ドメインは更新されませんでした。

スクリプトを使用してAmazon Route53を更新しようとしましたが、ドメインは更新されませんでした。

Ubuntu 10.04 を実行する Amazon EC2 インスタンスが複数あります。ここでは Amazon Route53 を使用したいと思います。 Shlomo Swidlerが説明したようにスクリプトを設定しました。記事、しかしまだ不足している点があります。

スクリプトが実行されると、出力は返されません。最初はスクリプトが正しく実行されているという意味だと思いました。ただし、次のようにDNSレコードを確認すると、MyR53DNS、私のインスタンスにエントリがありません。これは私のスクリプトです。

#!/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

答え1

ああ!スクリプトの末尾に改行文字がありません。 Unixテキストファイル(スクリプトなど)は一連の行であり、各行(最後の行も含む)は改行文字で終わる必要があります。

ほとんどの最新のUnixツールは間違った形式のテキストファイルを処理する可能性がありますが、tcshは最新のものとは離れています。終了していない最後の論理行(前のバックスラッシュのない最後の改行文字の後のすべての内容)を無視するようです。

cat /path/to/script良いエディタ(例:EmacsやVi(m))は、自動的にcshスクリプトが改行で終わるかどうかを確認します。次のプロンプトの横ではなく、次のプロンプトの上に最後のスクリプト行を表示します。

1 Emacsのような本当に良いエディタでは、合法的に新しい行で終わらない他の種類のファイルでは動作しません。

関連情報