0

implementieren kann Zur Zeit kann ich einen Lambda bereitstellen, indem ich zu Github schiebe. I bereitstellen auch automatisch eine Lambda aber nur, weil der api-Gateway ein Ereignis in der Lambda-yaml Datei istWie man automatisch API-Gateway in AWS-Codepipeline

AWSTemplateFormatVersion: '2010-09-09' 
Transform: 'AWS::Serverless-2016-10-31' 
Description: Identifies paragraphs in documents and links to the law 
Resources: 
    LambdaParagraphLinker: 
    Type: 'AWS::Serverless::Function' 
    Properties: 
     Handler: LambdaParagraphLinker.lambda_handler 
     Runtime: python3.6 
     CodeUri: ./ 
     Description: Identifies paragraphs in documents and links to the 
     law 
     MemorySize: 512 
     Timeout: 10  
     Events: 
     Api: 
      Type: Api 
      Properties: 
      Path: /LambdaParagraphLinker 
      Method: ANY 

Wie kann ich einen api-Gateway mit einer Prahlerei Datei bereitstellen?

Antwort

1

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 
+0

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 :-) –

+0

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. –

+0

Danke nochmal. Nur zu erwähnen ... Mein Kollege hat in einigen Stunden eine kontinuierliche Bereitstellung von Azure gestartet. –

Verwandte Themen