acme-dns-route53 é uma ferramenta que nos permitirá implementar esse recurso. Ele pode funcionar com certificados SSL do Let's Encrypt, salvá-los no Amazon Certificate Manager, usar a API Route53 para implementar o desafio DNS-01 e, por fim, enviar notificações push para SNS. EM acme-dns-route53 Também há funcionalidade integrada para uso no AWS Lambda, e é disso que precisamos.
Este artigo está dividido em 4 seções:
criando um arquivo zip;
criando uma função IAM;
criando uma função lambda que executa acme-dns-route53;
criar um timer CloudWatch que acione uma função 2 vezes ao dia;
acme-dns-route53 é escrito em GoLang e suporta versão não inferior a 1.9.
Precisamos criar um arquivo zip com um binário acme-dns-route53 dentro. Para fazer isso você precisa instalar acme-dns-route53 do repositório GitHub usando o comando go install:
$ env GOOS=linux GOARCH=amd64 go install github.com/begmaroman/acme-dns-route53
O binário está instalado em $GOPATH/bin diretório. Observe que durante a instalação especificamos dois ambientes alterados: GOOS=linux и GOARCH=amd64. Eles deixam claro para o compilador Go que ele precisa criar um binário adequado para o sistema operacional Linux e a arquitetura amd64 - é isso que roda na AWS.
A AWS espera que nosso programa seja implantado em um arquivo zip, então vamos criar acme-dns-route53.zip arquivo que conterá o binário recém-instalado:
$ zip -j ~/acme-dns-route53.zip $GOPATH/bin/acme-dns-route53
Observação: O binário deve estar na raiz do arquivo zip. Para isso usamos -j bandeira.
Agora que nosso apelido zip está pronto para implantação, resta apenas criar uma função com os direitos necessários.
Criando uma função do IAM
Precisamos configurar uma função IAM com os direitos exigidos pelo nosso lambda durante sua execução.
Vamos chamar esta política lambda-acme-dns-route53-executor e imediatamente dar a ela um papel básico AWSLambdaBasicExecutionRole. Isso permitirá que nosso lambda execute e grave logs no serviço AWS CloudWatch.
Primeiro, criamos um arquivo JSON que descreve nossos direitos. Isso essencialmente permitirá que os serviços lambda usem a função lambda-acme-dns-route53-executor:
Agora vamos executar o comando aws iam create-role para criar uma função:
$ aws iam create-role --role-name lambda-acme-dns-route53-executor
--assume-role-policy-document ~/lambda-acme-dns-route53-executor-policy.json
Observação: lembre-se do ARN da política (Amazon Resource Name) - precisaremos dele nas próximas etapas.
Papel lambda-acme-dns-route53-executor criado, agora precisamos especificar permissões para ele. A maneira mais fácil de fazer isso é usar o comando aws iam attach-role-policypassando o ARN da política AWSLambdaBasicExecutionRole da seguinte maneira:
$ aws iam attach-role-policy --role-name lambda-acme-dns-route53-executor
--policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
Observação: uma lista com outras políticas pode ser encontrada aqui.
Criando uma função lambda que é executada acme-dns-route53
Viva! Agora você pode implantar nossa função na AWS usando o comando aws lambda create-function. O lambda deve ser configurado usando as seguintes variáveis de ambiente:
AWS_LAMBDA - deixa claro acme-dns-route53 essa execução ocorre dentro do AWS Lambda.
DOMAINS — uma lista de domínios separados por vírgulas.