AWS CloudFormation - Erstellen einer Layer-Version und -Funktion, die Layer verwendet

Sep 26 2020

Ich habe eine Cloudformation-Vorlage, die derzeit ungefähr so ​​aussieht.

Resources:
  MyLayer:
    Type: AWS::Lambda::LayerVersion
    Properties:
      CompatibleRuntimes:
        - nodejs12.x
        - nodejs10.x
      Content: ../layers/nodejs/
      LayerName: myLayer
      ### etc...
  MyLambda:
    Type: AWS::Lambda::Function
    DependsOn: MyLayer
    Properties:
      Code: lambdas/my-lambda.js
      Description: A lambda that makes use of MyLayer
      FunctionName: myLambda
      Handler: my-lambda.handler
      Layers: !Ref CommonLayer
      ### etc... 

Die Kernidee hier ist, dass ich eine neue LayerVersion erstellen und das Lambda-Update bei jeder Bereitstellung auf diese neueste LayerVersion aktualisieren möchte. Ich habe Probleme beim Einfügen von MyLayers Arn in die Layer-Eigenschaft von MyLambda. Folgendes habe ich versucht:

  1. ! Ref CommonLayer, den ich gesehen habe, gibt den Arn basierend auf diesem CloudFormation-Cheatsheet zurück . Beim Erstellen des Stapels beim Erstellen von MyLambda (Ausgabe zeigt, dass MyLayer erfolgreich erstellt wurde) tritt ein Fehler auf, der besagt: "Wert der Eigenschaft Layer müssen vom Typ Liste der Zeichenfolgen sein."

  2. ! GetAtt CommonLayer.Arn Diese Funktion wird jedoch für Layer nicht unterstützt / der Rückgabewert hat kein Arn-Feld.

Ist dies ein Problem vom Typ YAML-Syntax oder ist mein Ziel, eine Ebene und dann ein Lambda zu erstellen, das von dieser Ebene abhängt, in einer Cloudformation-Vorlage nicht möglich? Vielen Dank!

Antworten

MLu Sep 26 2020 at 13:39

Wert der Eigenschaft Layer müssen vom Typ List of String sein

Ebenen müssen eine Liste sein . Sie müssen ersetzen:

  MyLambda:
    Properties:
      Layers: !Ref CommonLayer

Mit diesem:

  MyLambda:
    Properties:
      Layers:
      - !Ref CommonLayer

Hoffentlich hilft das :)