

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.

# Verwenden von Lambda-Funktionen in AWS SAM und Infrastructure Composer
<a name="foundation-iac-getting-started"></a>

In diesem Tutorial können Sie mit der Verwendung von IaC mit Lambda beginnen, indem Sie eine AWS SAM-Vorlage aus einer vorhandenen Lambda-Funktion erstellen und dann eine Serverless-Anwendung in Infrastructure Composer erstellen, indem Sie weitere AWS-Ressourcen hinzufügen.

Während Sie dieses Tutorial durchführen, lernen Sie einige grundlegende Konzepte kennen, z. B. wie AWS-Ressourcen in AWS SAM angegeben werden. Zudem erfahren Sie, wie Sie mit Infrastructure Composer eine Serverless-Anwendung erstellen, die Sie mit AWS SAM oder CloudFormation bereitstellen können.

Führen Sie für dieses Tutorial die folgenden Schritte aus:
+ Erstellen Sie eine Beispiel-Lambda-Funktion.
+ Verwenden Sie die Lambda-Konsole, um die AWS SAM-Vorlage für die Funktion anzuzeigen.
+ Exportieren Sie die Konfiguration Ihrer Funktion nach AWS Infrastructure Composer und entwerfen Sie eine einfache Serverless-Anwendung, die auf der Konfiguration Ihrer Funktion basiert.
+ Speichern Sie eine aktualisierte AWS SAM-Vorlage, die Sie als Grundlage für die Bereitstellung Ihrer Serverless-Anwendung verwenden können.

## Voraussetzungen
<a name="foundation-iac-prerequisites"></a>

In diesem Tutorial verwenden Sie das Feature für die [lokale Synchronisierung](https://docs.aws.amazon.com/application-composer/latest/dg/reference-features-local-sync.html) von Infrastructure Composer, um Ihre Vorlagen- und Codedateien auf Ihrem lokalen Build-Computer zu speichern. Um diese Feature nutzen zu können, benötigen Sie einen Browser, der die File System Access-API unterstützt. Damit können Webanwendungen Dateien in Ihrem lokalen Dateisystem lesen, schreiben und speichern. Wir empfehlen, entweder Google Chrome oder Microsoft Edge zu verwenden. Weitere Informationen zur File System Access-API finden Sie unter [Was ist die File System Access-API?](https://docs.aws.amazon.com/application-composer/latest/dg/reference-fsa.html#reference-fsa-api).

## Erstellen einer Lambda-Funktion
<a name="foundation-iac-create-function"></a>

In diesem ersten Schritt erstellen Sie eine Lambda-Funktion, mit der Sie den Rest des Tutorials abschließen können. Der Einfachheit halber verwenden Sie die Lambda-Konsole, um mithilfe der Python 3.11-Laufzeit eine grundlegende „Hello World“-Funktion zu erstellen.

**So erstellen Sie eine „Hello World“-Lambda-Funktion mit der Konsole**

1. Öffnen Sie die [Lambda-Konsole](https://console.aws.amazon.com/lambda).

1. Wählen Sie **Create function (Funktion erstellen)**.

1. Lassen Sie **Ohne Vorgabe erstellen** ausgewählt. Geben Sie im Feld **Grundlegende Informationen** für **Funktionsname** **LambdaIaCDemo** ein.

1. Wählen Sie für **Laufzeit** die Option **Python 3.11** aus.

1. Wählen Sie **Funktion erstellen**.

## Sehen Sie sich die AWS SAM-Vorlage für Ihre Funktion an.
<a name="foundation-iac-view-template"></a>

Bevor Sie die Konfiguration Ihrer Funktion nach Infrastructure Composer exportieren, verwenden Sie die Lambda-Konsole, um die aktuelle Konfiguration Ihrer Funktion als AWS SAM-Vorlage anzuzeigen. Wenn Sie die Schritte in diesem Abschnitt befolgen, erfahren Sie mehr über den Aufbau einer AWS SAM-Vorlage und darüber, wie Sie Ressourcen wie Lambda-Funktionen definieren, um mit der Spezifizierung einer Serverless-Anwendung zu beginnen.

**So sehen Sie sich die AWS SAM-Vorlage für Ihre Funktion an**

1. Öffnen Sie die Seite [Funktionen](https://console.aws.amazon.com/lambda/home#/functions) der Lambda-Konsole.

1. Wählen Sie die Funktion aus, die Sie gerade erstellt haben (`LambdaIaCDemo`).

1. Wählen Sie im Bereich **Funktionsübersicht** die Option **Vorlage**.

   Anstelle des Diagramms, das die Konfiguration Ihrer Funktion darstellt, wird eine AWS SAM-Vorlage für Ihre Funktion angezeigt. Die Vorlage sollte jetzt wie folgt aussehen:

   ```
   # This AWS SAM template has been generated from your function's 
   # configuration. If your function has one or more triggers, note 
   # that the AWS resources associated with these triggers aren't fully 
   # specified in this template and include placeholder values.Open this template 
   # in AWS Application Composer or your favorite IDE and modify 
   # it to specify a serverless application with other AWS resources. 
   AWSTemplateFormatVersion: '2010-09-09'
   Transform: AWS::Serverless-2016-10-31
   Description: An AWS Serverless Specification template describing your function.
   Resources:
     LambdaIaCDemo:
       Type: AWS::Serverless::Function
       Properties:
         CodeUri: .
         Description: ''
         MemorySize: 128
         Timeout: 3
         Handler: lambda_function.lambda_handler
         Runtime: python3.11
         Architectures:
           - x86_64
         EventInvokeConfig:
           MaximumEventAgeInSeconds: 21600
           MaximumRetryAttempts: 2
         EphemeralStorage:
           Size: 512
         RuntimeManagementConfig:
           UpdateRuntimeOn: Auto
         SnapStart:
           ApplyOn: None
         PackageType: Zip
         Policies:
           Statement:
             - Effect: Allow
               Action:
                 - logs:CreateLogGroup
               Resource: arn:aws:logs:us-east-1:123456789012:*
             - Effect: Allow
               Action:
                 - logs:CreateLogStream
                 - logs:PutLogEvents
               Resource:
                 - >-
                   arn:aws:logs:us-east-1:123456789012:log-group:/aws/lambda/LambdaIaCDemo:*
   ```

Nehmen wir uns einen Moment Zeit, um uns die YAML-Vorlage für Ihre Funktion anzusehen und einige wichtige Konzepte zu verstehen.

Die Vorlage beginnt mit der Deklaration `Transform: AWS::Serverless-2016-10-31`. Diese Deklaration ist erforderlich, weil im Hintergrund AWS SAM-Vorlagen über CloudFormation bereitgestellt werden. Mithilfe der `Transform`-Anweisung wird die Vorlage als AWS SAM-Vorlagendatei identifiziert.

Nach der `Transform`-Deklaration folgt der `Resources`-Abschnitt. Hier werden die AWS-Ressourcen definiert, die Sie mit Ihrer AWS SAM-Vorlage bereitstellen möchten. AWS SAM-Vorlagen können eine Kombination aus AWS SAM-Ressourcen und CloudFormation-Ressourcen enthalten. Das liegt daran, dass AWS SAM-Vorlagen bei der Bereitstellung zu CloudFormation-Vorlagen erweitert werden, sodass jeder AWS SAM-Vorlage jede gültige CloudFormation-Syntax hinzugefügt werden kann.

Im Moment ist im Abschnitt `Resources` der Vorlage nur eine Ressource definiert, Ihre Lambda-Funktion `LambdaIaCDemo`. Um einer AWS SAM-Vorlage eine Lambda-Funktion hinzuzufügen, verwenden Sie den `AWS::Serverless::Function`-Ressourcentyp. Die `Properties` der Ressource einer Lambda-Funktion definieren die Laufzeit, den Funktionshandler und andere Konfigurationsoptionen der Funktion. Der Pfad zum Quellcode Ihrer Funktion, den AWS SAM für die Bereitstellung der Funktion verwenden soll, ist hier ebenfalls definiert. *Weitere Informationen zu Lambda-Funktionsressourcen in AWS SAM finden Sie unter [AWS::Serverless::Function](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-function.html) im AWS SAM-Entwicklerhandbuch*.

Neben den Funktionseigenschaften und Konfigurationen ist in der Vorlage auch eine AWS Identity and Access Management-Richtlinie (IAM) für Ihre Funktion angegeben. Diese Richtlinie gibt Ihrer Funktion die Berechtigung zum Schreiben von Protokollen in Amazon CloudWatch Logs. Wenn Sie eine Funktion in der Lambda-Konsole erstellen, hängt Lambda diese Richtlinie automatisch an Ihre Funktion an. *Weitere Informationen zur Angabe einer IAM-Richtlinie für eine Funktion in einer AWS SAM-Vorlage finden Sie in der `policies`-Eigenschaft auf der Seite [AWS::Serverless::Function](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-function.html) im AWS SAM-Entwicklerleitfaden*.

Weitere Informationen zur Struktur von AWS SAM-Vorlagen finden Sie unter [AWS SAM-Vorlagenaufbau](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-specification-template-anatomy.html).

## Verwenden von AWS Infrastructure Composer zum Entwerfen einer Serverless-Anwendung
<a name="foundation-iac-design-app"></a>

Um mit der Erstellung einer einfachen Serverless-Anwendung zu beginnen, die die AWS SAM-Vorlage Ihrer Funktion als Ausgangspunkt verwendet, exportieren Sie Ihre Funktionskonfiguration nach Infrastructure Composer und aktivieren den lokalen Synchronisierungsmodus von Infrastructure Composer. Die Funktion für die lokale Synchronisierung speichert den Code Ihrer Funktion und Ihre AWS SAM-Vorlage automatisch auf Ihrem lokalen Build-Computer und sorgt dafür, dass Ihre gespeicherte Vorlage synchronisiert wird, wenn Sie weitere AWS-Ressourcen in Infrastructure Composer hinzufügen.

**So exportieren Sie Ihre Funktion nach Infrastructure Composer**

1. Wählen Sie im Bereich **Funktionsübersicht** die Option **Nach Application Composer exportieren** aus.

   Um die Konfiguration und den Code Ihrer Funktion nach Infrastructure Composer zu exportieren, erstellt Lambda einen Amazon-S3-Bucket in Ihrem Konto, um diese Daten vorübergehend zu speichern.

1. Wählen Sie im Dialogfeld **Projekt bestätigen und erstellen** aus, um den Standardnamen für diesen Bucket zu akzeptieren und die Konfiguration und den Code Ihrer Funktion nach Infrastructure Composer zu exportieren.

1. (Optional) Um einen anderen Namen für den von Lambda erstellten Amazon-S3-Bucket auszuwählen, geben Sie einen neuen Namen ein und wählen Sie **Projekt bestätigen und erstellen** aus. Die Amazon-S3-Bucket-Namen müssen global eindeutig sein und den [Regeln für die Benennung von Buckets](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucketnamingrules.html) entsprechen.

   Wenn Sie **Projekt bestätigen und erstellen** auswählen, wird die Infrastructure-Composer-Konsole geöffnet. Auf der *Zeichenfläche* sehen Sie Ihre Lambda-Funktion.

1. Wählen Sie in der **Menü-Dropdown-Liste** die Option **Lokale Synchronisierung aktivieren** aus.

1. Wählen Sie in dem sich öffnenden Dialogfeld die Option **Ordner auswählen** aus und wählen Sie einen Ordner auf Ihrem lokalen Build-Computer aus.

1. Wählen Sie **Aktivieren** aus, um die lokale Synchronisierung zu aktivieren.

Zum Exportieren Ihrer Funktion nach Infrastructure Composer benötigen Sie die Berechtigung zur Verwendung von bestimmten API-Aktionen. Wenn Sie Ihre Funktion nicht exportieren können, beachten Sie [Erforderliche Berechtigungen](services-appcomposer.md#services-appcomposer-permissions) und stellen Sie sicher, dass Sie über die erforderlichen Berechtigungen verfügen.

**Anmerkung**  
Für den Bucket, den Lambda erstellt, wenn Sie eine Funktion nach Infrastructure Composer exportieren, gelten die [Amazon-S3-Standardpreise](https://aws.amazon.com/s3/pricing). Die Objekte, die Lambda in den Bucket einfügt, werden nach 10 Tagen automatisch gelöscht, aber Lambda löscht den Bucket selbst nicht.  
Folgen Sie den Anweisungen unter [Löschen eines Buckets](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-bucket.html), nachdem Sie Ihre Funktion nach Infrastructure Composer exportiert haben, um zu vermeiden, dass für Ihr AWS-Konto zusätzliche Kosten anfallen. Weitere Informationen zum Amazon-S3-Bucket-Namen, den Lamda erstellt, finden Sie unter [Verwenden AWS Lambda mit AWS Infrastructure Composer](services-appcomposer.md).

**So entwerfen Sie Ihre Serverless-Anwendung in Infrastructure Composer**

Nach der Aktivierung der lokalen Synchronisierung werden die Änderungen, die Sie in Infrastructure Composer vornehmen, in der AWS SAM-Vorlage widergespiegelt, die auf Ihrer lokalen Build-Maschine gespeichert ist. Sie können jetzt zusätzliche AWS-Ressourcen per Drag-and-Drop auf die Infrastructure-Composer-Zeichenfläche ziehen, um Ihre Anwendung zu erstellen. In diesem Beispiel fügen Sie eine einfache Amazon-SQS-Warteschlange als Trigger für Ihre Lambda-Funktion und eine DynamoDB-Tabelle für die Funktion hinzu, in die Daten geschrieben werden sollen.

1. Fügen Sie Ihrer Lambda-Funktion einen Amazon-SQS-Trigger hinzu, indem Sie wie folgt vorgehen:

   1. Geben Sie im Suchfeld in der **Ressourcenpalette** **SQS** ein.

   1. Ziehen Sie die Ressource **SQS-Warteschlange** auf Ihre Zeichenfläche und positionieren Sie sie links neben Ihrer Lambda-Funktion.

   1. Wählen Sie **Details** und geben Sie **LambdaIaCQueue** als **Logische ID** ein.

   1. Wählen Sie **Speichern**.

   1. Verbinden Sie Ihre Amazon-SQS- und Lambda-Ressourcen, indem Sie auf der SQS-Warteschlangenkarte auf den Port **Abonnement** klicken und ihn auf den linken Port auf der Lambda-Funktionskarte ziehen. Das Erscheinen einer Linie zwischen den beiden Ressourcen weist auf eine erfolgreiche Verbindung hin. Infrastructure Composer zeigt außerdem unten auf der Zeichenfläche eine Meldung an, die darauf hinweist, dass die beiden Ressourcen erfolgreich verbunden wurden.

1. Fügen Sie eine Amazon-DynamoDB-Tabelle für Ihre Lambda-Funktion hinzu, in die Daten geschrieben werden sollen, indem Sie so vorgehen:

   1. Geben Sie im Suchfeld in der **Ressourcenpalette** **DynamoDB** ein.

   1. Ziehen Sie die Ressource **DynamoDB-Tabelle** auf Ihre Zeichenfläche und positionieren Sie sie rechts neben Ihrer Lambda-Funktion.

   1. Wählen Sie **Details** und geben Sie **LambdaIaCTable** als **Logische ID** ein.

   1. Wählen Sie **Speichern**.

   1. Verbinden Sie die DynamoDB-Tabelle mit Ihrer Lambda-Funktion, indem Sie auf den rechten Port der Lambda-Funktionskarte klicken und ihn auf den linken Port der DynamoDB-Karte ziehen. 

Nachdem Sie diese zusätzlichen Ressourcen hinzugefügt haben, werfen wir einen Blick auf die aktualisierte AWS SAM-Vorlage, die Infrastructure Composer erstellt hat.

**So zeigen Sie Ihre aktualisierte AWS SAM-Vorlage an**
+ Wählen Sie auf der Infrastructure-Composer-Zeichenfläche **Vorlage**, um von der Zeichenflächenansicht zur Vorlagenansicht zu wechseln.

Ihre AWS SAM-Vorlage sollte jetzt die folgenden zusätzlichen Ressourcen und Eigenschaften enthalten:
+ Eine Amazon-SQS-Warteschlange mit der ID `LambdaIaCQueue`

  ```
  LambdaIaCQueue:
      Type: AWS::SQS::Queue
      Properties:
        MessageRetentionPeriod: 345600
  ```

  Wenn Sie eine Amazon-SQS-Warteschlange mit Infrastructure Composer hinzufügen, setzt Infrastructure Composer die Eigenschaft `MessageRetentionPeriod`. Sie können die `FifoQueue`-Eigenschaft auch festlegen, indem Sie auf der SQS-Warteschlangenkarte **Details** auswählen und die **Fifo-Warteschlange** aktivieren oder deaktivieren.

  Um weitere Eigenschaften für Ihre Warteschlange festzulegen, können Sie die Vorlage manuell bearbeiten, um sie hinzuzufügen. Weitere Informationen zur `AWS::SQS::Queue`-Ressource und ihre verfügbaren Eigenschaften finden Sie unter [AWS::SQS::Queue](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sqs-queue.html) im *CloudFormation-Benutzerhandbuch*.
+ Eine `Events`-Eigenschaft in Ihrer Lambda-Funktionsdefinition, die die Amazon-SQS-Warteschlange als Trigger für die Funktion angibt

  ```
  Events:
    LambdaIaCQueue:
      Type: SQS
      Properties:
        Queue: !GetAtt LambdaIaCQueue.Arn
        BatchSize: 1
  ```

  Die `Events`-Eigenschaft besteht aus einem Ereignistyp und einer Reihe von Eigenschaften, die vom Typ abhängen. Weitere Informationen zu den verschiedenen AWS-Services, die Sie zum Auslösen einer Lambda-Funktion konfigurieren können, und zu den Eigenschaften, die Sie festlegen können, finden Sie unter [EventSource](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-property-function-eventsource.html) im *AWS SAM-Entwicklerleitfaden*.
+ Eine DynamoDB-Tabelle mit dem Bezeichner `LambdaIaCTable`

  ```
  LambdaIaCTable:
      Type: AWS::DynamoDB::Table
      Properties:
        AttributeDefinitions:
          - AttributeName: id
            AttributeType: S
        BillingMode: PAY_PER_REQUEST
        KeySchema:
          - AttributeName: id
            KeyType: HASH
        StreamSpecification:
          StreamViewType: NEW_AND_OLD_IMAGES
  ```

  Wenn Sie mit Infrastructure Composer eine DynamoDB-Tabelle hinzufügen, können Sie die Schlüssel Ihrer Tabelle festlegen, indem Sie auf der DynamoDB-Tabellenkarte **Details** auswählen und die Schlüsselwerte bearbeiten. Infrastructure Composer legt auch Standardwerte für eine Reihe anderer Eigenschaften fest, darunter `BillingMode` und `StreamViewType`.

  *Weitere Informationen zu diesen und anderen Eigenschaften, die Sie Ihrer AWS SAM-Vorlage hinzufügen können, finden Sie unter [AWS::DynamoDB::Table](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html) im CloudFormation-Benutzerhandbuch*.
+ Eine neue IAM-Richtlinie, die Ihrer Funktion die Berechtigung gewährt, CRUD-Operationen für die von Ihnen hinzugefügte DynamoDB-Tabelle auszuführen.

  ```
  Policies:
  ...
    - DynamoDBCrudPolicy:
      TableName: !Ref LambdaIaCTable
  ```

Die endgültige vollständige AWS SAM-Vorlage sollte jetzt so aussehen:

```
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: An AWS Serverless Specification template describing your function.
Resources:
  LambdaIaCDemo:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: .
      Description: ''
      MemorySize: 128
      Timeout: 3
      Handler: lambda_function.lambda_handler
      Runtime: python3.11
      Architectures:
        - x86_64
      EventInvokeConfig:
        MaximumEventAgeInSeconds: 21600
        MaximumRetryAttempts: 2
      EphemeralStorage:
        Size: 512
      RuntimeManagementConfig:
        UpdateRuntimeOn: Auto
      SnapStart:
        ApplyOn: None
      PackageType: Zip
      Policies:
        - Statement:
            - Effect: Allow
              Action:
                - logs:CreateLogGroup
              Resource: arn:aws:logs:us-east-1:594035263019:*
            - Effect: Allow
              Action:
                - logs:CreateLogStream
                - logs:PutLogEvents
              Resource:
                - arn:aws:logs:us-east-1:594035263019:log-group:/aws/lambda/LambdaIaCDemo:*
        - DynamoDBCrudPolicy:
            TableName: !Ref LambdaIaCTable
      Events:
        LambdaIaCQueue:
          Type: SQS
          Properties:
            Queue: !GetAtt LambdaIaCQueue.Arn
            BatchSize: 1
      Environment:
        Variables:
          LAMBDAIACTABLE_TABLE_NAME: !Ref LambdaIaCTable
          LAMBDAIACTABLE_TABLE_ARN: !GetAtt LambdaIaCTable.Arn
  LambdaIaCQueue:
    Type: AWS::SQS::Queue
    Properties:
      MessageRetentionPeriod: 345600
  LambdaIaCTable:
    Type: AWS::DynamoDB::Table
    Properties:
      AttributeDefinitions:
        - AttributeName: id
          AttributeType: S
      BillingMode: PAY_PER_REQUEST
      KeySchema:
        - AttributeName: id
          KeyType: HASH
      StreamSpecification:
        StreamViewType: NEW_AND_OLD_IMAGES
```

## Stellen Sie Ihre Serverless-Anwendung mithilfe von AWS SAM (optional) bereit
<a name="foundation-iac-deploy"></a>

Wenn Sie AWS SAM verwenden möchten, um eine Serverless-Anwendung mithilfe der Vorlage bereitzustellen, die Sie gerade in Infrastructure Composer erstellt haben, müssen Sie zuerst die AWS SAM-CLI installieren. Befolgen Sie hierzu die Anweisungen unter [Installieren der AWS SAM-CLI](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/install-sam-cli.html).

Bevor Sie Ihre Anwendung bereitstellen, müssen Sie auch den Funktionscode aktualisieren, den Infrastructure Composer zusammen mit Ihrer Vorlage gespeichert hat. Derzeit enthält die von Infrastructure Composer gespeicherte `lambda_function.py`-Datei nur den grundlegenden „Hello World“-Code, den Lambda bei der Erstellung der Funktion bereitgestellt hat. 

Um Ihren Funktionscode zu aktualisieren, kopieren Sie den folgenden Code und fügen Sie ihn in die `lambda_function.py`-Datei ein, die Infrastructure Composer auf Ihrer lokalen Build-Maschine gespeichert hat. Sie haben das Verzeichnis, in dem Infrastructure Composer diese Datei speichern soll, beim Aktivieren des Modus „Lokale Synchronisation“ angegeben.

Dieser Code akzeptiert ein Schlüssel-Wert-Paar in einer Nachricht von der Amazon-SQS-Warteschlange, die Sie in Infrastructure Composer erstellt haben. Wenn sowohl der Schlüssel als auch der Wert Zeichenfolgen sind, verwendet der Code diese Werte, um ein Element in die in Ihrer Vorlage definierte DynamoDB-Tabelle zu schreiben.

### Aktualisierter Python-Funktionscode
<a name="foundation-iac-updated-code"></a>

```
import boto3
import os
import json

# define the DynamoDB table that Lambda will connect to
tablename = os.environ['LAMBDAIACTABLE_TABLE_NAME']

# create the DynamoDB resource
dynamo = boto3.client('dynamodb')

def lambda_handler(event, context):
    # get the message out of the SQS event
    message = event['Records'][0]['body']
    data = json.loads(message)
    # write event data to DDB table
    if check_message_format(data):
        key = next(iter(data))
        value = data[key]
        dynamo.put_item(
            TableName=tablename,
            Item={
                'id': {'S': key},
                'Value': {'S': value}
            }
        )
    else:
        raise ValueError("Input data not in the correct format")

# check that the event object contains a single key value  
# pair that can be written to the database
def check_message_format(message):
    if len(message) != 1:
        return False
        
    key, value = next(iter(message.items()))
    
    if not (isinstance(key, str) and isinstance(value, str)):
        return False

    else:
        return True
```

**So stellen Sie Ihre Serverless-Anwendung bereit**

Gehen Sie wie folgt vor, um Ihre Anwendung mithilfe der AWS SAM-CLI bereitzustellen. Damit Ihre Funktion korrekt erstellt und bereitgestellt werden kann, muss die Python-Version 3.11 auf Ihrem Build-Computer und in Ihrem `PATH` installiert sein.

1. Führen Sie den folgenden Befehl in dem Verzeichnis aus, in dem Infrastructure Composer Ihre Dateien `template.yaml` und `lambda_function.py` gespeichert hat.

   ```
   sam build
   ```

   Dieser Befehl sammelt die Build-Artefakte für Ihre Anwendung und platziert sie im richtigen Format und am richtigen Ort, um sie bereitzustellen.

1. Führen Sie den folgenden Befehl aus, um Ihre Anwendung bereitzustellen und die in Ihrer AWS SAM-Vorlage angegebenen Lambda-, Amazon-SQS- und DynamoDB-Ressourcen zu erstellen.

   ```
   sam deploy --guided
   ```

   Wenn Sie die `--guided`-Markierung verwenden, werden Ihnen in AWS SAM Eingabeaufforderungen angezeigt, die Sie durch den Bereitstellungsprozess führen. Akzeptieren Sie für diese Bereitstellung die Standardoptionen, indem Sie die Eingabetaste drücken.

AWS SAM erstellt während des Bereitstellungsprozesses die folgenden Ressourcen in Ihrem AWS-Konto:
+ Ein CloudFormation-[Stack](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-whatis-concepts.html#cfn-concepts-stacks) mit dem Namen `sam-app`
+ Eine Lambda-Funktion mit dem Namensformat `sam-app-LambdaIaCDemo-99VXPpYQVv1M`
+ Eine Amazon-SQS-Warteschlange mit dem Namensformat `sam-app-LambdaIaCQueue-xL87VeKsGiIo`
+ Eine DynamoDB-Tabelle mit dem Namensformat `sam-app-LambdaIaCTable-CN0S66C0VLNV`

AWS SAM erstellt auch die erforderlichen IAM-Rollen und -Richtlinien, sodass Ihre Lambda-Funktion Nachrichten aus der Amazon-SQS-Warteschlange lesen und CRUD-Operationen in der DynamoDB-Tabelle ausführen kann.

## Testen der bereitgestellten Anwendung (optional)
<a name="foundation-iac-test"></a>

Um zu überprüfen, ob Ihre Serverless-Anwendung korrekt bereitgestellt wurde, senden Sie eine Nachricht an Ihre Amazon-SQS-Warteschlange, die ein Schlüssel-Wert-Paar enthält, und überprüfen Sie, ob Lambda mit diesen Werten ein Element in Ihre DynamoDB-Tabelle schreibt.

**So testen Sie Ihre Serverless-Anwendung**

1. Öffnen Sie die Seite [Warteschlangen](https://console.aws.amazon.com/sqs/v2/home#/queues) der Amazon-SQS-Konsole und wählen Sie die Warteschlange aus, die AWS SAM aus Ihrer Vorlage erstellt hat. Der Name weist das Format `sam-app-LambdaIaCQueue-xL87VeKsGiIo` auf.

1. Wählen Sie **Nachrichten senden und empfangen** aus und fügen Sie den folgenden JSON in den **Nachrichtentext** im Abschnitt **Nachricht senden** ein.

   ```
   {
       "myKey": "myValue"
   }
   ```

1. Klicken Sie auf **Send Message (Nachricht senden)**.

   Wenn Sie Ihre Nachricht an die Warteschlange senden, ruft Lambda Ihre Funktion über Ihre Zuordnung von Ereignisquellen auf, die in Ihrer AWS SAM-Vorlage definiert ist. Um zu bestätigen, dass Lambda Ihre Funktion wie erwartet aufgerufen hat, vergewissern Sie sich, dass Ihrer DynamoDB-Tabelle ein Element hinzugefügt wurde.

1. Öffnen Sie die Seite [Tabellen](https://console.aws.amazon.com/dynamodbv2#tables) der DynamoDB-Konsole und wählen Sie Ihre Tabelle aus. Der Name weist das Format `sam-app-LambdaIaCTable-CN0S66C0VLNV` auf.

1. Wählen Sie **Tabellenelemente erkunden** aus. Im Bereich **Zurückgegebene Elemente** sollten Sie ein Element mit der **ID** `myKey` und dem **Wert** `myValue` sehen.