Bereitstellen von Lambda-Funktionen mit AWS CDK
AWS Cloud Development Kit (AWS CDK) ist ein Infrastructure as Code (IaC)-Framework, mit dem Sie die AWS-Cloud-Infrastruktur mit einer Programmiersprache Ihrer Wahl definieren können. Um Ihre eigene Cloud-Infrastruktur zu definieren, schreiben Sie zunächst eine App (in einer der unterstützten Sprachen des CDK), die einen oder mehrere Stacks enthält. Dann synthetisieren Sie es zu einem CloudFormation und stellen Sie Ihre Ressourcen in Ihr AWS-Konto. Folgen Sie den Schritten in diesem Thema, um eine Lambda-Funktion bereitzustellen, die ein Ereignis von einem Amazon-API-Gateway-Endpunkt zurückgibt.
Die AWS-Construct Library, die im CDK enthalten ist, stellt Module bereit, mit denen Sie die von AWS-Services bereitgestellten Ressourcen modellieren können. Für die gängigen Dienste stellt die Bibliothek kuratierte Konstrukte bereit, die intelligente Standards und bewährte Methoden bereitstellen. Sie können das Modul aws_lambda verwenden, um Ihre Funktion und die unterstützenden Ressourcen mit nur wenigen Codezeilen zu definieren.
Voraussetzungen
Bevor Sie mit diesem Lernprogramm beginnen, installieren Sie AWS CDK, indem Sie den folgenden Befehl ausführen.
npm install -g aws-cdk
Schritt 1: Einrichten des Projekts AWS CDK
Erstellen Sie ein Verzeichnis für Ihre neue AWS CDK-App und initialisieren Sie das Projekt.
Anmerkung
Die AWS CDK-Anwendungsvorlage verwendet den Namen des Projektverzeichnisses, um Namen für Quelldateien und -klassen zu generieren. In diesem Beispiel trägt das Verzeichnis den Namen hello-lambda. Wenn Sie einen anderen Projektverzeichnisnamen verwenden, stimmt Ihre App nicht mit diesen Anweisungen überein.
AWS CDK v2 enthält stabile Konstrukte für alle AWS-Services in einem einzigen Paket, genannt aws-cdk-lib. Dieses Paket wird als Abhängigkeit installiert, wenn Sie das Projekt initialisieren. Wenn Sie mit bestimmten Programmiersprachen arbeiten, wird das Paket installiert, wenn Sie das Projekt zum ersten Mal erstellen.
Schritt 2: Definieren Sie den AWS CDK-Stack
Ein CDK-Stack ist eine Sammlung von einem oder mehreren Konstrukten, die AWS-Ressourcen definieren. Jeder CDK-Stack steht für einen CloudFormation-Stack in Ihrer CDK-App.
Um Ihren CDK-Stack zu definieren, folgen Sie den Anweisungen für Ihre bevorzugte Programmiersprache. Dieser Stack definiert das Folgende:
-
Der logische Name der Funktion:
MyFunction -
Der Speicherort des Funktionscodes, der in der
code-Eigenschaft angegeben ist. Weitere Informationen finden Sie unter Handler-Code in der AWS Cloud Development Kit (AWS CDK)-API-Referenz. -
Der logische Name der REST-API:
HelloApi -
Der logische Name des API-Gateway-Endpunkts:
ApiGwEndpoint
Beachten Sie, dass alle CDK-Stacks in diesem Tutorial die Laufzeit-Node.js für die Lambda-Funktion verwenden. Sie können verschiedene Programmiersprachen für den CDK-Stack und die Lambda-Funktion verwenden, um die Stärken der einzelnen Sprachen zu nutzen. Sie können beispielsweise TypeScript für den CDK-Stack verwenden, um die Vorteile der statischen Typisierung für Ihren Infrastrukturcode zu nutzen. Sie können JavaScript für die Lambda-Funktion verwenden, um die Flexibilität und schnelle Entwicklung einer dynamisch typisierten Sprache zu nutzen.
Schritt 3: Den Lambda-Funktionscode erstellen
-
Erstellen Sie im Stammverzeichnis Ihres Projekts (
hello-lambda) das/lib/lambda-handler-Verzeichnis für den Lambda-Funktionscode. Dieses Verzeichnis ist in dercode-Eigenschaft Ihres AWS CDK-Stacks angegeben. -
Erstellen Sie in dem Verzeichnis
/lib/lambda-handlereine neue Datei namensindex.js. Fügen Sie folgenden Code in die Datei ein. Die Funktion extrahiert bestimmte Eigenschaften aus der API-Anfrage und gibt sie als JSON-Antwort zurück.exports.handler = async (event) => { // Extract specific properties from the event object const { resource, path, httpMethod, headers, queryStringParameters, body } = event; const response = { resource, path, httpMethod, headers, queryStringParameters, body, }; return { body: JSON.stringify(response, null, 2), statusCode: 200, }; };
Schritt 4: Bereitstellen des AWS CDK-Stacks
-
Führen Sie im Stammverzeichnis Ihres Projekts den Befehl cdk synth aus:
cdk synthDieser Befehl synthetisiert eine AWS CloudFormation-Vorlage aus Ihrem CDK-Stack. Die Vorlage ist eine ca. 400 Zeilen lange YAML-Datei, ähnlich der folgenden.
Anmerkung
Wenn Sie die folgende Fehlermeldung erhalten, vergewissern Sie sich, dass Sie sich im Stammverzeichnis Ihres Projektverzeichnisses befinden.
--app is required either in command-line, in cdk.json or in ~/.cdk.jsonBeispiel CloudFormation-Vorlage
Resources: MyFunctionServiceRole3C357FF2: 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: HelloLambdaStack/MyFunction/ServiceRole/Resource MyFunction1BAA52E7: Type: AWS::Lambda::Function Properties: Code: S3Bucket: Fn::Sub: cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region} S3Key: ab1111111cd32708dc4b83e81a21c296d607ff2cdef00f1d7f48338782f92l3901.zip Handler: index.handler Role: Fn::GetAtt: - MyFunctionServiceRole3C357FF2 - Arn Runtime: nodejs22.x ... -
Führen Sie den Befehl cdk deploy aus:
cdk deployWarten Sie, bis Ihre Ressourcen erstellt wurden. Die endgültige Ausgabe enthält die URL für Ihren API-Gateway-Endpunkt. Beispiel:
Outputs: HelloLambdaStack.ApiGwEndpoint77F417B1 =https://abcd1234.execute-api.us-east-1.amazonaws.com/prod/
Schritt 5: Testen der Funktion
Um die Lambda-Funktion aufzurufen, kopieren Sie den API Gateway-Endpunkt und fügen Sie ihn in einen Webbrowser ein oder führen Sie einen curl-Befehl aus:
curl -shttps://abcd1234.execute-api.us-east-1.amazonaws.com/prod/
Die Antwort ist eine JSON-Darstellung ausgewählter Eigenschaften aus dem ursprünglichen Ereignisobjekt, das Informationen über die Anfrage an den API-Gateway-Endpunkt enthält. Beispiel:
{
"resource": "/",
"path": "/",
"httpMethod": "GET",
"headers": {
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
"Accept-Encoding": "gzip, deflate, br, zstd",
"Accept-Language": "en-US,en;q=0.9",
"CloudFront-Forwarded-Proto": "https",
"CloudFront-Is-Desktop-Viewer": "true",
"CloudFront-Is-Mobile-Viewer": "false",
"CloudFront-Is-SmartTV-Viewer": "false",
"CloudFront-Is-Tablet-Viewer": "false",
"CloudFront-Viewer-ASN": "16509",
"CloudFront-Viewer-Country": "US",
"Host": "abcd1234.execute-api.us-east-1.amazonaws.com",
...
Schritt 6: Bereinigen Ihrer Ressourcen
Der API-Gateway-Endpunkt ist öffentlich zugänglich. Um unerwartete Gebühren zu vermeiden, führen Sie den Befehl cdk destroy aus, um den Stack und alle zugehörigen Ressourcen zu löschen.
cdk destroy
Nächste Schritte
Informationen zum Schreiben von AWS CDK-Apps in der Sprache Ihrer Wahl finden Sie nachfolgend: