Blog
Wie Sie einen benutzerdefinierten AWS CloudFormation-Anbieter in weniger als 5 Minuten erstellen und bereitstellen

In diesem Blog zeige ich Ihnen, wie Sie einen benutzerdefinierten AWS CloudFormation-Anbieter in weniger als 5 Minuten mithilfe einer Python-Kopiervorlage erstellen und bereitstellen können.
Es ist nicht schwer, eine benutzerdefinierte Ressource in CloudFormation zu erstellen. Dazu müssen Sie lediglich
drei Methoden implementieren: Erstellen, Aktualisieren und Löschen in einem Lambda. Allerdings ist
Die Vorlage verfügt über die folgenden Funktionen: - schnelle Erstellung des Quellcodes für einen CloudFormation-Ressourcenanbieter - Unterstützung für semantische Versionierung mit git-release-tag - Verteilung von Lambdas auf Buckets in allen AWS-Regionen der Welt - wiederaufzeichnungsfähige Unit-Tests mit botocore stubber recorder - bereitstellbare AWS Codebuild-Pipeline
Wir fangen an!
Angenommen, Sie möchten eine benutzerdefinierte Ressource für eine benutzerdefinierte Domäne eines AWS AppRunner-Services erstellen, , weil diese noch nicht existiert. Um zu beginnen, geben Sie ein:
pip install copier
copier https://github.com/binxio/cloudformation-custom-provider-template /tmp/cfn-app-runner-custom-domain-provider
the name of your custom resource type?
AppRunnerCustomDomain
The name of your resource provider project?
cfn-app-runner-custom-domain-provider
The name of your Python module?
cfn_app_runner_custom_domain_provider
a short description for the custom provider?
manages app runner custom domains
Python version to use
3.9
Your full name?
Mark van Holsteijn
Your email address?
mark.vanholsteijn@xebia.com
the URL to git source repository?
https://github.com/binxio/cfn-app-runner-custom-domain-provider
the AWS profile name
integration-test
the AWS region name
eu-central-1
prefix for the S3 bucket name to store the lambda zipfiles?
binxio-public
Access to lambda zip files?
public
> Running task 1 of 1: [[ ! -d .git ]] && ( git init && git add . && git commit -m 'initial import' && git tag 0.0.0) || exit 0
Initialized empty Git repository in /tmp/cfn-app-runner-custom-domain-provider/.git/
[main (root-commit) b2ce863] initial import
21 files changed, 619 insertions(+)
...
````
This creates a project with a working custom provider for the resource AppRunnerCustomDomain. Change to
the directory and type make deploy-provider and make demo. Your provider will be up-and-running
in less than 5 minutes!
## what is in the box
When you type make help, you will get a list of all of available actions.
```text
build - build the lambda zip file
fmt - formats the source code
test - run python unit tests
test-record - run python unit tests, while recording the boto3 calls
test-templates - validate CloudFormation templates
deploy - AWS lambda zipfile to bucket
deploy-all-regions - AWS lambda zipfiles to all regional buckets
undeploy-all-regions - deletes AWS lambda zipfile of this release from all buckets in all regions
deploy-provider - deploys the custom provider
delete-provider - deletes the custom provider
deploy-pipeline - deploys the CI/CD deployment pipeline
delete-pipeline - deletes the CI/CD deployment pipeline
deploy-demo - deploys the demo stack
delete-demo - deletes the demo stack
tag-patch-release - create a tag for a new patch release
tag-minor-release - create a tag for a new minor release
tag-major-release - create a tag for new major release
die Unit-Tests ausführen
Um die Unit-Tests auszuführen, geben Sie ein:
make test
Der Unit-Test testet die Gerüstimplementierung, die vom botocore Stubber-Recorder erzeugt wurde.
Um Unit-Tests für Ihre Ressource zu erstellen, bearbeiten Sie den Quellcode unter ./tests/. Um Ihre eigene
Ressource zu implementieren, bearbeiten Sie den Quellcode unter ./src/.
wiederaufzeichnbare Unit-Tests
Wenn Sie Ihren benutzerdefinierten Ressourcenanbieter haben, tätigt er zweifellos einige AWS-API-Aufrufe.
Mit dem botocore Stubber Recorder
können Sie Unit-Tests erstellen, indem Sie den Test gegen ein echtes Konto laufen lassen. Die Tests
make test-record
Dadurch werden die Unit-Tests ausgeführt und die AWS-Aufrufe aufgezeichnet. Um die Unit-Tests mit den neu erstellten Stubs auszuführen, geben Sie ein:
make test
Die Integrationstests werden mit dem von Ihnen angegebenen AWS-Profil und der Region durchgeführt.
Stellen Sie die Zip-Datei im Bucket bereit
Um die Zip-Datei mit dem Quellcode des AWS Lambda des benutzerdefinierten Ressourcenanbieters zu kopieren, geben Sie ein:
aws s3 mb s3://<bucket-prefix>-<bucket-region>
Wie Sie sehen, wird die Zip-Datei in einen Bucket-Namen kopiert, der aus dem Präfix und dem Namen der Region besteht. Auf diese Weise kann die Zipdatei für die Verwendung in allen Regionen zur Verfügung gestellt werden.
Stellen Sie den benutzerdefinierten Ressourcenanbieter im Konto bereit
Jetzt, wo die Zip-Datei verfügbar ist, stellen Sie den benutzerdefinierten Ressourcenanbieter bereit, indem Sie eingeben:
make deploy-provider
Dadurch wird der Anbieter als AWS Lambda-Funktion bereitgestellt. Um
die Laufzeitparameter und Berechtigungen des Lambdas zu konfigurieren, ändern Sie die CloudFormation
Vorlage im Verzeichnis ./cloudformation.
Setzen Sie die benutzerdefinierte Ressource Demo ein
Um den Demo-CloudFormation-Stack unter Verwendung des benutzerdefinierten Ressourcenanbieters bereitzustellen, geben Sie ein:
make deploy-demo
Dadurch wird ein CloudFormation Stack mit einer beispielhaften benutzerdefinierten Ressource als CloudFormation Stack bereitgestellt.
die Laufzeitparameter und Berechtigungen des Lambda ändern Sie die CloudFormation
Vorlage in der Datei ./cloudformation/demo.yaml. Ändern Sie die Konfiguration der benutzerdefinierten
Ressource, um sie an Ihre Implementierung anzupassen.
Version Ihres benutzerdefinierten Ressourcenanbieters
Um Ihren benutzerdefinierten Ressourcenanbieter zu versionieren, können Sie die folgenden Befehle verwenden:
make tag-patch-release - create a tag for a new patch release
make tag-minor-release - create a tag for a new minor release
make tag-major-release - create a tag for new major release
Dies wird:
- den Pre-Tag-Befehl in der Datei ./release
ausführen - alle ausstehenden Änderungen im Arbeitsbereich übertragen
- die Übertragung mit der neuen Version markieren.
Um die aktuelle Version des Arbeitsbereichs anzuzeigen, geben Sie ein:
shell
make show-version
Das Dienstprogramm git-release-tag
implementiert diese Funktion.
Bereitstellung des Anbieters in allen Regionen
Um die aktuelle Version Ihres Anbieters für alle Regionen bereitzustellen, geben Sie ein:
make deploy-all-regions
Dies setzt voraus, dass Sie in allen Regionen über Buckets mit dem definierten Präfix verfügen.
CI/CD-Pipeline bereitstellen
Um die CI/CD-Pipeline basierend auf AWS Codebuild bereitzustellen, stellen Sie sicher, dass das AWS-Konto auf das Quell-Repository zugreifen kann. Wenn dies der Fall ist, geben Sie ein:
make deploy-pipeline
Jedes Mal, wenn Sie eine neue Version markieren, wird sie automatisch in allen Regionen verteilt.
Fazit
Diese Kopiervorlage bietet alles, was Sie brauchen, um schnell einen neuen benutzerdefinierten AWS CloudFormation Provider zu erstellen, bereitzustellen und zu pflegen! Photo by Saffu on Unsplash
Verfasst von

Mark van Holsteijn
Mark van Holsteijn is a senior software systems architect at Xebia Cloud-native solutions. He is passionate about removing waste in the software delivery process and keeping things clear and simple.
Contact