Tentando atualizar o Amazon Route53 usando um script, mas o domínio não está sendo atualizado

2

Eu tenho várias instâncias do Amazon EC2, executando o Ubuntu 10.04, com o qual gostaria de usar o Route53 da Amazon. Eu configurei um script como descrito em Shlomo Swidler's artigo , mas ainda sinto falta de algo.

Quando o script é executado, ele não retorna nenhuma saída, o que inicialmente assumi que significava que ele funcionava corretamente. No entanto, quando eu verifico os registros DNS usando MyR53DNS , não há entradas para minhas instâncias. Aqui está meu 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

Alguém vê algum problema com esse script? Se não for o script, o que mais poderia estar impedindo que meu domínio Route53 fosse atualizado?

Estou usando os grupos de segurança para restringir as instâncias por IP. Eu tentei abrir a porta 53, mas isso não parece ter efeito. Existe outra porta que o Route53 usa?

Gostaria de receber ajuda ou orientação do Unix & Comunidade Linux pode oferecer. Deixe-me saber se você precisar de mais informações.

Aqui estão os resultados da execução: 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

Eu recebo a mesma saída se as últimas 7 linhas foram comentadas ou não comentadas.

> 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
    
por ks78 14.02.2011 / 18:03

1 resposta

2

Aha! Seu script está faltando uma nova linha no final. Arquivos de texto Unix (como scripts) são seqüências de linha, e cada linha (mesmo a última) deve ser terminada por uma nova linha.

A maioria das ferramentas modernas unix pode lidar com arquivos de texto malformados, mas o tcsh não conta como moderno: parece ignorar a última linha lógica, não terminada (tudo depois da última nova linha que não é precedida por uma barra invertida). / p>

Um bom editor (como o Emacs ou o Vi (m)) automaticamente certifica-se de que os scripts csh são finalizados por uma nova linha. Parece que seu editor não está fazendo a coisa certa, então certifique-se de que seus scripts terminem com um nova linha ( cat /path/to/script deve mostrar a última linha de script acima do próximo prompt, não próxima a ela).

Em um editor realmente bom, como o Emacs, isso não se aplica a outros tipos de arquivos que podem legitimamente não ser terminados por novas linhas.

    
por 14.02.2011 / 23:28