Hochladen lokaler Artefakte in einen S3-Bucket - AWS CloudFormation

Hochladen lokaler Artefakte in einen S3-Bucket

Bei einigen Ressourceneigenschaften, die einen Amazon S3-Speicherort (einen Bucket-Namen und Dateinamen) erfordern, können Sie stattdessen lokale Referenzen angeben. Sie können beispielsweise den S3-Speicherort des Quellcodes Ihrer AWS Lambda-Funktion oder die Amazon API Gateway-Datei einer OpenAPI (früher Swagger)-REST-API angeben. Anstatt die Dateien manuell in einen S3-Bucket hochzuladen und dann den Speicherort zu Ihrer Vorlage hinzuzufügen, können Sie lokale Referenzen, die als lokale Artefakte bezeichnet werden, in Ihrer Vorlage angeben. Anschließend können Sie sie mit dem package-Befehl schnell hochladen. Ein lokales Artefakt ist ein Pfad zu einer Datei oder einem Ordner, die bzw. der mit dem package-Befehl in Amazon S3 hochgeladen wird. Ein Artefakt kann beispielsweise ein lokaler Pfad zum Quellcode Ihrer AWS Lambda-Funktion oder die Amazon API Gateway-Datei einer REST-API von OpenAPI sein.

Wenn Sie eine Datei angeben, lädt der Befehl sie direkt in den S3-Bucket hoch. Nach dem Hochladen der Artefakte gibt der Befehl eine Kopie Ihrer Vorlage zurück, wobei Verweise auf lokale Artefakte durch den S3-Speicherort ersetzt werden, in den der Befehl die Artefakte hochgeladen hat. Die zurückgegebene Vorlage können Sie dann zum Erstellen oder Aktualisieren eines Stacks verwenden.

Wenn Sie einen Ordner angeben, erstellt der Befehl eine ZIP-Datei für den Ordner und lädt dann die ZIP-Datei hoch. Wenn Sie keinen Pfad angeben, erstellt der Befehl eine ZIP-Datei für das Arbeitsverzeichnis und lädt sie hoch. Sie können einen absoluten oder relativen Pfad angeben, wobei der relative Pfad relativ zum Speicherort Ihrer Vorlage ist.

Sie können lokale Artefakte nur für Ressourceneigenschaften verwenden, die der package-Befehl unterstützt. Weitere Informationen zu diesem Befehl sowie eine Liste der unterstützten Ressourceneigenschaften finden Sie unter dem Befehl aws cloudformation package in der AWS CLI Command Reference.

Die folgende Vorlage gibt das lokale Artefakt für den Quellcode einer Lambda-Funktion an. Der Quellcode ist im Ordner /home/user/code/lambdafunction des Benutzers gespeichert.

Originalvorlage

AWSTemplateFormatVersion: '2010-09-09' Transform: 'AWS::Serverless-2016-10-31' Resources: MyFunction: Type: 'AWS::Serverless::Function' Properties: Handler: index.handler Runtime: nodejs8.10 CodeUri: /home/user/code/lambdafunction

Mit dem folgenden Befehl wird eine ZIP-Datei mit dem Quellcode-Ordner der Funktion erstellt und dann die ZIP-Datei in den Stammordner des Buckets my-bucket hochgeladen.

Package-Befehl

aws cloudformation package --template /path_to_template/template.json --s3-bucket mybucket --output-template-file packaged-template.json --use-json

Der Befehl speichert die von ihm generierte Vorlage unter dem Pfad, der in der Option --output angegeben ist. Der Befehl ersetzt das Artefakt durch den S3-Speicherort, wie im folgenden Beispiel dargestellt:

Resultierende Vorlage

AWSTemplateFormatVersion: '2010-09-09' Transform: 'AWS::Serverless-2016-10-31' Resources: MyFunction: Type: 'AWS::Serverless::Function' Properties: Handler: index.handler Runtime: nodejs8.10 CodeUri: s3://mybucket/lambdafunction.zip