Tutorial: Eine serverlose Anwendung bereitstellen - Amazon CodeCatalyst

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Tutorial: Eine serverlose Anwendung bereitstellen

In diesem Tutorial erfahren Sie, wie Sie mithilfe eines Workflows eine serverlose Anwendung als CloudFormation Stack erstellen, testen und bereitstellen.

Die Anwendung in diesem Tutorial ist eine einfache Webanwendung, die eine „Hello World“ -Nachricht ausgibt. Es besteht aus einer AWS Lambda Funktion und einem Amazon API Gateway, und Sie erstellen es mit der AWS Serverless Application Model (AWS SAM), einer Erweiterung von AWS CloudFormation.

Voraussetzungen

Bevor Sie beginnen:

  • Sie benötigen einen CodeCatalyst Bereich mit einem verbundenen AWS Konto. Weitere Informationen finden Sie unter Einen Raum schaffen.

  • In Ihrem Bereich benötigen Sie ein leeres Projekt mit dem Namen:

    codecatalyst-cfn-project

    Verwenden Sie die Option Von vorne beginnen, um dieses Projekt zu erstellen.

    Weitere Informationen finden Sie unter Ein leeres Projekt in Amazon erstellen CodeCatalyst.

  • In Ihrem Projekt benötigen Sie eine CodeCatalyst Umgebung mit dem Namen:

    codecatalyst-cfn-environment

    Konfigurieren Sie diese Umgebung wie folgt:

    • Wählen Sie einen beliebigen Typ aus, z. B. „Keine Produktion“.

    • Connect dein AWS Konto damit.

    • Wählen Sie für die IAMStandardrolle eine beliebige Rolle aus. Sie werden später eine andere Rolle angeben.

    Weitere Informationen finden Sie unter Einsatz in AWS-Konten und VPCs.

Schritt 1: Erstellen Sie ein Quell-Repository

In diesem Schritt erstellen Sie ein Quell-Repository in CodeCatalyst. Dieses Repository wird verwendet, um die Quelldateien des Tutorials zu speichern, z. B. die Lambda-Funktionsdatei.

Weitere Hinweise zu Quell-Repositorys finden Sie unter. Erstellen eines Quell-Repositorys

Um ein Quell-Repository zu erstellen
  1. Wählen Sie im Navigationsbereich Code und dann Quell-Repositories aus. CodeCatalyst

  2. Wählen Sie Repository hinzufügen und anschließend Repository erstellen aus.

  3. Geben Sie im Feld Repository-Name Folgendes ein:

    codecatalyst-cfn-source-repository
  4. Wählen Sie Erstellen.

Sie haben jetzt ein Repository mit dem Namen erstelltcodecatalyst-cfn-source-repository.

Schritt 2: AWS Rollen erstellen

In diesem Schritt erstellen Sie die folgenden AWS IAM Rollen:

  • Rolle bereitstellen — Erteilt der Aktion AWS CloudFormation Stack CodeCatalyst bereitstellen die Berechtigung, auf Ihr AWS Konto und Ihren CloudFormation Dienst zuzugreifen, wo Sie Ihre serverlose Anwendung bereitstellen werden. Die Aktion AWS CloudFormation Stack bereitstellen ist Teil Ihres Workflows.

  • Build-Rolle — Erteilt der CodeCatalyst Build-Aktion die Berechtigung, auf Ihr AWS Konto zuzugreifen und in Amazon S3 zu schreiben, wo Ihr serverloses Anwendungspaket gespeichert wird. Die Build-Aktion ist Teil Ihres Workflows.

  • Stack-Rolle — Erteilt die CloudFormation Berechtigung zum Lesen und Ändern der Ressourcen, die in der AWS SAM Vorlage angegeben sind, die Sie später bereitstellen werden. Erteilt auch die Erlaubnis für CloudWatch.

Weitere Informationen zu IAM IAMRollen finden Sie im AWS Identity and Access Management Benutzerhandbuch unter Rollen.

Anmerkung

Um Zeit zu sparen, können Sie anstelle der drei zuvor aufgeführten Rollen eine einzelne CodeCatalystWorkflowDevelopmentRole-spaceName Rolle, die so genannte Rolle, erstellen. Weitere Informationen finden Sie unter Die CodeCatalystWorkflowDevelopmentRole-spaceNameRolle für Ihr Konto und Ihren Bereich erstellen. Beachten Sie, dass die CodeCatalystWorkflowDevelopmentRole-spaceName Rolle über sehr umfangreiche Berechtigungen verfügt, die ein Sicherheitsrisiko darstellen können. Wir empfehlen, diese Rolle nur in Tutorials und Szenarien zu verwenden, in denen die Sicherheit weniger wichtig ist. In diesem Tutorial wird davon ausgegangen, dass Sie die drei zuvor aufgeführten Rollen erstellen.

Anmerkung

Eine Lambda-Ausführungsrolle ist ebenfalls erforderlich, aber Sie müssen sie jetzt nicht erstellen, da die sam-template.yml Datei sie für Sie erstellt, wenn Sie den Workflow in Schritt 5 ausführen.

