acme-dns-route53 — это инструмент, который позволит нам реализовать данную фичу. Он умеет работать с SSL сертификатами от Let’s Encrypt, сохранять их в Amazon Certificate Manager, использовать Route53 API для реализации DNS-01 challenge, и, в конце, пушить уведомления в SNS. В acme-dns-route53 так же присутствует built-in функционал для использования внутри AWS Lambda, и это то, что нам нужно.
Данная статья разбита на 4 раздела:
создание zip файла;
создание IAM роли;
создание лямбда функции которая запускает acme-dns-route53;
создание CloudWatch таймера который триггерит функцию 2 раза в день;
acme-dns-route53 написан на GoLang и поддерживает версию не ниже 1.9.
Нам нужно создать zip файл с бинарником acme-dns-route53 внутри. Для этого необходимо установить acme-dns-route53 из GitHub репозитория используя команду go install:
$ env GOOS=linux GOARCH=amd64 go install github.com/begmaroman/acme-dns-route53
Бинарник установлен в $GOPATH/bin директорию. Обратите внимание на то, что при установке мы указали две переенные окружениея: GOOS=linux и GOARCH=amd64. Они дают понять Go компилятору об необходимости создания бинарника подходящего для Linux OS и amd64 архитектуры — это то, что запускается в AWS.
AWS пердполагает деплой нашей программы в zip файле, так что давайте создадим acme-dns-route53.zip архив который будет содержать только что установленный бинарник:
$ zip -j ~/acme-dns-route53.zip $GOPATH/bin/acme-dns-route53
Эскертүү: бинарник должен быть в корне zip архива. Для этого мы используем -j флаг.
Теперь наш zip-ник готов к деплою, осталось только создать роль с необходимыми правами.
IAM ролун түзүү
Нам нужно засетапить IAM роль с правами, необходимыми нашей лямбде во время ее выполнения.
Давайте назовем эту policy lambda-acme-dns-route53-executor и сразу дадим ей базовую роль AWSLambdaBasicExecutionRole. Это позволит нашей лямбде запуститься и писать логи в AWS CloudWatch сервис.
Для начала создаем JSON файл в котором описаны наши права. Это, по сути, разрешит лямбда-сервисам использовать роль lambda-acme-dns-route53-executor:
Теперь выполним команду aws iam create-role для создания роли:
$ aws iam create-role --role-name lambda-acme-dns-route53-executor
--assume-role-policy-document ~/lambda-acme-dns-route53-executor-policy.json
Эскертүү: запомните policy ARN (Amazon Resource Name) — он нам понадобится на следующих этапах.
ролу lambda-acme-dns-route53-executor создана, теперь нам нужно указать разрешения для нее. Самый простой способ сделать это — использовать команду aws iam attach-role-policy, передав policy ARN AWSLambdaBasicExecutionRole төмөнкүдөй:
$ aws iam attach-role-policy --role-name lambda-acme-dns-route53-executor
--policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
Эскертүү: список с остальными политиками можно найти бул жерде.
Создание лямбда функции которая запускает acme-dns-route53
Ура! Теперь можно и задеплоить нашу функцию на AWS с помощью команды aws lambda create-function. Лямбда должна быть сконфигурированна используя следующие переменные окружения:
AWS_LAMBDA — дает понять acme-dns-route53 о том, что выполнение происходить внутри AWS Lambda.