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.