Hands down der beste Weg, dies in Codepipeline zu tun ist mit https://serverless.com/ Rahmen. Dies ersetzt jeden sehr komplizierten Hack-Job und Workaround, den ich zuvor benutzt habe. Weg weniger kompliziert IMO.
Erstellen Sie eine Codepipeline, verknüpfen Sie es mit src & ein Codebuild-Projekt, legen Sie ein paar Berechtigungen, fertig.
//serverless.yml
service: my-api
provider:
name: aws
runtime: python2.7
functions:
hello:
handler: handler.hello
events:
- http:
path: api/v1/message
method: post
//buildspec.yml
version: 0.2
phases:
install:
commands:
#BUILD
- sudo apt-get update -y
build:
commands:
- echo $environment
- serverless package --stage $environment --region us-east-1
- serverless deploy --stage $environment --region us-east-1
Oder sich quälen, indem Sie eine der folgenden Optionen zu tun ...
Sie können dies tun, in Cloud-Bildung aus der Code-Pipeline. Exportieren Sie die Swagger-Spezifikation aus der Gatewayapi-Konsole und platzieren Sie sie in der Cloud-Vorlage.
Das Anschließen an Lambda ist ein wenig umständlich, aber ich kann die Schritte beschreiben. Erstellen Sie zunächst ein Codepipeline-Projekt mit Quell-, Build- und Deploy-Schritten.
- src sollte von Github oder codecommit
- Build ausgeben sollte eine Zip-Datei und verwenden buildspec.yml So etwas ...
//buildspec.yml
version: 0.1
phases:
install:
commands:
#BUILD
- zip -r lambda.zip . -x *.git*
artifacts:
files:
- '**/*.zip'
- '**/*.yml'
discard-paths: no
Standard sein
Lassen Sie den Build-Schritt ein Artefakt MyAppBuild exportieren (oder wie immer Sie es nennen möchten)
Der letzte Schritt Pipeline schafft die Lambda-Funktion in diesem repo als Standalone-Funktion über die Konsole (seine wiederverwendbar): https://github.com/tkntobfrk/codepipeline-lambda-s3
Diese Lambda-Funktion lädt die Pipeline Artefakts/RV-Lambda-Funktion und aktualisiert sie boto verwenden.
Nach diesen Schritten können Sie einen weiteren Schritt als Schritt zur Bereitstellung der Cloud-Entwicklung hinzufügen. Verbinden Sie es mit der Lambda-Funktion, die Sie gerade bereitgestellt haben.
Wenn Sie mit mehreren Umgebungen arbeiten, können Sie für jede Umgebung Lambda-Funktionen und eine Gatewayapi-Cloud-Vorlage erstellen und diese nacheinander ausführen.
- Stufe 1: src
- Stufe 2: Aufbau
- Stufe 3: Lambda-Test bereitstellen, Gateway api Cloudformation Test
- Stufe 4 bereitstellen: Validierung Test
- Stufe 5: Bereitstellen lambda prod, deploy gateway api cloudformation prod
Mit AWS serverless wie dies funktioniert auch. Sie müssen jedoch einen standardmäßigen Artefaktspeicherort für die uri verwenden. Der DefinitionUri: für die API kann der exportierte Swagger von der gatewayapi-Konsole sein.
//cloudformation.yml
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Resources:
MySimpleFunction:
Type: AWS::Serverless::Function
Properties:
Handler: app.lambda_handler
Runtime: python2.7
CodeUri: s3://somebucket/somezip.zip
MyAPI:
Type: AWS::Serverless::Api
Properties:
StageName: prod
DefinitionUri: s3://somebucket/somezip.zip
Liebe Bruce. Vielen Dank. Für den Moment gab ich auf. Ich hatte keine Zeit mehr. Ich finde die Amazon-Lösung extrem komplex, um sie zu starten. Ich verstehe nicht, warum Amazon keine Plug-and-Play-Lösung bietet :-) –
Ich ging durch und validiere dies funktioniert, aber es ist eine ziemlich komplexe Lösung. Das eigentliche Problem ist mit den Type: 'AWS :: Serverless :: Function' -Typen in der Cloud-Entwicklung, sie benötigen eine externe s3-URI. Wenn Sie in der Lage wären, das lokale Eingabeartefakt in den Vorlagen anzugeben, wäre dies innerhalb von Codepipeline sehr einfach und einfach. –
Danke nochmal. Nur zu erwähnen ... Mein Kollege hat in einigen Stunden eine kontinuierliche Bereitstellung von Azure gestartet. –