Um eine Bereitstellungsrolle zu erstellen
  1. Erstellen Sie wie folgt eine Richtlinie für die Rolle:

    1. Melden Sie sich an bei AWS.

    2. Öffnen Sie die IAM-Konsole unter https://console.aws.amazon.com/iam/.

    3. Wählen Sie im Navigationsbereich Richtlinien.

    4. Wählen Sie Richtlinie erstellen aus.

    5. Wählen Sie die Registerkarte JSON aus.

    6. Löschen Sie den vorhandenen Code.

    7. Fügen Sie folgenden Code ein:

      { "Version": "2012-10-17", "Statement": [{ "Action": [ "cloudformation:CreateStack", "cloudformation:DeleteStack", "cloudformation:Describe*", "cloudformation:UpdateStack", "cloudformation:CreateChangeSet", "cloudformation:DeleteChangeSet", "cloudformation:ExecuteChangeSet", "cloudformation:SetStackPolicy", "cloudformation:ValidateTemplate", "cloudformation:List*", "iam:PassRole" ], "Resource": "*", "Effect": "Allow" }] }
      Anmerkung

      Wenn die Rolle zum ersten Mal zum Ausführen von Workflow-Aktionen verwendet wird, verwenden Sie den Platzhalter in der Ressourcenrichtlinien-Anweisung und grenzen Sie dann die Richtlinie mit dem Ressourcennamen ab, sobald sie verfügbar ist.

      "Resource": "*"
    8. Wählen Sie Next: Tags (Weiter: Tags) aus.

    9. Klicken Sie auf Weiter: Prüfen.

    10. Geben Sie im Feld Name Folgendes ein:

      codecatalyst-deploy-policy
    11. Wählen Sie Richtlinie erstellen aus.

      Sie haben jetzt eine Berechtigungsrichtlinie erstellt.

  2. Erstellen Sie die Bereitstellungsrolle wie folgt:

    1. Wählen Sie im Navigationsbereich Roles (Rollen) und dann Create role (Rolle erstellen).

    2. Wählen Sie Benutzerdefinierte Vertrauensrichtlinie.

    3. Löschen Sie die bestehende benutzerdefinierte Vertrauensrichtlinie.

    4. Fügen Sie die folgende benutzerdefinierte Vertrauensrichtlinie hinzu:

      { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": [ "codecatalyst-runner.amazonaws.com", "codecatalyst.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }
    5. Wählen Sie Weiter aus.

    6. Suchen Sie unter Berechtigungsrichtlinien nach dem entsprechenden Kontrollkästchen codecatalyst-deploy-policy und aktivieren Sie es.

    7. Wählen Sie Weiter aus.

    8. Geben Sie als Rollenname Folgendes ein:

      codecatalyst-deploy-role
    9. Geben Sie als Rollenbeschreibung Folgendes ein:

      CodeCatalyst deploy role
    10. Wählen Sie Rolle erstellen aus.

    Sie haben jetzt eine Bereitstellungsrolle mit einer Vertrauensrichtlinie und einer Berechtigungsrichtlinie erstellt.

  3. Besorgen Sie sich die Bereitstellungsrolle ARN wie folgt:

    1. Wählen Sie im Navigationsbereich Rollen aus.

    2. Geben Sie im Suchfeld den Namen der Rolle ein, die Sie gerade erstellt haben (codecatalyst-deploy-role).

    3. Wählen Sie die Rolle aus der Liste aus.

      Die Übersichtsseite der Rolle wird angezeigt.

    4. Kopieren Sie oben den ARNWert.

    Sie haben jetzt die Bereitstellungsrolle mit den entsprechenden Berechtigungen erstellt und sie erhaltenARN.

Um eine Build-Rolle zu erstellen
  1. Erstellen Sie wie folgt eine Richtlinie für die Rolle:

    1. Melden Sie sich an bei AWS.

    2. Öffnen Sie die IAM-Konsole unter https://console.aws.amazon.com/iam/.

    3. Wählen Sie im Navigationsbereich Richtlinien.

    4. Wählen Sie Richtlinie erstellen aus.

    5. Wählen Sie die Registerkarte JSON aus.

    6. Löschen Sie den vorhandenen Code.

    7. Fügen Sie folgenden Code ein:

      { "Version": "2012-10-17", "Statement": [{ "Action": [ "s3:PutObject", "iam:PassRole" ], "Resource": "*", "Effect": "Allow" }] }
      Anmerkung

      Wenn die Rolle zum ersten Mal zum Ausführen von Workflow-Aktionen verwendet wird, verwenden Sie den Platzhalter in der Ressourcenrichtlinien-Anweisung und grenzen Sie dann die Richtlinie mit dem Ressourcennamen ab, sobald sie verfügbar ist.

      "Resource": "*"
    8. Wählen Sie Next: Tags (Weiter: Tags) aus.

    9. Klicken Sie auf Weiter: Prüfen.

    10. Geben Sie im Feld Name Folgendes ein:

      codecatalyst-build-policy
    11. Wählen Sie Richtlinie erstellen aus.

      Sie haben jetzt eine Berechtigungsrichtlinie erstellt.

  2. Erstellen Sie die Build-Rolle wie folgt:

    1. Wählen Sie im Navigationsbereich Roles (Rollen) und dann Create role (Rolle erstellen).

    2. Wählen Sie Benutzerdefinierte Vertrauensrichtlinie.

    3. Löschen Sie die bestehende benutzerdefinierte Vertrauensrichtlinie.

    4. Fügen Sie die folgende benutzerdefinierte Vertrauensrichtlinie hinzu:

      { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": [ "codecatalyst-runner.amazonaws.com", "codecatalyst.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }
    5. Wählen Sie Weiter aus.

    6. Suchen Sie unter Berechtigungsrichtlinien nach dem entsprechenden Kontrollkästchen codecatalyst-build-policy und aktivieren Sie es.

    7. Wählen Sie Weiter aus.

    8. Geben Sie als Rollenname Folgendes ein:

      codecatalyst-build-role
    9. Geben Sie als Rollenbeschreibung Folgendes ein:

      CodeCatalyst build role
    10. Wählen Sie Rolle erstellen aus.

    Sie haben jetzt eine Build-Rolle mit einer Vertrauensrichtlinie und einer Berechtigungsrichtlinie erstellt.

  3. Besorgen Sie sich die Build-Rolle ARN wie folgt:

    1. Wählen Sie im Navigationsbereich Rollen aus.

    2. Geben Sie im Suchfeld den Namen der Rolle ein, die Sie gerade erstellt haben (codecatalyst-build-role).

    3. Wählen Sie die Rolle aus der Liste aus.

      Die Übersichtsseite der Rolle wird angezeigt.

    4. Kopieren Sie oben den ARNWert.

    Sie haben jetzt die Build-Rolle mit den entsprechenden Berechtigungen erstellt und sie erhaltenARN.

