Dies ist der AWS CDK v2-Entwicklerhandbuch. Das ältere CDK v1 wurde am 1. Juni 2022 in die Wartung aufgenommen und der Support wurde am 1. Juni 2023 eingestellt.
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 Hello World-Anwendung erstellen
In diesem Tutorial verwenden Sie das AWS Cloud Development Kit (AWS CDK), um eine einfache serverlose Hello World
Anwendung zu erstellen, die ein grundlegendes API-Backend implementiert, das aus den folgenden Komponenten besteht:
-
Amazon API Gateway REST API — Stellt einen HTTP-Endpunkt bereit, der verwendet wird, um Ihre Funktion über eine HTTP-GET-Anfrage aufzurufen.
-
AWS Lambda-Funktion — Funktion, die eine
Hello World!
Nachricht zurückgibt, wenn sie mit dem HTTP-Endpunkt aufgerufen wird. -
Integrationen und Berechtigungen — Konfigurationsdetails und Berechtigungen für Ihre Ressourcen, miteinander zu interagieren und Aktionen auszuführen, wie z. B. das Schreiben von Protokollen an Amazon CloudWatch.
Das folgende Diagramm zeigt die Komponenten dieser Anwendung:

In diesem Tutorial werden Sie Ihre Anwendung in den folgenden Schritten erstellen und mit ihr interagieren:
-
Erstellen Sie ein AWS CDK-Projekt.
-
Definieren Sie eine Lambda-Funktion und eine API-Gateway-REST-API mithilfe von L2-Konstrukten aus der AWS Construct-Bibliothek.
-
Stellen Sie Ihre Anwendung in der Cloud bereit. AWS
-
Interagieren Sie mit Ihrer Anwendung in der AWS Cloud.
-
Löschen Sie die Beispielanwendung aus der AWS Cloud.
Voraussetzungen
Bevor Sie mit diesem Tutorial beginnen, müssen Sie folgende Aufgaben ausführen:
-
Erstellen Sie ein AWS Konto und lassen Sie die AWS Befehlszeilenschnittstelle (AWS CLI) installieren und konfigurieren.
-
Installieren Sie Node.js und
npm
. -
Installieren Sie das CDK Toolkit global unter Verwendung von.
npm install -g aws-cdk
Weitere Informationen finden Sie unter Erste Schritte mit dem AWS CDK.
Wir empfehlen außerdem ein grundlegendes Verständnis der folgenden Themen:
-
Was ist das AWS CDK? für eine grundlegende Einführung in das AWS CDK.
-
Lernen Sie die AWS CDK-Kernkonzepte kennen, um einen Überblick über die Kernkonzepte des AWS CDK zu erhalten.
Schritt 1: Erstellen Sie ein CDK-Projekt
In diesem Schritt erstellen Sie mit dem cdk init
CDK-CLI-Befehl ein neues AWS CDK-Projekt.
- Um ein CDK-Projekt zu erstellen
-
-
Erstellen Sie von einem Startverzeichnis Ihrer Wahl aus ein Projektverzeichnis mit dem Namen
cdk-hello-world
auf Ihrem Computer und navigieren Sie zu diesem:$ mkdir cdk-hello-world && cd cdk-hello-world
-
Verwenden Sie den
cdk init
Befehl, um ein neues Projekt in Ihrer bevorzugten Programmiersprache zu erstellen:Die CDK-CLI erstellt ein Projekt mit der folgenden Struktur:
-
Die CDK-CLI erstellt automatisch eine CDK-App, die einen einzelnen Stack enthält. Die CDK-App-Instanz wird aus der Klasse erstellt.
App
Das Folgende ist ein Teil Ihrer CDK-Anwendungsdatei:
Schritt 2: Erstellen Sie Ihre Lambda-Funktion
Erstellen Sie in Ihrem CDK-Projekt ein lambda
Verzeichnis, das eine neue hello.js
Datei enthält. Im Folgenden wird ein Beispiel gezeigt:
Anmerkung
Um dieses Tutorial einfach zu halten, verwenden wir eine JavaScript Lambda-Funktion für alle CDK-Programmiersprachen.
Definieren Sie Ihre Lambda-Funktion, indem Sie der neu erstellten Datei Folgendes hinzufügen:
exports.handler = async (event) => { return { statusCode: 200, headers: { "Content-Type": "text/plain" }, body: JSON.stringify({ message: "Hello, World!" }), }; };
Schritt 3: Definieren Sie Ihre Konstrukte
In diesem Schritt definieren Sie Ihre Lambda- und API-Gateway-Ressourcen mithilfe von AWS CDK L2-Konstrukten.
Öffnen Sie die Projektdatei, die Ihren CDK-Stack definiert. Sie werden diese Datei ändern, um Ihre Konstrukte zu definieren. Das Folgende ist ein Beispiel für Ihre Start-Stack-Datei:
In dieser Datei macht das AWS CDK Folgendes:
-
Ihre CDK-Stack-Instanz wird aus der Klasse instanziiert.
Stack
-
Die
Constructs
Basisklasse wird importiert und als Bereich oder übergeordnetes Objekt Ihrer Stack-Instance bereitgestellt.
Definieren Sie Ihre Lambda-Funktionsressource
Um Ihre Lambda-Funktionsressource zu definieren, importieren und verwenden Sie das
aws-lambda
L2-Konstrukt aus der AWS Construct-Bibliothek.
Ändern Sie Ihre Stack-Datei wie folgt:
Hier erstellen Sie eine Lambda-Funktionsressource und definieren die folgenden Eigenschaften:
-
runtime
— Die Umgebung, in der die Funktion ausgeführt wird. Hier verwenden wir Node.js Version 20.x. -
code
— Der Pfad zum Funktionscode auf Ihrem lokalen Computer. -
handler
— Der Name der spezifischen Datei, die Ihren Funktionscode enthält.
Definieren Sie Ihre API-Gateway-REST-API-Ressource
Um Ihr API Gateway zu definieren REST API Ressource, importieren und verwenden Sie das
aws-apigateway
L2-Konstrukt aus der AWS Construct-Bibliothek.
Ändern Sie Ihre Stack-Datei wie folgt:
Hier erstellen Sie eine API-Gateway-REST-API-Ressource zusammen mit den folgenden Informationen:
-
Eine Integration zwischen der REST-API und Ihrer Lambda-Funktion, sodass die API Ihre Funktion aufrufen kann. Dies beinhaltet die Erstellung einer Lambda-Berechtigungsressource.
-
Eine neue Ressource oder ein neuer Pfad mit dem Namen
hello
, der dem Stamm des API-Endpunkts hinzugefügt wird. Dadurch wird ein neuer Endpunkt erstellt, der/hello
zu Ihrer Basis-URL hinzugefügt wird. -
Eine GET-Methode für die
hello
Ressource. Wenn eine GET-Anfrage an den/hello
Endpunkt gesendet wird, wird die Lambda-Funktion aufgerufen und ihre Antwort zurückgegeben.
Schritt 4: Bereiten Sie Ihre Anwendung für die Bereitstellung vor
In diesem Schritt bereiten Sie Ihre Anwendung für die Bereitstellung vor, indem Sie, falls erforderlich, eine grundlegende Validierung mit dem AWS cdk synth
CDK-CLI-Befehl erstellen und durchführen.
Falls erforderlich, erstellen Sie Ihre Anwendung:
Führen Sie auscdk synth
, um eine AWS CloudFormation Vorlage aus Ihrem CDK-Code zu synthetisieren. Durch die Verwendung von L2-Konstrukten werden Ihnen viele der Konfigurationsdetails, die AWS CloudFormation zur Erleichterung der Interaktion zwischen Ihrer Lambda-Funktion und der REST-API erforderlich sind, vom CDK bereitgestellt. AWS
Führen Sie im Stammverzeichnis Ihres Projekts Folgendes aus:
$ cdk synth
Anmerkung
Wenn Sie eine Fehlermeldung wie die folgende erhalten, überprüfen Sie, ob Sie sich im cdk-hello-world
Verzeichnis befinden, und versuchen Sie es erneut:
--app is required either in command-line, in cdk.json or in ~/.cdk.json
Bei Erfolg gibt die AWS CDK-CLI die AWS CloudFormation Vorlage an der Befehlszeile im YAML
Format aus. Eine JSON
formatierte Vorlage wird ebenfalls im Verzeichnis gespeichert. cdk.out
Im Folgenden finden Sie ein Beispiel für die Ausgabe der AWS CloudFormation Vorlage:
Resources: HelloWorldFunctionServiceRoleunique-identifier: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Statement: - Action: sts:AssumeRole Effect: Allow Principal: Service: lambda.amazonaws.com Version: "2012-10-17" ManagedPolicyArns: - Fn::Join: - "" - - "arn:" - Ref: AWS::Partition - :iam::aws:policy/service-role/AWSLambdaBasicExecutionRole Metadata: aws:cdk:path: CdkHelloWorldStack/HelloWorldFunction/ServiceRole/Resource HelloWorldFunctionunique-identifier: Type: AWS::Lambda::Function Properties: Code: S3Bucket: Fn::Sub: cdk-unique-identifier-assets-${AWS::AccountId}-${AWS::Region} S3Key: unique-identifier.zip Handler: hello.handler Role: Fn::GetAtt: - HelloWorldFunctionServiceRoleunique-identifier - Arn Runtime: nodejs20.x DependsOn: - HelloWorldFunctionServiceRoleunique-identifier Metadata: aws:cdk:path: CdkHelloWorldStack/HelloWorldFunction/Resource aws:asset:path: asset.unique-identifier aws:asset:is-bundled: false aws:asset:property: Code HelloWorldApiunique-identifier: Type: AWS::ApiGateway::RestApi Properties: Name: HelloWorldApi Metadata: aws:cdk:path: CdkHelloWorldStack/HelloWorldApi/Resource HelloWorldApiDeploymentunique-identifier: Type: AWS::ApiGateway::Deployment Properties: Description: Automatically created by the RestApi construct RestApiId: Ref: HelloWorldApiunique-identifier DependsOn: - HelloWorldApihelloGETunique-identifier - HelloWorldApihellounique-identifier Metadata: aws:cdk:path: CdkHelloWorldStack/HelloWorldApi/Deployment/Resource HelloWorldApiDeploymentStageprod012345ABC: Type: AWS::ApiGateway::Stage Properties: DeploymentId: Ref: HelloWorldApiDeploymentunique-identifier RestApiId: Ref: HelloWorldApiunique-identifier StageName: prod Metadata: aws:cdk:path: CdkHelloWorldStack/HelloWorldApi/DeploymentStage.prod/Resource HelloWorldApihellounique-identifier: Type: AWS::ApiGateway::Resource Properties: ParentId: Fn::GetAtt: - HelloWorldApiunique-identifier - RootResourceId PathPart: hello RestApiId: Ref: HelloWorldApiunique-identifier Metadata: aws:cdk:path: CdkHelloWorldStack/HelloWorldApi/Default/hello/Resource HelloWorldApihelloGETApiPermissionCdkHelloWorldStackHelloWorldApiunique-identifier: Type: AWS::Lambda::Permission Properties: Action: lambda:InvokeFunction FunctionName: Fn::GetAtt: - HelloWorldFunctionunique-identifier - Arn Principal: apigateway.amazonaws.com SourceArn: Fn::Join: - "" - - "arn:" - Ref: AWS::Partition - ":execute-api:" - Ref: AWS::Region - ":" - Ref: AWS::AccountId - ":" - Ref: HelloWorldApi9E278160 - / - Ref: HelloWorldApiDeploymentStageprodunique-identifier - /GET/hello Metadata: aws:cdk:path: CdkHelloWorldStack/HelloWorldApi/Default/hello/GET/ApiPermission.CdkHelloWorldStackHelloWorldApiunique-identifier.GET..hello HelloWorldApihelloGETApiPermissionTestCdkHelloWorldStackHelloWorldApiunique-identifier: Type: AWS::Lambda::Permission Properties: Action: lambda:InvokeFunction FunctionName: Fn::GetAtt: - HelloWorldFunctionunique-identifier - Arn Principal: apigateway.amazonaws.com SourceArn: Fn::Join: - "" - - "arn:" - Ref: AWS::Partition - ":execute-api:" - Ref: AWS::Region - ":" - Ref: AWS::AccountId - ":" - Ref: HelloWorldApiunique-identifier - /test-invoke-stage/GET/hello Metadata: aws:cdk:path: CdkHelloWorldStack/HelloWorldApi/Default/hello/GET/ApiPermission.Test.CdkHelloWorldStackHelloWorldApiunique-identifier.GET..hello HelloWorldApihelloGETunique-identifier: Type: AWS::ApiGateway::Method Properties: AuthorizationType: NONE HttpMethod: GET Integration: IntegrationHttpMethod: POST Type: AWS_PROXY Uri: Fn::Join: - "" - - "arn:" - Ref: AWS::Partition - ":apigateway:" - Ref: AWS::Region - :lambda:path/2015-03-31/functions/ - Fn::GetAtt: - HelloWorldFunctionunique-identifier - Arn - /invocations ResourceId: Ref: HelloWorldApihellounique-identifier RestApiId: Ref: HelloWorldApiunique-identifier Metadata: aws:cdk:path: CdkHelloWorldStack/HelloWorldApi/Default/hello/GET/Resource CDKMetadata: Type: AWS::CDK::Metadata Properties: Analytics: v2:deflate64:unique-identifier Metadata: aws:cdk:path: CdkHelloWorldStack/CDKMetadata/Default Condition: CDKMetadataAvailable Outputs: HelloWorldApiEndpointunique-identifier: Value: Fn::Join: - "" - - https:// - Ref: HelloWorldApiunique-identifier - .execute-api. - Ref: AWS::Region - "." - Ref: AWS::URLSuffix - / - Ref: HelloWorldApiDeploymentStageprodunique-identifier - / Conditions: CDKMetadataAvailable: Fn::Or: - Fn::Or: - Fn::Equals: - Ref: AWS::Region - af-south-1 - Fn::Equals: - Ref: AWS::Region - ap-east-1 - Fn::Equals: - Ref: AWS::Region - ap-northeast-1 - Fn::Equals: - Ref: AWS::Region - ap-northeast-2 - Fn::Equals: - Ref: AWS::Region - ap-south-1 - Fn::Equals: - Ref: AWS::Region - ap-southeast-1 - Fn::Equals: - Ref: AWS::Region - ap-southeast-2 - Fn::Equals: - Ref: AWS::Region - ca-central-1 - Fn::Equals: - Ref: AWS::Region - cn-north-1 - Fn::Equals: - Ref: AWS::Region - cn-northwest-1 - Fn::Or: - Fn::Equals: - Ref: AWS::Region - eu-central-1 - Fn::Equals: - Ref: AWS::Region - eu-north-1 - Fn::Equals: - Ref: AWS::Region - eu-south-1 - Fn::Equals: - Ref: AWS::Region - eu-west-1 - Fn::Equals: - Ref: AWS::Region - eu-west-2 - Fn::Equals: - Ref: AWS::Region - eu-west-3 - Fn::Equals: - Ref: AWS::Region - il-central-1 - Fn::Equals: - Ref: AWS::Region - me-central-1 - Fn::Equals: - Ref: AWS::Region - me-south-1 - Fn::Equals: - Ref: AWS::Region - sa-east-1 - Fn::Or: - Fn::Equals: - Ref: AWS::Region - us-east-1 - Fn::Equals: - Ref: AWS::Region - us-east-2 - Fn::Equals: - Ref: AWS::Region - us-west-1 - Fn::Equals: - Ref: AWS::Region - us-west-2 Parameters: BootstrapVersion: Type: AWS::SSM::Parameter::Value<String> Default: /cdk-bootstrap/hnb659fds/version Description: Version of the CDK Bootstrap resources in this environment, automatically retrieved from SSM Parameter Store. [cdk:skip] Rules: CheckBootstrapVersion: Assertions: - Assert: Fn::Not: - Fn::Contains: - - "1" - "2" - "3" - "4" - "5" - Ref: BootstrapVersion AssertDescription: CDK bootstrap stack version 6 required. Please run 'cdk bootstrap' with a recent version of the CDK CLI.
Mithilfe von L2-Konstrukten definieren Sie einige Eigenschaften, um Ihre Ressourcen zu konfigurieren, und verwenden Hilfsmethoden, um sie miteinander zu integrieren. Das AWS CDK konfiguriert den Großteil Ihrer AWS CloudFormation Ressourcen und Eigenschaften, die für die Bereitstellung Ihrer Anwendung erforderlich sind.
Schritt 5: Ihre Anwendung bereitstellen
In diesem Schritt verwenden Sie den AWS cdk deploy
CDK-CLI-Befehl, um Ihre Anwendung bereitzustellen. Das AWS CDK arbeitet mit dem AWS CloudFormation Service zusammen, um Ihre Ressourcen bereitzustellen.
Wichtig
Sie müssen vor der Bereitstellung ein einmaliges Bootstrapping Ihrer AWS Umgebung durchführen. Anweisungen finden Sie unter Bootstrap Ihrer Umgebung für die Verwendung mit dem CDK. AWS
Führen Sie im Stammverzeichnis Ihres Projekts den folgenden Befehl aus. Bestätigen Sie Änderungen, wenn Sie dazu aufgefordert werden:
$ cdk deploy ✨ Synthesis time: 2.44s ... Do you wish to deploy these changes (y/n)? <y>
Wenn die Bereitstellung abgeschlossen ist, gibt die AWS CDK-CLI Ihre Endpunkt-URL aus. Kopieren Sie diese URL für den nächsten Schritt. Im Folgenden wird ein Beispiel gezeigt:
... ✅ HelloWorldStack ✨ Deployment time: 45.37s Outputs: HelloWorldStack.HelloWorldApiEndpointunique-identifier = https://<api-id>.execute-api.<region>.amazonaws.com/prod/ Stack ARN: arn:aws:cloudformation:region:account-id:stack/HelloWorldStack/unique-identifier ...
Schritt 6: Interagieren Sie mit Ihrer Anwendung
In diesem Schritt initiieren Sie eine GET-Anfrage an Ihren API-Endpunkt und erhalten Ihre Lambda-Funktionsantwort.
Suchen Sie Ihre Endpunkt-URL aus dem vorherigen Schritt und fügen Sie den /hello
Pfad hinzu. Senden Sie dann über Ihren Browser oder die Befehlszeile eine GET-Anfrage an Ihren Endpunkt. Im Folgenden wird ein Beispiel gezeigt:
$ curl https://<api-id>.execute-api.<region>.amazonaws.com/prod/hello {"message":"Hello World!"}%
Herzlichen Glückwunsch! Sie haben Ihre Anwendung mithilfe des AWS CDK erfolgreich erstellt, bereitgestellt und mit ihr interagiert!
Schritt 7: Löschen Sie Ihre Anwendung
In diesem Schritt verwenden Sie die AWS CDK-CLI, um Ihre Anwendung aus der AWS Cloud zu löschen.
Führen cdk destroy
Sie den Befehl aus, um Ihre Anwendung zu löschen. Wenn Sie dazu aufgefordert werden, bestätigen Sie Ihre Anfrage zum Löschen der Anwendung:
$ cdk destroy Are you sure you want to delete: CdkHelloWorldStack (y/n)? y CdkHelloWorldStack: destroying... [1/1] ... ✅ CdkHelloWorldStack: destroyed
Fehlerbehebung
Fehler: {"Nachricht“: „Interner Serverfehler"}%
Wenn Sie die bereitgestellte Lambda-Funktion aufrufen, erhalten Sie diesen Fehler. Dieser Fehler kann aus mehreren Gründen auftreten.
- Um weitere Fehler zu beheben
-
Verwenden Sie die AWS CLI, um Ihre Lambda-Funktion aufzurufen.
-
Ändern Sie Ihre Stack-Datei, um den Ausgabewert Ihres bereitgestellten Lambda-Funktionsnamens zu erfassen. Im Folgenden wird ein Beispiel gezeigt:
... class CdkHelloWorldStack extends Stack { constructor(scope, id, props) { super(scope, id, props); // Define the Lambda function resource // ... new CfnOutput(this, 'HelloWorldFunctionName', { value: helloWorldFunction.functionName, description: 'JavaScript Lambda function' }); // Define the API Gateway resource // ... } }
-
Stellen Sie Ihre Anwendung erneut bereit. Die AWS CDK-CLI gibt den Wert Ihres bereitgestellten Lambda-Funktionsnamens aus:
$ cdk deploy ✨ Synthesis time: 0.29s ... ✅ CdkHelloWorldStack ✨ Deployment time: 20.36s Outputs: ... CdkHelloWorldStack.HelloWorldFunctionName = CdkHelloWorldStack-HelloWorldFunctionunique-identifier ...
-
Verwenden Sie die AWS CLI, um Ihre Lambda-Funktion in der AWS Cloud aufzurufen und die Antwort in eine Textdatei auszugeben:
$ aws lambda invoke --function-name CdkHelloWorldStack-HelloWorldFunctionunique-identifier output.txt
-
Überprüfen Sie
output.txt
, um Ihre Ergebnisse zu sehen.- Mögliche Ursache: Die API-Gateway-Ressource ist in Ihrer Stack-Datei falsch definiert
-
Wenn eine erfolgreiche Lambda-Funktionsantwort
output.txt
angezeigt wird, liegt das Problem möglicherweise daran, wie Sie Ihre API-Gateway-REST-API definiert haben. Die AWS CLI ruft Ihr Lambda direkt auf, nicht über Ihren Endpunkt. Überprüfen Sie Ihren Code, um sicherzustellen, dass er mit diesem Tutorial übereinstimmt. Stellen Sie es dann erneut bereit. - Mögliche Ursache: Die Lambda-Ressource ist in Ihrer Stack-Datei falsch definiert
-
Wenn ein Fehler
output.txt
zurückgegeben wird, liegt das Problem möglicherweise daran, wie Sie Ihre Lambda-Funktion definiert haben. Überprüfen Sie Ihren Code, um sicherzustellen, dass er mit diesem Tutorial übereinstimmt. Stellen Sie es dann erneut bereit.
-