In diesem Blogbeitrag zeige ich Ihnen, wie Sie sich mit Makefile das Leben leichter machen können.
In diesem Blog werde ich CDK mit Python verwenden. Aber das Prinzip von
Fangen wir an!
Ich habe CDK 1.124.0 (Build 65761fe) für diesen Blogbeitrag verwendet.
Zunächst benötigen wir ein CDK-Projekt. Wir erstellen also einen Arbeitsordner mit dem Namen: makefile_cdk_blog:
mkdir makefile_cdk_blog
cd makefile_cdk_blog
cdk init --language python
mkdir tests
Zu diesem Zeitpunkt haben Sie ein leeres CDK-Projekt. Die meisten Projekte haben Abhängigkeiten. Sie können diese in 2 Kategorien einteilen:
- Projektabhängigkeiten, Abhängigkeiten, die für das Projekt benötigt werden, finden Sie unter
setup.py. - Entwicklungsabhängigkeiten, Abhängigkeiten, die für die Entwicklung des Projekts benötigt werden, befinden sich in
requirements.txt. Beginnen wir mit dem Hinzufügen einiger Entwicklungsabhängigkeiten in der Dateirequirements.txt:
-e .
black
pytest
pytest-cov
pytest-black
setuptools
Jetzt müssen wir pytest konfigurieren. Fügen Sie das Folgende in eine neue Datei setup.cfg ein:
[tool:pytest]
testpaths = tests
[coverage:run]
branch = True
source = makefile_cdk_blog
[coverage:report]
show_missing = true
fail_under = 100
exclude_lines =
pragma: no cover
if name ==.main.:
Das Einzige, was noch fehlt, ist die Makefile selbst. Erstellen Sie eine Datei namens Makefile im Stammverzeichnis Ihres Projekts. Stellen Sie sicher, dass sie den folgenden Inhalt hat:
SHELL = /bin/bash -c
VIRTUAL_ENV = $(PWD)/.venv
export BASH_ENV=$(VIRTUAL_ENV)/bin/activate
$(VIRTUAL_ENV):
python3 -m venv $(VIRTUAL_ENV)
.PHONY: install clean synth diff deploy test lint
install: $(VIRTUAL_ENV)
pip install -r requirements.txt
clean:
[[ -d $(VIRTUAL_ENV) ]] && rm -rf $(VIRTUAL_ENV) || true
[[ -d .pytest_cache ]] && rm -rf .pytest_cache || true
[[ -d cdk.out ]] && rm -rf cdk.out || true
[[ -f .coverage ]] && rm .coverage || true
synth:
cdk synth
diff:
cdk diff
deploy: test
cdk deploy
test: lint
pytest --cov --cov-report term-missing
lint:
black .
$(VERBOSE).SILENT:
Alles klar, wir sind bereit! Zuerst wollen wir unsere Änderungen committen, aber bevor wir das tun können, sollten wir sie testen. Wir haben Abhängigkeiten hinzugefügt, also müssen wir diese zuerst installieren! Aber da wir jetzt ein Make-Target dafür haben, können wir es verwenden.
make install
Ich werde Ihnen zeigen, was im Hintergrund passiert:
- Zunächst wählt
Makefiledie Bash als Shell aus. - Legen Sie den Standort der virtuellen Umgebung fest.
- Die Variable
BASH_ENVist von dem Ziel$(VIRTUAL_ENV)abhängig. Sie erstellt eine virtuelle Umgebung an dem definierten Ort. - Die virtuelle Umgebung wird dann in die Variable
BASH_ENVexportiert. - Dann führen wir das Ziel
installaus. Alle Befehle werden nun im Kontext der virtuellen Umgebung ausgeführt. pip installwird alle Abhängigkeiten imrequirements.txtund imsetup.pyinstallieren.
Wir können nun das Ziel test ausführen, um zu sehen, ob alles wie erwartet funktioniert.
make test
Sie würden etwas sehen wie:
Was ist also passiert? Wir haben das Ziel lint abhängig.
Das Ziel lint enthält black . und dieser Befehl formatiert den gesamten Python-Code. Danach wird er fortgesetzt und führt die Befehle im Ziel
git add .
git commit -m "chore: setup project using a Makefile"
Zeit für den Einsatz!
Bevor wir mit der Bereitstellung beginnen, gehe ich davon aus, dass Sie Ihre AWS-Anmeldedaten richtig konfiguriert haben.
export AWS_PROFILE=my-profile-name
make deploy
Und es ist fehlgeschlagen? Weil das Ziel Makefile. Sie haben einfache Namen für Aktionen, die Sie durchführen möchten. Zum Beispiel: test, deploy usw.
Und in diesem Fall sollten Sie nicht deployen, wenn Ihr Test fehlschlägt.
Sie können diese Ziele mit verschiedenen Prüfungen/Befehlen erweitern.
Sie könnten zum Beispiel die Vorlage synthetisieren und dann die folgenden Tools verwenden:
- cfn_nag
- cloudformation-guard.
Fazit
Makefiles ermöglichen es Ihnen, Aktionen projektübergreifend zu standardisieren. Sie können Befehle in virtuellen Umgebungen für Sie ausführen. Und wenn sie einfach gehalten werden, sind sie leicht zu lesen!
Update: Verbessern Sie Ihr Makefile noch mehr, indem Sie ein Hilfeziel hinzufügen!
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




