View a markdown version of this page

Erste Schritte mit Terraform Unterstützung für AWS SAM CLI - AWS Serverless Application Model

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.

Erste Schritte mit Terraform Unterstützung für AWS SAM CLI

Dieses Thema behandelt die ersten Schritte mit der Verwendung der AWS Serverless Application Model Befehlszeilenschnittstelle (AWS SAMCLI) mitTerraform.

Erstellen Sie ein GitHub Problem, um Feedback zu geben und Funktionsanfragen einzureichen.

AWS SAM CLI Terraform Voraussetzungen

Erfüllen Sie alle Voraussetzungen, um das in AWS SAMCLI Ihren Terraform Projekten verwenden zu können.

  1. Installieren oder aktualisieren Sie das AWS SAM CLI

    Um zu überprüfen, ob Sie das AWS SAMCLI installiert haben, führen Sie Folgendes aus:

    $ sam --version

    Wenn das bereits installiert AWS SAMCLI ist, wird in der Ausgabe eine Version angezeigt. Informationen zum Upgrade auf die neueste Version finden Sie unterAktualisierung des AWS SAMCLI.

    Anweisungen zur Installation von AWS SAMCLI Along mit allen zugehörigen Voraussetzungen finden Sie unterInstallieren Sie das AWS SAMCLI.

  2. Installieren Terraform

    Gehen Sie wie folgt vor, um zu überprüfen, ob Sie es Terraform installiert haben:

    $ terraform -version

    Informationen zur Installation Terraform finden Sie unter Installieren Terraform in der Terraform Registrierung.

  3. Installieren Docker für lokale Tests

    Die AWS SAMCLI Anforderungen Docker für lokale Tests. Informationen zur Installation Docker finden Sie unterInstallation von Docker zur Verwendung mit dem AWS SAMCLI.

Verwenden AWS SAM CLI Befehle mit Terraform

Wenn Sie einen unterstützten AWS SAMCLI Befehl ausführen, verwenden Sie die --hook-name Option und geben Sie den terraform Wert an. Im Folgenden wird ein Beispiel gezeigt:

$ sam local invoke --hook-name terraform

Sie können diese Option in Ihrer AWS SAMCLI Konfigurationsdatei wie folgt konfigurieren:

hook_name = "terraform"

Richten Sie ein für Terraform projects

Führen Sie die Schritte in diesem Thema aus, um das AWS SAMCLI mit Terraform Projekten zu verwenden.

Wenn Sie Ihre AWS Lambda Artefakte außerhalb Ihres Terraform Projekts erstellen, ist kein zusätzliches Setup erforderlich. Informationen Verwendung der AWS SAM CLI mit Terraform zum lokalen Debuggen und Testen zum Einstieg in die Verwendung von finden Sie unter AWS SAMCLI.

Wenn Sie Ihre Lambda-Artefakte in Ihren Terraform Projekten erstellen, müssen Sie Folgendes tun:

  1. Installieren Sie Python 3.8 oder neuer

  2. Installieren Sie das Make Tool.

  3. Definieren Sie die Build-Logik Ihrer Lambda-Artefakte in Ihrem Terraform Projekt.

  4. Definieren Sie eine sam metadata Ressource, die AWS SAMCLI Sie über Ihre Build-Logik informiert.

  5. Verwenden Sie den AWS SAMCLI sam build Befehl, um Ihre Lambda-Artefakte zu erstellen.

Installieren Python 3.8 oder neuer

Python3.8 oder neuer ist für die Verwendung mit dem erforderlich AWS SAMCLI. Wenn Sie ausführensam build, werden die Creates AWS SAMCLI ausgeführtmakefiles, die Python Befehle zum Erstellen Ihrer Lambda-Artefakte enthalten.

Eine Installationsanleitung finden Sie unter Python herunterladen im Python-Anfängerhandbuch.

Stellen Sie sicher, dass Python 3.8 oder neuer zu Ihrem Computerpfad hinzugefügt wurde, indem Sie Folgendes ausführen:

