acme-dns-route53 ist ein Tool, mit dem wir diese Funktion implementieren können. Es kann mit SSL-Zertifikaten von Let's Encrypt arbeiten, diese im Amazon Certificate Manager speichern, die Route53-API verwenden, um die DNS-01-Herausforderung zu implementieren, und schließlich Push-Benachrichtigungen an SNS senden. IN acme-dns-route53 Es gibt auch integrierte Funktionen zur Verwendung in AWS Lambda, und das ist es, was wir brauchen.
Dieser Artikel ist in 4 Abschnitte unterteilt:
Erstellen einer ZIP-Datei;
Erstellen einer IAM-Rolle;
Erstellen einer Lambda-Funktion, die ausgeführt wird acme-dns-route53;
Erstellen eines CloudWatch-Timers, der zweimal täglich eine Funktion auslöst;
Hinweis: Bevor Sie beginnen, müssen Sie die Installation durchführen GoLang 1.9+ и AWS-CLI
Erstellen einer ZIP-Datei
acme-dns-route53 ist in GoLang geschrieben und unterstützt mindestens Version 1.9.
Wir müssen eine ZIP-Datei mit einer Binärdatei erstellen acme-dns-route53 innen. Dazu müssen Sie installieren acme-dns-route53 aus dem GitHub-Repository mit dem Befehl go install:
$ env GOOS=linux GOARCH=amd64 go install github.com/begmaroman/acme-dns-route53
Die Binärdatei ist installiert in $GOPATH/bin Verzeichnis. Bitte beachten Sie, dass wir bei der Installation zwei geänderte Umgebungen angegeben haben: GOOS=linux и GOARCH=amd64. Sie machen dem Go-Compiler klar, dass er eine Binärdatei erstellen muss, die für das Linux-Betriebssystem und die amd64-Architektur geeignet ist – diese läuft auf AWS.
AWS erwartet, dass unser Programm in einer ZIP-Datei bereitgestellt wird, also erstellen wir es acme-dns-route53.zip Archiv, das die neu installierte Binärdatei enthält:
$ zip -j ~/acme-dns-route53.zip $GOPATH/bin/acme-dns-route53
Hinweis: Die Binärdatei sollte sich im Stammverzeichnis des Zip-Archivs befinden. Dafür verwenden wir -j Flagge.
Jetzt ist unser Zip-Spitzname bereit für die Bereitstellung. Jetzt müssen Sie nur noch eine Rolle mit den erforderlichen Rechten erstellen.
Erstellen einer IAM-Rolle
Wir müssen eine IAM-Rolle mit den Rechten einrichten, die unser Lambda während seiner Ausführung benötigt.
Nennen wir diese Richtlinie lambda-acme-dns-route53-executor und gib ihr sofort eine Grundrolle AWSLambdaBasicExecutionRole. Dadurch kann unser Lambda Protokolle ausführen und in den AWS CloudWatch-Dienst schreiben.
Zuerst erstellen wir eine JSON-Datei, die unsere Rechte beschreibt. Dadurch können Lambda-Dienste die Rolle im Wesentlichen nutzen lambda-acme-dns-route53-executor:
Jetzt führen wir den Befehl aus aws iam create-role So erstellen Sie eine Rolle:
$ aws iam create-role --role-name lambda-acme-dns-route53-executor
--assume-role-policy-document ~/lambda-acme-dns-route53-executor-policy.json
Hinweis: Merken Sie sich den Richtlinien-ARN (Amazon Resource Name) – wir werden ihn in den nächsten Schritten benötigen.
Rolle lambda-acme-dns-route53-executor erstellt, jetzt müssen wir Berechtigungen dafür angeben. Am einfachsten geht das mit dem Befehl aws iam attach-role-policy, Übergabe des Richtlinien-ARN AWSLambdaBasicExecutionRole следующим обрахом:
$ aws iam attach-role-policy --role-name lambda-acme-dns-route53-executor
--policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
Hinweis: Eine Liste mit anderen Richtlinien finden Sie hier hier.
Erstellen einer Lambda-Funktion, die ausgeführt wird acme-dns-route53
Hurra! Jetzt können Sie unsere Funktion mit dem Befehl in AWS bereitstellen aws lambda create-function. Das Lambda muss mit den folgenden Umgebungsvariablen konfiguriert werden:
AWS_LAMBDA - macht es klar acme-dns-route53 Diese Ausführung erfolgt innerhalb von AWS Lambda.
DOMAINS – eine durch Kommas getrennte Liste von Domänen.