Um eine Stack-Rolle zu erstellen
  1. Melden Sie sich AWS mit dem Konto an, in dem Sie Ihren Stack bereitstellen möchten.

  2. Öffnen Sie die IAM-Konsole unter https://console.aws.amazon.com/iam/.

  3. Erstellen Sie die Stack-Rolle wie folgt:

    1. Wählen Sie im Navigationsbereich Rollen aus.

    2. Wählen Sie Rolle erstellen aus.

    3. Wählen Sie einen AWS -Service aus.

    4. Wählen Sie im Abschnitt Anwendungsfall eine Option CloudFormationaus der Drop-down-Liste aus.

    5. Wählen Sie das Optionsfeld CloudFormation.

    6. Wählen Sie unten Weiter aus.

    7. Suchen Sie mithilfe des Suchfeldes nach den folgenden Berechtigungsrichtlinien und aktivieren Sie dann die entsprechenden Kontrollkästchen.

      Anmerkung

      Wenn Sie nach einer Richtlinie suchen und sie nicht angezeigt wird, wählen Sie Filter löschen aus und versuchen Sie es erneut.

      • CloudWatchFullAccess

      • AWS CloudFormationFullAccess

      • IAMFullAccess

      • AWS Lambda_ FullAccess

      • Ein Administrator mazonAPIGateway

      • Amazon S3 FullAccess

      • Amazon EC2ContainerRegistryFullAccess

      Die erste Richtlinie ermöglicht den Zugriff auf Stack-Rollbacks CloudWatch , um Stack-Rollbacks zu aktivieren, wenn ein Alarm auftritt.

      Die verbleibenden Richtlinien ermöglichen den AWS SAM Zugriff auf die Dienste und Ressourcen im Stack, die in diesem Tutorial bereitgestellt werden. Weitere Informationen finden Sie unter Berechtigungen im AWS Serverless Application Model Entwicklerhandbuch.

    8. Wählen Sie Weiter aus.

    9. Geben Sie als Rollenname Folgendes ein:

      codecatalyst-stack-role
    10. Wählen Sie Rolle erstellen aus.

  4. Rufen Sie die ARN Stack-Rollen wie folgt ab:

    1. Wählen Sie im Navigationsbereich Rollen aus.

    2. Geben Sie im Suchfeld den Namen der Rolle ein, die Sie gerade erstellt haben (codecatalyst-stack-role).

    3. Wählen Sie die Rolle aus der Liste aus.

    4. Kopieren Sie den ARNWert im Abschnitt Zusammenfassung. Sie benötigen sie später.

    Sie haben jetzt die Stack-Rolle mit den entsprechenden Berechtigungen erstellt und sie erhaltenARN.

Schritt 3: AWS Rollen hinzufügen CodeCatalyst

In diesem Schritt fügen Sie der CodeCatalyst Kontoverbindung in Ihrem Bereich die Build-Rolle (codecatalyst-build-rolecodecatalyst-deploy-role) und die Bereitstellungsrolle () hinzu.

Anmerkung

Sie müssen die Stack-Rolle (codecatalyst-stack-role) nicht zur Verbindung hinzufügen. Das liegt daran, dass die Stack-Rolle von CloudFormation(nicht CodeCatalyst) verwendet wird, nachdem bereits eine Verbindung zwischen CodeCatalyst und AWS mithilfe der Deploy-Rolle hergestellt wurde. Da die Stack-Rolle nicht für den CodeCatalyst Zugriff verwendet wird AWS, muss sie keiner Kontoverbindung zugeordnet werden.

Um Ihrer Kontoverbindung Rollen hinzuzufügen, zu erstellen und bereitzustellen
  1. Navigieren CodeCatalyst Sie darin zu Ihrem Bereich.

  2. Wählen Sie AWS accounts (-Konten). Eine Liste der Kontoverbindungen wird angezeigt.

  3. Wählen Sie die Kontoverbindung aus, die dem AWS Konto entspricht, in dem Sie Ihre Build- und Deploy-Rollen erstellt haben.

  4. Wählen Sie in der AWS Managementkonsole Rollen verwalten aus.

    Die Seite IAMRolle zu Amazon CodeCatalyst Space hinzufügen wird angezeigt. Möglicherweise müssen Sie sich anmelden, um auf die Seite zuzugreifen.

  5. Wählen Sie Eine bestehende Rolle hinzufügen aus, in der Sie sie erstellt haben IAM.

    Eine Drop-down-Liste wird angezeigt. In der Liste werden alle IAM Rollen mit einer Vertrauensrichtlinie angezeigt, die die Dienstprinzipale codecatalyst-runner.amazonaws.com und die codecatalyst.amazonaws.com Dienstprinzipale umfasst.

  6. Wählen Sie in der Dropdownliste codecatalyst-build-role die Option Rolle hinzufügen aus.

  7. Wählen Sie IAMRolle hinzufügen, wählen Sie Vorhandene Rolle hinzufügen, in der Sie erstellt haben IAM, und wählen Sie in der Dropdownliste die Option auscodecatalyst-deploy-role. Wählen Sie Rolle hinzufügen aus.

    Sie haben jetzt die Rollen Build und Deploy zu Ihrem Bereich hinzugefügt.

  8. Kopieren Sie den Wert des CodeCatalyst Amazon-Anzeigenamens. Sie benötigen diesen Wert später, wenn Sie Ihren Workflow erstellen.

Schritt 4: Erstellen Sie einen Amazon S3 S3-Bucket