$ python --version

Die Ausgabe sollte eine Version von Python anzeigen, die 3.8 oder neuer ist.

Installieren Sie das Marke tool

GNUMakeist ein Tool, das die Generierung von ausführbaren Dateien und anderen Nicht-Quelldateien für Ihr Projekt steuert. Die Kreationen AWS SAMCLI, makefiles die auf dieses Tool angewiesen sind, um Ihre Lambda-Artefakte zu erstellen.

Wenn Sie es nicht auf Ihrem lokalen Computer Make installiert haben, installieren Sie es, bevor Sie fortfahren.

Für Windows können Sie die Installation mit Chocolatey durchführen. Eine Anleitung finden Sie unter Verwenden von Chocolatey im Abschnitt So installieren und verwenden Sie „Make“ in Windows

Definieren Sie die Build-Logik für Lambda-Artefakte

Verwenden Sie den null_resource Terraform Ressourcentyp, um Ihre Lambda-Build-Logik zu definieren. Im Folgenden finden Sie ein Beispiel, das ein benutzerdefiniertes Build-Skript verwendet, um eine Lambda-Funktion zu erstellen.

resource "null_resource" "build_lambda_function" { triggers = { build_number = "${timestamp()}" } provisioner "local-exec" { command = substr(pathexpand("~"), 0, 1) == "/"? "./py_build.sh \"${local.lambda_src_path}\" \"${local.building_path}\" \"${local.lambda_code_filename}\" Function" : "powershell.exe -File .\\PyBuild.ps1 ${local.lambda_src_path} ${local.building_path} ${local.lambda_code_filename} Function" } }

Definieren Sie eine dieselben Metadaten Ressource

Die sam metadata Ressource ist ein null_resource Terraform Ressourcentyp, der die AWS SAMCLI Informationen bereitstellt, die sie zum Auffinden Ihrer Lambda-Artefakte benötigt. Für jede Lambda-Funktion oder -Layer in Ihrem Projekt ist eine eindeutige sam metadata Ressource erforderlich. Weitere Informationen zu diesem Ressourcentyp finden Sie unter null_resource in der Registrierung. Terraform

