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.
Themen
- Voraussetzungen
- Schritt 1: Erstellen Sie ein Quell-Repository
- Schritt 2: AWS Rollen erstellen
- Schritt 3: AWS Rollen hinzufügen CodeCatalyst
- Schritt 4: Erstellen Sie einen Amazon S3 S3-Bucket
- Schritt 5: Quelldateien hinzufügen
- Schritt 6: Erstellen Sie einen Workflow und führen Sie ihn aus
- Schritt 7: Nehmen Sie eine Änderung vor
- Bereinigen
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
-
Wählen Sie im Navigationsbereich Code und dann Quell-Repositories aus. CodeCatalyst
-
Wählen Sie Repository hinzufügen und anschließend Repository erstellen aus.
-
Geben Sie im Feld Repository-Name Folgendes ein:
codecatalyst-cfn-source-repository
-
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-
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 spaceName
CodeCatalystWorkflowDevelopmentRole-
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.spaceName
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
-
Erstellen Sie wie folgt eine Richtlinie für die Rolle:
-
Melden Sie sich an bei AWS.
Öffnen Sie die IAM-Konsole unter https://console.aws.amazon.com/iam/
. -
Wählen Sie im Navigationsbereich Richtlinien.
-
Wählen Sie Richtlinie erstellen aus.
-
Wählen Sie die Registerkarte JSON aus.
-
Löschen Sie den vorhandenen Code.
-
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": "*"
-
Wählen Sie Next: Tags (Weiter: Tags) aus.
-
Klicken Sie auf Weiter: Prüfen.
-
Geben Sie im Feld Name Folgendes ein:
codecatalyst-deploy-policy
-
Wählen Sie Richtlinie erstellen aus.
Sie haben jetzt eine Berechtigungsrichtlinie erstellt.
-
-
Erstellen Sie die Bereitstellungsrolle wie folgt:
-
Wählen Sie im Navigationsbereich Roles (Rollen) und dann Create role (Rolle erstellen).
-
Wählen Sie Benutzerdefinierte Vertrauensrichtlinie.
-
Löschen Sie die bestehende benutzerdefinierte Vertrauensrichtlinie.
-
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" } ] }
-
Wählen Sie Weiter aus.
-
Suchen Sie unter Berechtigungsrichtlinien nach dem entsprechenden Kontrollkästchen
codecatalyst-deploy-policy
und aktivieren Sie es. -
Wählen Sie Weiter aus.
-
Geben Sie als Rollenname Folgendes ein:
codecatalyst-deploy-role
-
Geben Sie als Rollenbeschreibung Folgendes ein:
CodeCatalyst deploy role
-
Wählen Sie Rolle erstellen aus.
Sie haben jetzt eine Bereitstellungsrolle mit einer Vertrauensrichtlinie und einer Berechtigungsrichtlinie erstellt.
-
-
Besorgen Sie sich die Bereitstellungsrolle ARN wie folgt:
-
Wählen Sie im Navigationsbereich Rollen aus.
-
Geben Sie im Suchfeld den Namen der Rolle ein, die Sie gerade erstellt haben (
codecatalyst-deploy-role
). -
Wählen Sie die Rolle aus der Liste aus.
Die Übersichtsseite der Rolle wird angezeigt.
-
Kopieren Sie oben den ARNWert.
Sie haben jetzt die Bereitstellungsrolle mit den entsprechenden Berechtigungen erstellt und sie erhaltenARN.
-
Um eine Build-Rolle zu erstellen
-
Erstellen Sie wie folgt eine Richtlinie für die Rolle:
-
Melden Sie sich an bei AWS.
Öffnen Sie die IAM-Konsole unter https://console.aws.amazon.com/iam/
. -
Wählen Sie im Navigationsbereich Richtlinien.
-
Wählen Sie Richtlinie erstellen aus.
-
Wählen Sie die Registerkarte JSON aus.
-
Löschen Sie den vorhandenen Code.
-
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": "*"
-
Wählen Sie Next: Tags (Weiter: Tags) aus.
-
Klicken Sie auf Weiter: Prüfen.
-
Geben Sie im Feld Name Folgendes ein:
codecatalyst-build-policy
-
Wählen Sie Richtlinie erstellen aus.
Sie haben jetzt eine Berechtigungsrichtlinie erstellt.
-
-
Erstellen Sie die Build-Rolle wie folgt:
-
Wählen Sie im Navigationsbereich Roles (Rollen) und dann Create role (Rolle erstellen).
-
Wählen Sie Benutzerdefinierte Vertrauensrichtlinie.
-
Löschen Sie die bestehende benutzerdefinierte Vertrauensrichtlinie.
-
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" } ] }
-
Wählen Sie Weiter aus.
-
Suchen Sie unter Berechtigungsrichtlinien nach dem entsprechenden Kontrollkästchen
codecatalyst-build-policy
und aktivieren Sie es. -
Wählen Sie Weiter aus.
-
Geben Sie als Rollenname Folgendes ein:
codecatalyst-build-role
-
Geben Sie als Rollenbeschreibung Folgendes ein:
CodeCatalyst build role
-
Wählen Sie Rolle erstellen aus.
Sie haben jetzt eine Build-Rolle mit einer Vertrauensrichtlinie und einer Berechtigungsrichtlinie erstellt.
-
-
Besorgen Sie sich die Build-Rolle ARN wie folgt:
-
Wählen Sie im Navigationsbereich Rollen aus.
-
Geben Sie im Suchfeld den Namen der Rolle ein, die Sie gerade erstellt haben (
codecatalyst-build-role
). -
Wählen Sie die Rolle aus der Liste aus.
Die Übersichtsseite der Rolle wird angezeigt.
-
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
-
Melden Sie sich AWS mit dem Konto an, in dem Sie Ihren Stack bereitstellen möchten.
Öffnen Sie die IAM-Konsole unter https://console.aws.amazon.com/iam/
. -
Erstellen Sie die Stack-Rolle wie folgt:
-
Wählen Sie im Navigationsbereich Rollen aus.
-
Wählen Sie Rolle erstellen aus.
-
Wählen Sie einen AWS -Service aus.
-
Wählen Sie im Abschnitt Anwendungsfall eine Option CloudFormationaus der Drop-down-Liste aus.
-
Wählen Sie das Optionsfeld CloudFormation.
-
Wählen Sie unten Weiter aus.
-
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.
-
-
Wählen Sie Weiter aus.
-
Geben Sie als Rollenname Folgendes ein:
codecatalyst-stack-role
-
Wählen Sie Rolle erstellen aus.
-
-
Rufen Sie die ARN Stack-Rollen wie folgt ab:
-
Wählen Sie im Navigationsbereich Rollen aus.
-
Geben Sie im Suchfeld den Namen der Rolle ein, die Sie gerade erstellt haben (
codecatalyst-stack-role
). -
Wählen Sie die Rolle aus der Liste aus.
-
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-role
codecatalyst-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
-
Navigieren CodeCatalyst Sie darin zu Ihrem Bereich.
-
Wählen Sie AWS accounts (-Konten). Eine Liste der Kontoverbindungen wird angezeigt.
-
Wählen Sie die Kontoverbindung aus, die dem AWS Konto entspricht, in dem Sie Ihre Build- und Deploy-Rollen erstellt haben.
-
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.
-
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 diecodecatalyst.amazonaws.com
Dienstprinzipale umfasst. -
Wählen Sie in der Dropdownliste
codecatalyst-build-role
die Option Rolle hinzufügen aus. -
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 aus
codecatalyst-deploy-role
. Wählen Sie Rolle hinzufügen aus.Sie haben jetzt die Rollen Build und Deploy zu Ihrem Bereich hinzugefügt.
-
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
Öffnen Sie die Amazon S3 S3-Konsole unter https://console.aws.amazon.com/s3/
. -
Wählen Sie im Hauptbereich Create Bucket aus.
-
Geben Sie als Bucket-Namen Folgendes ein:
codecatalyst-cfn-s3-bucket
-
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.
-
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
Öffnen Sie die CodeCatalyst Konsole unter https://codecatalyst.aws/.
-
Wählen Sie Ihr Projekt,
codecatalyst-cfn-project
-
Wählen Sie im Navigationsbereich Code und dann Source Repositories aus.
-
Wählen Sie aus der Liste der Quell-Repositorys Ihr Repository aus.
codecatalyst-cfn-source-repository
-
Wählen Sie unter Dateien die Option Datei erstellen aus.
-
Geben Sie als Dateiname Folgendes ein:
.npmignore
-
Geben Sie in das Textfeld den folgenden Code ein:
tests/*
-
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:
-
Unter Verwendung von Mocha
führt das Testskript die in angegebenen Komponententests aus hello-world/tests/unit/
und schreibt die Ergebnisse mithilfe des Xunit-Reporters in einejunit.xml
Datei. -
Unter Verwendung von Istanbul (NYC)
generiert das Testskript mithilfe des Clover Reporters einen Bericht über die Codeabdeckung ( clover.xml
).Weitere Informationen finden Sie in der Istanbul-Dokumentation unter Verwenden alternativer Reporter .
Um die Datei package.json hinzuzufügen
-
Wählen Sie in Ihrem Repository unter Dateien die Option Datei erstellen aus.
-
Geben Sie als Dateiname Folgendes ein:
package.json
-
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" } }
-
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
-
Wählen Sie in Ihrem Repository unter Dateien die Option Datei erstellen aus.
-
Geben Sie als Dateiname Folgendes ein:
sam-template.yml
-
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
-
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
-
Wählen Sie in Ihrem Repository unter Dateien die Option Datei erstellen aus.
-
Geben Sie als Dateiname Folgendes ein:
setup-sam.sh
-
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. -
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
-
Wählen Sie in Ihrem Repository unter Dateien die Option Datei erstellen aus.
-
Geben Sie als Dateiname Folgendes ein:
hello-world/app.js
-
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 };
-
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
-
Wählen Sie in Ihrem Repository unter Dateien die Option Datei erstellen aus.
-
Geben Sie als Dateiname Folgendes ein:
hello-world/tests/unit/test-handler.js
-
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"); }); });
-
Wählen Sie Commit und anschließend erneut Commit aus.
Sie haben jetzt eine Datei mit
test-handler.js
dem Namen unter demhello-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 dertest
Datei definierte Skript auszuführen.package.json
Dastest
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 diehello-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 aussam-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
-
Wählen Sie im Navigationsbereich CI/CD und dann Workflows aus.
-
Wählen Sie Workflow erstellen aus.
-
Wählen Sie für Quell-Repository die Option
codecatalyst-cfn-source-repository
. -
Wählen Sie für Branch die Option
main
. -
Wählen Sie Erstellen.
-
Löschen Sie den YAML Beispielcode.
-
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-bucketcodecatalyst-cfn-s3-bucket
--output-template-file sam-template-packaged.yml --regionus-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_EXPANDErsetzen 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
, undarn:aws:iam::111122223333:role/StackRole
mit dem Namen oder ARN derCodeCatalystWorkflowDevelopmentRole-
Rolle. Weitere Informationen über diese Rolle finden Sie unter Schritt 2: AWS Rollen erstellen.spaceName
Informationen zu den Eigenschaften des zuvor gezeigten Codes finden Sie unterAktion „ AWS CloudFormation Stack bereitstellen“ YAML.
-
-
(Optional) Wählen Sie „Validieren“, um sicherzustellen, dass der YAML Code gültig ist, bevor Sie ihn bestätigen.
-
Wählen Sie Commit (Übergeben).
-
Geben Sie im Dialogfeld „Workflow bestätigen“ Folgendes ein:
-
Behalten Sie als Workflow-Dateiname die Standardeinstellung bei
codecatalyst-cfn-workflow
. -
Geben Sie für Commit-Nachricht Folgendes ein:
add initial workflow file
-
Wählen Sie für Repository codecatalyst-cfn-source-repository.
-
Wählen Sie als Branch-Name die Option main aus.
-
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
-
Wählen Sie im Navigationsbereich CI/CD und dann Workflows aus.
-
Wählen Sie den Workflow aus, den Sie gerade erstellt haben:.
codecatalyst-cfn-workflow
-
Wählen Sie die Registerkarte „Läufe“.
-
Wählen Sie in der Spalte Run-ID die Run-ID aus.
-
Wählen Sie Test, um den Fortschritt der Tests zu sehen.
-
Wählen Sie BuildBackend, um den Baufortschritt zu sehen.
-
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.
-
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
-
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.)
-
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
-
Wählen Sie im Workflow-Diagramm Test und dann Berichte aus.
-
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
Melden Sie sich bei der an AWS Management Console und öffnen Sie die API Gateway-Konsole unter https://console.aws.amazon.com/apigateway/
. -
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
). Öffnen Sie die AWS Lambda Konsole unter https://console.aws.amazon.com/lambda/
. -
Wählen Sie im Navigationsbereich Funktionen aus.
-
Wählen Sie Ihre Lambda-Funktion,
codecatalyst-cfn-stack-HelloWorldFunction-
.string
-
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
-
Navigieren Sie in CodeCatalyst zu Ihrem Projekt.
-
Wählen Sie im Navigationsbereich Code und dann Quell-Repositories aus.
-
Wählen Sie Ihr Quell-Repository
codecatalyst-cfn-source-repository
aus. -
Ändern Sie die Anwendungsdatei:
-
Wählen Sie den Ordner
hello-world
aus. -
Wählen Sie die
app.js
Datei aus. -
Wählen Sie Bearbeiten aus.
-
Wechseln Sie in Zeile 23
hello world
zuTutorial complete!
. -
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.
-
-
Aktualisieren Sie die Komponententests:
-
Wählen Sie
hello-world\tests\unit\test-handler.js
. -
Wählen Sie Bearbeiten aus.
-
Wechseln Sie in Zeile 19
hello world
zuTutorial complete!
. -
Wählen Sie Commit und anschließend erneut Commit aus.
Durch den Commit wird ein weiterer Workflow-Lauf gestartet. Dieser Lauf wird erfolgreich sein.
-
-
Wählen Sie im Navigationsbereich CI/CD und dann Workflows aus.
-
Wählen Sie
codecatalyst-cfn-workflow
und wählen Sie dann Runs aus. -
Wählen Sie die Lauf-ID des letzten Laufs aus. Es sollte noch in Bearbeitung sein.
-
Wählen Sie Test und BuildBackend, DeployCloudFormationStackum den Fortschritt der Workflow-Ausführung zu sehen.
-
Wenn der Workflow abgeschlossen ist, wählen Sie oben Variablen (7) aus.
-
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
Öffnen Sie die CodeCatalyst Konsole unter https://codecatalyst.aws/
. -
Löschen
codecatalyst-cfn-workflow
. -
Löschen
codecatalyst-cfn-environment
. -
Löschen
codecatalyst-cfn-source-repository
. -
Löschen
codecatalyst-cfn-project
.
Zum Aufräumen in der AWS Management Console
-
Aufräumen CloudFormation, wie folgt:
Öffnen Sie die AWS CloudFormation Konsole unter https://console.aws.amazon.com/cloudformation
. -
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.
-
Bereinigen Sie in Amazon S3 wie folgt:
Öffnen Sie die Amazon S3 S3-Konsole unter https://console.aws.amazon.com/s3/
. -
Wählen Sie das Symbol
codecatalyst-cfn-s3-bucket
. -
Löschen Sie den Inhalt des Buckets.
-
Löschen Sie den Bucket.
-
Räumen IAM Sie wie folgt auf:
Öffnen Sie die IAM-Konsole unter https://console.aws.amazon.com/iam/
. -
Löschen Sie das
codecatalyst-deploy-policy
. -
Löschen Sie das
codecatalyst-build-policy
. -
Löschen Sie das
codecatalyst-stack-policy
. -
Löschen Sie das
codecatalyst-deploy-role
. -
Löschen Sie das
codecatalyst-build-role
. -
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.