In diesem Schritt erstellen Sie einen Amazon S3 S3-Bucket, in dem Sie die ZIP-Datei des Bereitstellungspakets Ihrer serverlosen Anwendung speichern.

So erstellen Sie einen Amazon-S3-Bucket
  1. Öffnen Sie die Amazon S3 S3-Konsole unter https://console.aws.amazon.com/s3/.

  2. Wählen Sie im Hauptbereich Create Bucket aus.

  3. Geben Sie als Bucket-Namen Folgendes ein:

    codecatalyst-cfn-s3-bucket
  4. Wählen Sie unter AWS -Region eine Region aus. In diesem Tutorial wird davon ausgegangen, dass Sie US West (Oregon) us-west-2 ausgewählt haben. Informationen zu den von Amazon S3 unterstützten Regionen finden Sie unter Amazon Simple Storage Service-Endpunkte und Kontingente in der Allgemeine AWS-Referenz.

  5. Wählen Sie unten auf der Seite Bucket erstellen aus.

Sie haben jetzt einen Bucket mit dem Namen codecatalyst-cfn-s3-bucket in der Region USA West (Oregon) us-west-2 erstellt.

Schritt 5: Quelldateien hinzufügen

In diesem Schritt fügen Sie Ihrem CodeCatalyst Quell-Repository mehrere Anwendungsquelldateien hinzu. Der hello-world Ordner enthält die Anwendungsdateien, die Sie bereitstellen werden. Der tests Ordner enthält Komponententests. Die Ordnerstruktur ist wie folgt:

. |— hello-world | |— tests | |— unit | |— test-handler.js | |— app.js |— .npmignore |— package.json |— sam-template.yml |— setup-sam.sh

.npmignore-Datei

Die .npmignore Datei gibt an, welche Dateien und Ordner npm aus dem Anwendungspaket ausschließen soll. In diesem Tutorial schließt npm den tests Ordner aus, da er nicht Teil der Anwendung ist.

