Ich habe vor kurzem einige Blogbeiträge darüber verfasst, wie Sie eine Anwendung auf AWS erstellen, bereitstellen und hosten können. In diesem Blogbeitrag geht es um den Umgang mit DNS-Einträgen bei einer kontoübergreifenden Einrichtung. Sie denken vielleicht, dass AWS Sie abdeckt, aber die traurige Realität ist, dass sie es nicht tun. (wenn es um kontoübergreifende Anwendungsfälle geht.)
Zum Beispiel, wenn Sie eine Domain namens example.com haben. Dann müssen Sie die gehostete Zone in einem AWS-Konto erstellen. Im Kontext dieses Kontos können Sie dann die Datensätze über Infrastructure as Code verwalten. Das funktioniert so lange, bis Sie mehr als 1 AWS-Konto verwenden.
Das Problem
Da die gehostete Zone von Route53 innerhalb eines bestimmten Kontos lebt. Sie können der gehosteten Zone keine Datensätze von einem anderen Konto aus hinzufügen. Es gibt also 3 Möglichkeiten, wie Sie dieses Problem lösen können:
- Option 1: Verwalten Sie Ihre DNS-Einträge von Hand.
- Option 2: Erstellen Sie eine von Route 53 gehostete Zone in jedem AWS-Konto. Damit dies funktioniert, benötigen Sie ganz unterschiedliche Domains oder Subdomains.
- Option 3: Verwenden Sie den cfn-cross-account-dns-provider
Option 1: Ich möchte die Infrastruktur als Code verwenden. Dies ist also keine Option. Und für Option 2 benötigen Sie entweder eine andere Domain. Oder Sie müssen Subdomains verwenden. Die Verwendung einer anderen Domäne ist ein bisschen übertrieben. Wenn Sie also Subdomains verwenden, benötigen Sie für jedes Konto eine gehostete Zone. Eine einzige gehostete Zone kostet Sie $ 6 pro Jahr. Angenommen, Sie haben 3 Workloads und 4 Umgebungen pro Workload. Dann zahlen Sie $ 72 pro Jahr nur für die gehostete Zone. Das mag für Ihren Anwendungsfall eine Option sein, aber nicht für meine persönlichen Lieblingsprojekte.

Das bringt uns also zu Option 3. Kurz gesagt ist dies meine Lösung für Option 2.
Meine Lösung
Ich habe ein einzelnes AWS-Konto erstellt, das ich für die DNS-Verwaltung verwende. Alle Domänen, die ich besitze, befinden sich in diesem Konto und verwenden

Jetzt können Sie die Ressourcendefinition in CloudFormation verwenden, um DNS-Einträge zu erstellen. Es wird das SNS-Thema verwenden, um den Custom Cross Account DNS Provider in dem AWS-Konto aufzurufen, das die gehosteten Zonen enthält. Der Provider verwaltet die Einträge für Sie und benachrichtigt CloudFormation über das Endergebnis.
DNSRecord:
Type: Custom::CrossAccountDNS
Properties:
ServiceToken: !Sub arn:aws:sns:${AWS::Region}:${HostedZoneAccountId}:binxio-cfn-cross-account-dns-provider
HostedZoneId: !Ref HostedZoneId
Name: mysubdomain.example.com
Type: CNAME
Value: my-value-from-cloudfront-for-example.amazon.com
Cool, jetzt, da wir DNS-Einträge kontoübergreifend erstellen können, können Sie noch mehr lustige Sachen machen. Sie benötigen zum Beispiel auch DNS-Einträge für Zertifikate, die Sie über ACM anfordern.
Wenn Sie CloudFront verwenden, muss das Zertifikat in der Region us-east-1 existieren. Dies wird zu einem Problem, wenn Ihre Anwendung in einer anderen Region liegt. Zu diesem Zweck hat Mark van Holsteijn den cfn-certificate-provider erstellt. Mit diesem Anbieter können Sie ein Zertifikat in der Region us-east-1 anfordern. Während sich Ihr Stack in der Region eu-west-1 befindet. Wenn Sie dies mit dem cfn-cross-account-dns-provider kombinieren, werden Ihre Zertifikate automatisch ausgestellt.
Fazit
Sie können Zertifikate und DNS-Einträge konto- und regionenübergreifend verwalten. Alles, was Sie brauchen, ist der cfn-certificate-provider und der cfn-cross-account-dns-provider. Damit entfallen alle manuellen Schritte bei der Bereitstellung, was sie berechenbarer und zuverlässiger macht.
Foto von BOA.vision
Verfasst von

Joris Conijn
Joris is the AWS Practise CTO of the Xebia Cloud service line and has been working with the AWS cloud since 2009 and focussing on building event-driven architectures. While working with the cloud from (almost) the start, he has seen most of the services being launched. Joris strongly believes in automation and infrastructure as code and is open to learning new things and experimenting with them because that is the way to learn and grow.
Unsere Ideen
Weitere Blogs
Contact