Um eine zu definieren dieselben Metadaten Ressource
  1. Benennen Sie Ihre Ressource, beginnend mitsam_metadata_, um die Ressource als sam metadata Ressource zu identifizieren.

  2. Definieren Sie Ihre Lambda-Artefakteigenschaften innerhalb des triggers Blocks Ihrer Ressource.

  3. Geben Sie mit dem Argument annull_resource, dass Ihre Lambda-Build-Logik enthalten ist. depends_on

    Das Folgende ist eine Beispielvorlage:

    resource "null_resource" "sam_metadata_..." { triggers = { resource_name = resource_name resource_type = resource_type original_source_code = original_source_code built_output_path = built_output_path } depends_on = [ null_resource.build_lambda_function # ref to your build logic ] }

    Das Folgende ist eine sam metadata Beispielressource:

    resource "null_resource" "sam_metadata_aws_lambda_function_publish_book_review" { triggers = { resource_name = "aws_lambda_function.publish_book_review" resource_type = "ZIP_LAMBDA_FUNCTION" original_source_code = "${local.lambda_src_path}" built_output_path = "${local.building_path}/${local.lambda_code_filename}" } depends_on = [ null_resource.build_lambda_function ] }

Der Inhalt Ihrer sam metadata Ressource variiert je nach Lambda-Ressourcentyp (Funktion oder Layer) und Verpackungstyp (ZIP oder Bild). Weitere Informationen sowie Beispiele finden Sie untersam-Metadaten-Ressource.

Wenn Sie eine sam metadata Ressource konfigurieren und einen unterstützten AWS SAMCLI Befehl verwenden, generiert der die Metadatendatei, bevor der AWS SAMCLI Befehl ausgeführt AWS SAMCLI wird. Sobald Sie diese Datei generiert haben, können Sie die --skip-prepare-infra Option mit zukünftigen AWS SAMCLI Befehlen verwenden, um den Prozess der Metadatengenerierung zu überspringen und Zeit zu sparen. Diese Option sollte nur verwendet werden, wenn Sie keine Infrastrukturänderungen vorgenommen haben, z. B. neue Lambda-Funktionen oder neue API-Endpunkte erstellt haben.

Verwenden Sie die AWS SAM CLI um Ihre Lambda-Artefakte zu bauen

Verwenden Sie den AWS SAMCLI sam build Befehl, um Ihre Lambda-Artefakte zu erstellen. Wenn Sie das ausführensam build, AWS SAMCLI führt das Folgendes aus:

  1. Sucht in Ihrem Terraform Projekt nach sam metadata Ressourcen, um mehr über Ihre Lambda-Ressourcen zu erfahren und sie zu finden.

  2. Initiiert Ihre Lambda-Build-Logik, um Ihre Lambda-Artefakte zu erstellen.

  3. Erstellt ein .aws-sam Verzeichnis, das Ihr Terraform Projekt zur Verwendung mit den Befehlen organisiert. AWS SAMCLI sam local

Um mit Sam Build zu bauen
  1. Führen Sie in dem Verzeichnis, das Ihr Terraform Root-Modul enthält, Folgendes aus:

    $ sam build --hook-name terraform
  2. Um eine bestimmte Lambda-Funktion oder -Layer zu erstellen, führen Sie Folgendes aus

    $ sam build --hook-name terraform lambda-resource-id

    Die Lambda-Ressourcen-ID kann der Name der Lambda-Funktion oder die vollständige Terraform Ressourcenadresse sein, z. B. oder. aws_lambda_function.list_books module.list_book_function.aws_lambda_function.this[0]

Wenn sich Ihr Funktionsquellcode oder andere Terraform Konfigurationsdateien außerhalb des Verzeichnisses befinden, das Ihr Terraform Root-Modul enthält, müssen Sie den Speicherort angeben. Verwenden Sie die --terraform-project-root-path Option, um den absoluten oder relativen Pfad zum Verzeichnis der obersten Ebene anzugeben, das diese Dateien enthält. Im Folgenden wird ein Beispiel gezeigt:

$ sam build --hook-name terraform --terraform-project-root-path ~/projects/terraform/demo

Erstellen Sie mithilfe eines Containers

Wenn Sie den AWS SAMCLI sam build Befehl ausführen, können Sie den so konfigurieren, AWS SAMCLI dass Ihre Anwendung mithilfe eines lokalen Docker Containers erstellt wird.

Anmerkung

Sie müssen es Docker installiert und konfiguriert haben. Detaillierte Anweisungen finden Sie unter Installation von Docker zur Verwendung mit dem AWS SAMCLI.

Um mit einem Container zu bauen
  1. Erstellen Sie einenDockerfile, der die Make Werkzeuge TerraformPython, und enthält. Sie sollten auch die Laufzeit Ihrer Lambda-Funktion mit einbeziehen.

    Das Folgende ist ein Beispiel: Dockerfile

    FROM public.ecr.aws/amazonlinux/amazonlinux:2
    
    RUN yum -y update \
        && yum install -y unzip tar gzip bzip2-devel ed gcc gcc-c++ gcc-gfortran \
        less libcurl-devel openssl openssl-devel readline-devel xz-devel \
        zlib-devel glibc-static libcxx libcxx-devel llvm-toolset-7 zlib-static \
        && rm -rf /var/cache/yum
    
    RUN yum -y install make \
        && yum -y install zip
    
    RUN yum install -y yum-utils \
        && yum-config-manager --add-repo https://rpm.releases.hashicorp.com/AmazonLinux/hashicorp.repo \
        && yum -y install terraform \
        && terraform --version
    
    # AWS Lambda Builders
    RUN amazon-linux-extras enable python3.8
    RUN yum clean metadata && yum -y install python3.8
    RUN curl -L get-pip.io | python3.8
    RUN pip3 install aws-lambda-builders
    RUN ln -s /usr/bin/python3.8 /usr/bin/python3
    RUN python3 --version
    
    VOLUME /project
    WORKDIR /project
    
    ENTRYPOINT ["sh"]
  2. Verwenden Sie docker build es, um Ihr Docker Image zu erstellen.

    Im Folgenden wird ein Beispiel gezeigt:

    $ docker build --tag terraform-build:v1 <path-to-directory-containing-Dockerfile>
  3. Führen Sie den AWS SAMCLI sam build Befehl mit den --build-image Optionen --use-container und aus.

    Im Folgenden wird ein Beispiel gezeigt:

    $ sam build --use-container --build-image terraform-build:v1

Nächste Schritte

Informationen zum Einstieg in AWS SAMCLI Ihre Terraform Projekte finden Sie unterVerwendung der AWS SAM CLI mit Terraform zum lokalen Debuggen und Testen.

Richten Sie ein für Terraform Cloud

Wir empfehlen, dass Sie eine neuere Version verwendenTerraform v1.6.0. Wenn Sie eine ältere Version verwenden, müssen Sie lokal eine Terraform Plandatei generieren. Die lokale Plandatei enthält die AWS SAM CLI Informationen, die sie für lokale Tests und Debugging benötigt.

Um eine lokale Plandatei zu generieren
Anmerkung

Diese Schritte sind für Terraform v1.6.0 oder neuer nicht erforderlich. Informationen zum Einstieg in die Verwendung von AWS SAM CLI mit Terraform Cloud finden Sie unterVerwenden mit AWS SAMCLI Terraform.

  1. Konfigurieren Sie ein API-Token — Die Art des Tokens hängt von Ihrer Zugriffsebene ab. Weitere Informationen finden Sie in der Terraform Cloud Dokumentation unter API-Token.

  2. Legen Sie Ihre API-Token-Umgebungsvariable fest — Das Folgende ist ein Beispiel aus der Befehlszeile:

    $ export TOKEN="<api-token-value>"
  3. Rufen Sie Ihre Lauf-ID ab — Suchen Sie in der Terraform Cloud Konsole die Run-ID für den Terraform Lauf, den Sie mit dem verwenden möchten AWS SAMCLI.

    Die Run-ID befindet sich im Breadcrumb-Pfad Ihres Laufs.

    Breadcrumb-Pfad, in dem Terraform Cloud die Lauf-ID angezeigt wird.
  4. Rufen Sie die Plandatei ab — Rufen Sie mit Ihrem API-Token Ihre lokale Plandatei ab. Das Folgende ist ein Beispiel aus der Befehlszeile:

    curl \ --header "Authorization: Bearer $TOKEN" \ --header "Content-Type: application/vnd.api+json" \ --location \ https://app.terraform.io/api/v2/runs/<run ID>/plan/json-output \ > custom_plan.json

Sie sind jetzt bereit, das AWS SAMCLI mit zu verwendenTerraform Cloud. Wenn Sie einen unterstützten AWS SAMCLI Befehl verwenden, verwenden Sie die --terraform-plan-file Option, um den Namen und Pfad Ihrer lokalen Plandatei anzugeben. Im Folgenden wird ein Beispiel gezeigt:

$ sam local invoke --hook-name terraform --terraform-plan-file custom-plan.json

Das Folgende ist ein Beispiel für die Verwendung des sam local start-api Befehls:

$ sam local start-api --hook-name terraform --terraform-plan-file custom-plan.json

Eine Beispielanwendung, die Sie mit diesen Beispielen verwenden können, finden Sie unter api_gateway_v2_tf_cloud im aws-samples-Repository. GitHub

Nächste Schritte

Informationen zum Einstieg in die Verwendung von AWS SAMCLI with Terraform Cloud finden Sie unterVerwendung der AWS SAM CLI mit Terraform zum lokalen Debuggen und Testen.