Um die Datei „.npmignore“ hinzuzufügen
  1. Öffnen Sie die CodeCatalyst Konsole unter https://codecatalyst.aws/.

  2. Wählen Sie Ihr Projekt, codecatalyst-cfn-project

  3. Wählen Sie im Navigationsbereich Code und dann Source Repositories aus.

  4. Wählen Sie aus der Liste der Quell-Repositorys Ihr Repository aus. codecatalyst-cfn-source-repository

  5. Wählen Sie unter Dateien die Option Datei erstellen aus.

  6. Geben Sie als Dateiname Folgendes ein:

    .npmignore
  7. Geben Sie in das Textfeld den folgenden Code ein:

    tests/*
  8. Wählen Sie Commit und anschließend erneut Commit aus.

    Sie haben jetzt eine Datei mit dem Namen .npmignore im Stammverzeichnis Ihres Repositorys erstellt.

package.json-Datei

Die package.json Datei enthält wichtige Metadaten zu Ihrem Node-Projekt wie Projektname, Versionsnummer, Beschreibung, Abhängigkeiten und andere Details, die beschreiben, wie Sie mit Ihrer Anwendung interagieren und sie ausführen.

Die package.json in diesem Tutorial enthaltene Liste enthält eine Liste von Abhängigkeiten und ein test Skript. Das Testskript macht Folgendes:

Um die Datei package.json hinzuzufügen
  1. Wählen Sie in Ihrem Repository unter Dateien die Option Datei erstellen aus.

  2. Geben Sie als Dateiname Folgendes ein:

    package.json
  3. Geben Sie in das Textfeld den folgenden Code ein:

    { "name": "hello_world", "version": "1.0.0", "description": "hello world sample for NodeJS", "main": "app.js", "repository": "https://github.com/awslabs/aws-sam-cli/tree/develop/samcli/local/init/templates/cookiecutter-aws-sam-hello-nodejs", "author": "SAM CLI", "license": "MIT", "dependencies": { "axios": "^0.21.1", "nyc": "^15.1.0" }, "scripts": { "test": "nyc --reporter=clover mocha hello-world/tests/unit/ --reporter xunit --reporter-option output=junit.xml" }, "devDependencies": { "aws-sdk": "^2.815.0", "chai": "^4.2.0", "mocha": "^8.2.1" } }
  4. Wählen Sie Commit und anschließend erneut Commit aus.

    Sie haben jetzt eine Datei mit dem Namen package.json zum Stammverzeichnis des Repositorys hinzugefügt.

Datei sam-template.yml

Die sam-template.yml Datei enthält die Anweisungen für die Bereitstellung der Lambda-Funktion und des API Gateways und deren gemeinsame Konfiguration. Sie folgt der AWS Serverless Application Model Vorlagenspezifikation, die die AWS CloudFormation Vorlagenspezifikation erweitert.

In diesem Tutorial verwenden Sie eine AWS SAM Vorlage anstelle einer regulären AWS CloudFormation Vorlage, da sie einen hilfreichen AWS: :Serverless: :Function Ressourcentyp AWS SAM bietet. Dieser Typ führt viele behind-the-scenes Konfigurationen durch, die Sie normalerweise ausschreiben müssen, um die grundlegende Syntax zu verwenden. CloudFormation Beispielsweise AWS::Serverless::Function erstellt der eine Lambda-Funktion, eine Lambda-Ausführungsrolle und Ereignisquellenzuordnungen, mit denen die Funktion gestartet wird. Sie müssen all das programmieren, wenn Sie es mit Basic schreiben möchten. CloudFormation

In diesem Tutorial wird zwar eine vorgefertigte Vorlage verwendet, Sie können jedoch eine Vorlage als Teil Ihres Workflows mithilfe einer Build-Aktion generieren. Weitere Informationen finden Sie unter Einen AWS CloudFormation Stack bereitstellen.

Um die Datei sam-template.yml hinzuzufügen
  1. Wählen Sie in Ihrem Repository unter Dateien die Option Datei erstellen aus.

  2. Geben Sie als Dateiname Folgendes ein:

    sam-template.yml
  3. Geben Sie in das Textfeld den folgenden Code ein:

    AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Description: > serverless-api Sample SAM Template for serverless-api # More info about Globals: https://github.com/awslabs/serverless-application-model/blob/master/docs/globals.rst Globals: Function: Timeout: 3 Resources: HelloWorldFunction: Type: AWS::Serverless::Function # For details on this resource type, see https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction Properties: CodeUri: hello-world/ Handler: app.lambdaHandler Runtime: nodejs12.x Events: HelloWorld: Type: Api # For details on this event source type, see https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api Properties: Path: /hello Method: get Outputs: # ServerlessRestApi is an implicit API created out of the events key under Serverless::Function # Find out about other implicit resources you can reference within AWS SAM at # https://github.com/awslabs/serverless-application-model/blob/master/docs/internals/generated_resources.rst#api HelloWorldApi: Description: "API Gateway endpoint URL for the Hello World function" Value: !Sub "https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/hello/" HelloWorldFunction: Description: "Hello World Lambda function ARN" Value: !GetAtt HelloWorldFunction.Arn HelloWorldFunctionIamRole: Description: "Implicit Lambda execution role created for the Hello World function" Value: !GetAtt HelloWorldFunctionRole.Arn
  4. Wählen Sie Commit und anschließend erneut Commit aus.

    Sie haben jetzt eine Datei mit sam-template.yml dem Namen im Stammordner Ihres Repositorys hinzugefügt.

Datei setup-sam.sh

Die setup-sam.sh Datei enthält Anweisungen zum Herunterladen und Installieren des AWS SAM CLI Dienstprogramms. Der Workflow verwendet dieses Hilfsprogramm, um die hello-world Quelle zu verpacken.

Um die Datei setup-sam.sh hinzuzufügen
  1. Wählen Sie in Ihrem Repository unter Dateien die Option Datei erstellen aus.

  2. Geben Sie als Dateiname Folgendes ein:

    setup-sam.sh
  3. Geben Sie in das Textfeld den folgenden Code ein:

    #!/usr/bin/env bash echo "Setting up sam" yum install unzip -y curl -LO https://github.com/aws/aws-sam-cli/releases/latest/download/aws-sam-cli-linux-x86_64.zip unzip -qq aws-sam-cli-linux-x86_64.zip -d sam-installation-directory ./sam-installation-directory/install; export AWS_DEFAULT_REGION=us-west-2

    Ersetzen Sie im vorherigen Code us-west-2 mit Ihrer AWS Region.

  4. Wählen Sie Commit und anschließend erneut Commit aus.

    Sie haben jetzt eine Datei mit dem Namen setup-sam.sh zum Stammverzeichnis des Repositorys hinzugefügt.

Datei app.js

Das app.js enthält den Lambda-Funktionscode. In diesem Tutorial gibt der Code den Text hello world zurück.

Um die Datei app.js hinzuzufügen
  1. Wählen Sie in Ihrem Repository unter Dateien die Option Datei erstellen aus.

  2. Geben Sie als Dateiname Folgendes ein:

    hello-world/app.js
  3. Geben Sie in das Textfeld den folgenden Code ein:

    // const axios = require('axios') // const url = 'http://checkip.amazonaws.com/'; let response; /** * * Event doc: https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-lambda-proxy-integrations.html#api-gateway-simple-proxy-for-lambda-input-format * @param {Object} event - API Gateway Lambda Proxy Input Format * * Context doc: https://docs.aws.amazon.com/lambda/latest/dg/nodejs-prog-model-context.html * @param {Object} context * * Return doc: https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-lambda-proxy-integrations.html * @returns {Object} object - API Gateway Lambda Proxy Output Format * */ exports.lambdaHandler = async (event, context) => { try { // const ret = await axios(url); response = { 'statusCode': 200, 'body': JSON.stringify({ message: 'hello world', // location: ret.data.trim() }) } } catch (err) { console.log(err); return err; } return response };
  4. Wählen Sie Commit und anschließend erneut Commit aus.

    Sie haben jetzt einen Ordner mit dem Namen hello-world und eine Datei mit dem Namen erstelltapp.js.

Datei test-handler.js

Die test-handler.js Datei enthält Komponententests für die Lambda-Funktion.

Um die Datei test-handler.js hinzuzufügen
  1. Wählen Sie in Ihrem Repository unter Dateien die Option Datei erstellen aus.

  2. Geben Sie als Dateiname Folgendes ein:

    hello-world/tests/unit/test-handler.js
  3. Geben Sie in das Textfeld den folgenden Code ein:

    'use strict'; const app = require('../../app.js'); const chai = require('chai'); const expect = chai.expect; var event, context; describe('Tests index', function () { it('verifies successful response', async () => { const result = await app.lambdaHandler(event, context) expect(result).to.be.an('object'); expect(result.statusCode).to.equal(200); expect(result.body).to.be.an('string'); let response = JSON.parse(result.body); expect(response).to.be.an('object'); expect(response.message).to.be.equal("hello world"); // expect(response.location).to.be.an("string"); }); });
  4. Wählen Sie Commit und anschließend erneut Commit aus.

    Sie haben jetzt eine Datei mit test-handler.js dem Namen unter dem hello-world/tests/unit Ordner hinzugefügt.

Sie haben jetzt alle Ihre Quelldateien hinzugefügt.

Nehmen Sie sich einen Moment Zeit, um Ihre Arbeit zu überprüfen und sicherzustellen, dass Sie alle Dateien in den richtigen Ordnern abgelegt haben. Die Ordnerstruktur ist wie folgt:

. |— hello-world | |— tests | |— unit | |— test-handler.js | |— app.js |— .npmignore |— README.md |— package.json |— sam-template.yml |— setup-sam.sh

Schritt 6: Erstellen Sie einen Workflow und führen Sie ihn aus

In diesem Schritt erstellen Sie einen Workflow, der Ihren Lambda-Quellcode verpackt und bereitstellt. Der Workflow besteht aus den folgenden Bausteinen, die sequentiell ausgeführt werden:

  • Ein Trigger — Dieser Trigger startet die Workflow-Ausführung automatisch, wenn Sie eine Änderung an Ihr Quell-Repository übertragen. Weitere Informationen zu Auslösern finden Sie unter Automatisches Starten einer Workflow-Ausführung mithilfe von Triggern.

  • Eine Testaktion (Test) — Beim Trigger installiert diese Aktion den Node-Paketmanager (npm) und führt dann den npm run test Befehl aus. Dieser Befehl weist npm an, das in der test Datei definierte Skript auszuführen. package.json Das test Skript wiederum führt die Komponententests aus und generiert zwei Berichte: einen Testbericht (junit.xml) und einen Bericht über die Codeabdeckung (clover.xml). Weitere Informationen finden Sie unter package.json-Datei.

    Als Nächstes wandelt die Testaktion die XML Berichte in CodeCatalyst Berichte um und zeigt sie in der CodeCatalyst Konsole auf der Registerkarte Berichte der Testaktion an.

    Weitere Informationen zur Testaktion finden Sie unterTesten mit Workflows.

  • Eine Build-Aktion (BuildBackend) — Nach Abschluss der Testaktion lädt die Build-Aktion die herunter und installiert sie AWS SAM CLI, packt die hello-world Quelle und kopiert das Paket in Ihren Amazon S3 S3-Bucket, wo es vom Lambda-Service erwartet wird. Die Aktion gibt auch eine neue AWS SAM Vorlagendatei namens aus sam-template-packaged.yml und platziert sie in einem Ausgabeartefakt namens. buildArtifact

    Weitere Informationen zur Build-Aktion finden Sie unterBauen mit Workflows.

  • Eine Bereitstellungsaktion (DeployCloudFormationStack) — Nach Abschluss der Build-Aktion sucht die Bereitstellungsaktion nach dem von der Build-Aktion (buildArtifact) generierten Ausgabeartefakt, findet die darin enthaltene AWS SAM Vorlage und führt dann die Vorlage aus. Die AWS SAM Vorlage erstellt einen Stack, der die serverlose Anwendung bereitstellt.

So erstellen Sie ein Workflow
  1. Wählen Sie im Navigationsbereich CI/CD und dann Workflows aus.

  2. Wählen Sie Workflow erstellen aus.

  3. Wählen Sie für Quell-Repository die Optioncodecatalyst-cfn-source-repository.

  4. Wählen Sie für Branch die Optionmain.

  5. Wählen Sie Erstellen.

  6. Löschen Sie den YAML Beispielcode.

  7. Fügen Sie den folgenden YAML Code hinzu:

    Anmerkung

    Im folgenden YAML Code können Sie die Connections: Abschnitte weglassen, wenn Sie möchten. Wenn Sie diese Abschnitte weglassen, müssen Sie sicherstellen, dass die im Feld Standardrolle angegebene IAM Rolle in Ihrer Umgebung die unter beschriebenen Berechtigungen und Vertrauensrichtlinien für beide Rollen enthält. Schritt 2: AWS Rollen erstellen Weitere Informationen zum Einrichten einer Umgebung mit einer IAM Standardrolle finden Sie unterErstellen einer Umgebung.

    Name: codecatalyst-cfn-workflow SchemaVersion: 1.0 Triggers: - Type: PUSH Branches: - main Actions: Test: Identifier: aws/managed-test@v1 Inputs: Sources: - WorkflowSource Outputs: Reports: CoverageReport: Format: CLOVERXML IncludePaths: - "coverage/*" TestReport: Format: JUNITXML IncludePaths: - junit.xml Configuration: Steps: - Run: npm install - Run: npm run test BuildBackend: Identifier: aws/build@v1 DependsOn: - Test Environment: Name: codecatalyst-cfn-environment Connections: - Name: codecatalyst-account-connection Role: codecatalyst-build-role Inputs: Sources: - WorkflowSource Configuration: Steps: - Run: . ./setup-sam.sh - Run: sam package --template-file sam-template.yml --s3-bucket codecatalyst-cfn-s3-bucket --output-template-file sam-template-packaged.yml --region us-west-2 Outputs: Artifacts: - Name: buildArtifact Files: - "**/*" DeployCloudFormationStack: Identifier: aws/cfn-deploy@v1 DependsOn: - BuildBackend Environment: Name: codecatalyst-cfn-environment Connections: - Name: codecatalyst-account-connection Role: codecatalyst-deploy-role Inputs: Artifacts: - buildArtifact Sources: [] Configuration: name: codecatalyst-cfn-stack region: us-west-2 role-arn: arn:aws:iam::111122223333:role/StackRole template: ./sam-template-packaged.yml capabilities: CAPABILITY_IAM,CAPABILITY_AUTO_EXPAND

    Ersetzen Sie im vorherigen Code:

    • Beide Instanzen von codecatalyst-cfn-environment mit dem Namen Ihrer Umgebung.

    • Beide Instanzen von codecatalyst-account-connection mit dem Anzeigenamen Ihrer Kontoverbindung. Der Anzeigename kann eine Zahl sein. Weitere Informationen finden Sie unter Schritt 3: AWS Rollen hinzufügen CodeCatalyst.

    • codecatalyst-build-role mit dem Namen der Build-Rolle, in der Sie erstellt habenSchritt 2: AWS Rollen erstellen.

    • codecatalyst-cfn-s3-bucket mit dem Namen des Amazon S3 S3-Buckets, in dem Sie ihn erstellt habenSchritt 4: Erstellen Sie einen Amazon S3 S3-Bucket.

    • Beide Instanzen von us-west-2 mit der Region, in der sich Ihr Amazon S3 S3-Bucket befindet (erste Instance) und in der Ihr Stack bereitgestellt wird (zweite Instance). Diese Regionen können unterschiedlich sein. In diesem Tutorial wird davon ausgegangen, dass beide Regionen auf eingestellt sindus-west-2. Einzelheiten zu den von Amazon S3 und AWS CloudFormation unterstützten Regionen finden Sie unter Service-Endpunkte und Kontingente in der Allgemeine AWS-Referenz.

    • codecatalyst-deploy-role mit dem Namen der Bereitstellungsrolle, in Schritt 2: AWS Rollen erstellen der Sie erstellt haben.

    • codecatalyst-cfn-environment mit dem Namen der Umgebung, in der Sie erstellt habenVoraussetzungen.

    • arn:aws:iam::111122223333:role/StackRole mit dem Amazon-Ressourcennamen (ARN) der Stack-Rolle, in der Sie erstellt habenSchritt 2: AWS Rollen erstellen.

      Anmerkung

      Wenn Sie sich entschieden haben, keine Build-, Deployment- und Stack-Rollen zu erstellen, ersetzen Sie codecatalyst-build-role, codecatalyst-deploy-role, und arn:aws:iam::111122223333:role/StackRole mit dem Namen oder ARN der CodeCatalystWorkflowDevelopmentRole-spaceName Rolle. Weitere Informationen über diese Rolle finden Sie unter Schritt 2: AWS Rollen erstellen.

    Informationen zu den Eigenschaften des zuvor gezeigten Codes finden Sie unterAktion „ AWS CloudFormation Stack bereitstellen“ YAML.

  8. (Optional) Wählen Sie „Validieren“, um sicherzustellen, dass der YAML Code gültig ist, bevor Sie ihn bestätigen.

  9. Wählen Sie Commit (Übergeben).

  10. Geben Sie im Dialogfeld „Workflow bestätigen“ Folgendes ein:

    1. Behalten Sie als Workflow-Dateiname die Standardeinstellung beicodecatalyst-cfn-workflow.

    2. Geben Sie für Commit-Nachricht Folgendes ein:

      add initial workflow file
    3. Wählen Sie für Repository codecatalyst-cfn-source-repository.

    4. Wählen Sie als Branch-Name die Option main aus.

    5. Wählen Sie Commit (Übergeben).

    Sie haben jetzt einen Workflow erstellt. Eine Workflow-Ausführung wird aufgrund des oben im Workflow definierten Triggers automatisch gestartet. Insbesondere, als Sie die codecatalyst-cfn-workflow.yaml Datei in Ihr Quell-Repository übernommen (und per Push übertragen) haben, hat der Trigger die Workflow-Ausführung gestartet.

Um den laufenden Workflow-Lauf zu sehen
  1. Wählen Sie im Navigationsbereich CI/CD und dann Workflows aus.

  2. Wählen Sie den Workflow aus, den Sie gerade erstellt haben:. codecatalyst-cfn-workflow

  3. Wählen Sie die Registerkarte „Läufe“.

  4. Wählen Sie in der Spalte Run-ID die Run-ID aus.

  5. Wählen Sie Test, um den Fortschritt der Tests zu sehen.

  6. Wählen Sie BuildBackend, um den Baufortschritt zu sehen.

  7. Wählen Sie DeployCloudFormationStackdiese Option, um den Fortschritt der Bereitstellung zu sehen.

    Weitere Informationen zum Anzeigen von Ausführungsdetails finden Sie unterStatus und Details der Workflow-Ausführung anzeigen.

  8. Wenn die DeployCloudFormationStackAktion abgeschlossen ist, gehen Sie wie folgt vor:

    • Wenn die Workflow-Ausführung erfolgreich war, fahren Sie mit dem nächsten Verfahren fort.

    • Wenn die Workflow-Ausführung beim Test oder bei der BuildBackendAktion fehlgeschlagen ist, wählen Sie Protokolle aus, um das Problem zu beheben.

    • Wenn die Workflow-Ausführung bei der DeployCloudFormationStackAktion fehlgeschlagen ist, wählen Sie die Aktion Bereitstellen und dann die Registerkarte Zusammenfassung aus. Scrollen Sie zum Abschnitt CloudFormation Ereignisse, um die detaillierte Fehlermeldung anzuzeigen. Wenn ein Rollback aufgetreten ist, löschen Sie den codecatalyst-cfn-stack Stack über die AWS CloudFormation Konsole, AWS bevor Sie den Workflow erneut ausführen.

Um die Bereitstellung zu überprüfen
  1. Wählen Sie nach einer erfolgreichen Bereitstellung in der horizontalen Menüleiste oben die Option Variablen (7) aus. (Wählen Sie im Bereich auf der rechten Seite nicht Variablen aus.)

  2. Fügen Sie HelloWorldApidas als Nächstes https:// URL in einen Browser ein.

    Es wird eine JSONHello-World-Nachricht von der Lambda-Funktion angezeigt, die darauf hinweist, dass der Workflow die Lambda-Funktion und das API Gateway erfolgreich bereitgestellt und konfiguriert hat.

    Tipp

    Sie können dies mit einigen kleinen URL Konfigurationen im Workflow-Diagramm CodeCatalyst anzeigen lassen. Weitere Informationen finden Sie unter App URL im Workflow-Diagramm anzeigen.

Um die Ergebnisse der Komponententests und die Codeabdeckung zu überprüfen
  1. Wählen Sie im Workflow-Diagramm Test und dann Berichte aus.

  2. Wählen TestReportSie, ob Sie sich die Ergebnisse der Komponententests oder die Codeabdeckung der getesteten Dateien anzeigen lassen möchten CoverageReport, in diesem Fall app.js undtest-handler.js.

Um die bereitgestellten Ressourcen zu überprüfen
  1. Melden Sie sich bei der an AWS Management Console und öffnen Sie die API Gateway-Konsole unter https://console.aws.amazon.com/apigateway/.

  2. Beachten Sie codecatalyst-cfn-stackAPI, dass die AWS SAM Vorlage erstellt wurde. Der API Name stammt aus dem Configuration/name Wert in der Workflow-Definitionsdatei (codecatalyst-cfn-workflow.yaml).

  3. Öffnen Sie die AWS Lambda Konsole unter https://console.aws.amazon.com/lambda/.

  4. Wählen Sie im Navigationsbereich Funktionen aus.

  5. Wählen Sie Ihre Lambda-Funktion,codecatalyst-cfn-stack-HelloWorldFunction-string.

  6. Sie können sehen, wie das API Gateway ein Auslöser für die Funktion ist. Diese Integration wurde automatisch nach dem AWS SAM AWS::Serverless::Function Ressourcentyp konfiguriert.

Schritt 7: Nehmen Sie eine Änderung vor

In diesem Schritt nehmen Sie eine Änderung an Ihrem Lambda-Quellcode vor und übernehmen diese. Mit diesem Commit wird ein neuer Workflow-Lauf gestartet. Bei diesem Lauf wird die neue Lambda-Funktion in einem blaugrünen Schema bereitgestellt, das die in der Lambda-Konsole angegebene Standardkonfiguration zur Verkehrsverlagerung verwendet.

Um eine Änderung an Ihrer Lambda-Quelle vorzunehmen
  1. Navigieren Sie in CodeCatalyst zu Ihrem Projekt.

  2. Wählen Sie im Navigationsbereich Code und dann Quell-Repositories aus.

  3. Wählen Sie Ihr Quell-Repository codecatalyst-cfn-source-repository aus.

  4. Ändern Sie die Anwendungsdatei:

    1. Wählen Sie den Ordner hello-world aus.

    2. Wählen Sie die app.js Datei aus.

    3. Wählen Sie Bearbeiten aus.

    4. Wechseln Sie in Zeile 23 hello world zuTutorial complete!.

    5. Wählen Sie Commit und anschließend erneut Commit aus.

      Durch den Commit wird ein Workflow-Lauf gestartet. Dieser Lauf schlägt fehl, weil Sie die Komponententests nicht aktualisiert haben, um die Namensänderung widerzuspiegeln.

  5. Aktualisieren Sie die Komponententests:

    1. Wählen Sie hello-world\tests\unit\test-handler.js.

    2. Wählen Sie Bearbeiten aus.

    3. Wechseln Sie in Zeile 19 hello world zuTutorial complete!.

    4. Wählen Sie Commit und anschließend erneut Commit aus.

      Durch den Commit wird ein weiterer Workflow-Lauf gestartet. Dieser Lauf wird erfolgreich sein.

  6. Wählen Sie im Navigationsbereich CI/CD und dann Workflows aus.

  7. Wählen Sie codecatalyst-cfn-workflow und wählen Sie dann Runs aus.

  8. Wählen Sie die Lauf-ID des letzten Laufs aus. Es sollte noch in Bearbeitung sein.

  9. Wählen Sie Test und BuildBackend, DeployCloudFormationStackum den Fortschritt der Workflow-Ausführung zu sehen.

  10. Wenn der Workflow abgeschlossen ist, wählen Sie oben Variablen (7) aus.

  11. Fügen Sie HelloWorldApidas als Nächstes https:// URL in einen Browser ein.

    Im Browser wird eine Tutorial complete! Meldung angezeigt, die darauf hinweist, dass Ihre neue Anwendung erfolgreich bereitgestellt wurde.

Bereinigen

Bereinigen Sie die in diesem Tutorial verwendeten Dateien und Dienste, um zu vermeiden, dass dafür Gebühren anfallen.

Um in der CodeCatalyst Konsole aufzuräumen
  1. Öffnen Sie die CodeCatalyst Konsole unter https://codecatalyst.aws/.

  2. Löschencodecatalyst-cfn-workflow.

  3. Löschencodecatalyst-cfn-environment.

  4. Löschencodecatalyst-cfn-source-repository.

  5. Löschencodecatalyst-cfn-project.

Zum Aufräumen in der AWS Management Console
  1. Aufräumen CloudFormation, wie folgt:

    1. Öffnen Sie die AWS CloudFormation Konsole unter https://console.aws.amazon.com/cloudformation.

    2. Löschen Sie das codecatalyst-cfn-stack.

      Durch das Löschen des Stacks werden alle Tutorial-Ressourcen aus den API Gateway- und Lambda-Diensten entfernt.

  2. Bereinigen Sie in Amazon S3 wie folgt:

    1. Öffnen Sie die Amazon S3 S3-Konsole unter https://console.aws.amazon.com/s3/.

    2. Wählen Sie das Symbol codecatalyst-cfn-s3-bucket.

    3. Löschen Sie den Inhalt des Buckets.

    4. Löschen Sie den Bucket.

  3. Räumen IAM Sie wie folgt auf:

    1. Öffnen Sie die IAM-Konsole unter https://console.aws.amazon.com/iam/.

    2. Löschen Sie das codecatalyst-deploy-policy.

    3. Löschen Sie das codecatalyst-build-policy.

    4. Löschen Sie das codecatalyst-stack-policy.

    5. Löschen Sie das codecatalyst-deploy-role.

    6. Löschen Sie das codecatalyst-build-role.

    7. Löschen Sie das codecatalyst-stack-role.

In diesem Tutorial haben Sie gelernt, wie Sie eine serverlose Anwendung mithilfe eines CodeCatalyst Workflows und einer CloudFormation Stack-Aktion bereitstellen als AWS CloudFormation Stack bereitstellen.