Bitbucket Pipelines, Node.js und AWS Lambda
Bitbucket stellt eine nützliche Funktion bereit: automatische Build-Pipelines für Continuous Integration. Jeder Commit (je nach Configuration in einem speziellen Branch) stößt einen automatischen Prozess an. Dieser erstellt einen Docker Container, aus dem dann das Deployment zu einer Integration erfolgen kann. Oder die Pipeline führt nur Tests aus – gibt es einen Fehler im Script der Pipeline, wird eine E-Mail mit der Fehlerinfo verschickt.
Als Nutzer von Lambda mit Node.js gibt es leider kein fertiges Script für das Deployment, nur ein Beispiel für Python. Hier ist meine aktuelle Konfiguration. Der Code kommt in die Datei bitbucket-pipelines.yml und muss im Root vom Projekt liegen:
image: node:4.3.2 pipelines: default: - step: script: - apt-get update - apt-get install -y zip - apt-get install -y python - apt-get install -y python-pip - pip install awscli - npm install - zip /tmp/deployment.zip -r -q -X * - aws lambda update-function-code \ --function-name $AWS_LAMBDA_FUNCTION_NAME \ --zip-file fileb:///tmp/deployment.zip
Da das Skript eine YAML-Datei ist, sind die Einrückungen natürlich genau so einzuhalten.
Danach müssen die Pipelines noch in den Settings vom Bitbucket Projekt aktiviert werden, und die folgenden Umgebungsvariablen gesetzt werden:
- AWS_ACCESS_KEY_ID
- AWS_DEFAULT_REGION
- AWS_LAMBDA_FUNCTION_NAME
- AWS_SECRET_ACCESS_KEY
Diese Variablen können auch im persönlichen Nutzerprofil hinzugefügt werden – was sich für den Access Key, Secret Access Key und vielleicht die Default Region anbieten würde. Der Lambda Funktionsname dagegen wird sehr wahrscheinlich vom Projekt abhängen.
Bis zu 500 Minuten Pipeline Processing pro Teammitglied sind bis 2017 kostenfrei verfügbar. Bei meinem kleinen Beispielprojekt dauert die Pipeline etwa 30 Sekunden.
Einen zeitlichen Vorteil sehe ich daher erst bei größeren Projekten; aktuell wäre ich mit einem Upload vom kompletten Code zu Lambda auf meinem Rechner nicht viel langsamer.