Guida introduttiva Terraform al supporto per AWS SAMCLI - AWS Serverless Application Model

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Guida introduttiva Terraform al supporto per AWS SAMCLI

Questo argomento spiega come iniziare a utilizzare l'interfaccia a riga di AWS Serverless Application Model comando (AWS SAMCLI) conTerraform.

Per fornire feedback e inviare richieste di funzionalità, crea un GitHubproblema.

AWS SAMCLITerraformprerequisiti

Completa tutti i prerequisiti per iniziare a utilizzarli AWS SAMCLI con i tuoi Terraform progetti.

  1. Installa o aggiorna il AWS SAMCLI

    Per verificare se è AWS SAMCLI installato, esegui quanto segue:

    $ sam --version

    Se AWS SAMCLI è già installato, l'output mostrerà una versione. Per eseguire l'aggiornamento alla versione più recente, vedereAggiornamento del AWS SAMCLI.

    Per istruzioni sull'installazione di AWS SAMCLI e tutti i relativi prerequisiti, vedere. Installa il AWS SAMCLI

  2. Installazione di Terraform

    Per verificare se l'Terraforminstallazione è stata eseguita, esegui quanto segue:

    $ terraform -version

    Per l'installazioneTerraform, consulta Installa Terraform nel Terraformregistro.

  3. Installa Docker per il test locale

    I AWS SAMCLI requisiti Docker per i test locali. Per l'installazioneDocker, vedereInstallazione di Docker da utilizzare con AWS SAMCLI.

Utilizzo dei AWS SAMCLI comandi con Terraform

Quando esegui un AWS SAMCLI comando supportato, usa l'--hook-nameopzione e fornisci il terraform valore. Di seguito è riportato un esempio:

$ sam local invoke --hook-name terraform

Puoi configurare questa opzione nel tuo file AWS SAMCLI di configurazione con quanto segue:

hook_name = "terraform"

Configurazione per Terraform progetti

Completa i passaggi descritti in questo argomento per utilizzarlo AWS SAMCLI con i Terraform progetti.

Non è richiesta alcuna configurazione aggiuntiva se costruite gli AWS Lambda artefatti all'esterno del Terraform progetto. Vedi Utilizzo di AWS SAMCLI with Terraform per il debug e il test locali per iniziare a usare. AWS SAMCLI

Se costruisci i tuoi artefatti Lambda all'interno Terraform dei tuoi progetti, devi fare quanto segue:

  1. Installa 3.8 Python o versione successiva

  2. Installa lo strumento. Make

  3. Definisci la logica di costruzione degli artefatti Lambda all'interno del tuo progetto. Terraform

  4. Definisci una sam metadata risorsa per informarli sulla tua logica AWS SAMCLI di compilazione.

  5. Usa il AWS SAMCLI sam build comando per creare i tuoi artefatti Lambda.

Installa 3.8 Python o versione successiva

Python3.8 o versione successiva è richiesta per l'uso con. AWS SAMCLI Quando eseguisam build, le AWS SAMCLI creazioni makefiles che contengono Python comandi per creare i tuoi artefatti Lambda.

Per istruzioni di installazione, consulta Downloading Python in Python's Beginners Guide.

Verifica che Python 3.8 o versione successiva sia aggiunto al percorso del tuo computer eseguendo:

$ python --version

L'output dovrebbe mostrare una versione di Python 3.8 o successiva.

Installa lo strumento Make

GNUMakeè uno strumento che controlla la generazione di eseguibili e altri file non sorgente per il progetto. Le AWS SAMCLI creazioni makefiles che si affidano a questo strumento per creare i tuoi artefatti Lambda.

Se non lo avete Make installato sul computer locale, installatelo prima di procedere.

Per Windows, puoi installarlo usando Chocolatey. Per istruzioni, vedi Uso di Chocolatey in Come installare e usare «Make» in Windows

Definisci la logica di compilazione degli artefatti Lambda

Usa il tipo di null_resource Terraform risorsa per definire la logica di compilazione Lambda. Di seguito è riportato un esempio che utilizza uno script di compilazione personalizzato per creare una funzione Lambda.

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" } }

Definire una risorsa sam metadata

La sam metadata risorsa è un tipo di null_resource Terraform risorsa che fornisce AWS SAMCLI le informazioni necessarie per localizzare gli artefatti Lambda. È necessaria una sam metadata risorsa unica per ogni funzione o layer Lambda del progetto. Per ulteriori informazioni su questo tipo di risorsa, consulta null_resource nel registro. Terraform

Per definire una risorsa sam metadata
  1. Assegna un nome sam_metadata_ alla risorsa iniziando con per identificare la risorsa come sam metadata risorsa.

  2. Definisci le proprietà degli artefatti Lambda all'interno del triggers blocco della risorsa.

  3. Specificate il null_resource che contiene la logica di compilazione Lambda con l'depends_onargomento.

    Di seguito è riportato un modello di esempio:

    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 ] }

    Di seguito è riportato un esempio di sam metadata risorsa:

    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 ] }

Il contenuto della sam metadata risorsa varierà in base al tipo di risorsa Lambda (funzione o livello) e al tipo di imballaggio (ZIPo immagine). Per ulteriori informazioni, oltre ad esempi, consultarisorsa di metadati sam.

Quando configuri una sam metadata risorsa e utilizzi un AWS SAMCLI comando supportato, AWS SAMCLI genererà il file di metadati prima di eseguire il AWS SAMCLI comando. Dopo aver generato questo file, puoi utilizzare l'--skip-prepare-infraopzione con AWS SAMCLI i comandi futuri per saltare il processo di generazione dei metadati e risparmiare tempo. Questa opzione deve essere utilizzata solo se non hai apportato modifiche all'infrastruttura, come la creazione di nuove funzioni Lambda o nuovi API endpoint.

Usa il AWS SAMCLI per costruire i tuoi artefatti Lambda

Usa il AWS SAMCLI sam build comando per creare i tuoi artefatti Lambda. Quando eseguisam build, AWS SAMCLI esegue le seguenti operazioni:

  1. Cerca sam metadata risorse nel tuo Terraform progetto per conoscere e localizzare le tue risorse Lambda.

  2. Avvia la logica di compilazione Lambda per creare gli artefatti Lambda.

  3. Crea una .aws-sam directory che organizza il Terraform progetto da utilizzare con i comandi. AWS SAMCLI sam local

Per creare con sam build
  1. Dalla directory contenente il modulo Terraform root, esegui quanto segue:

    $ sam build --hook-name terraform
  2. Per creare una funzione o un layer Lambda specifico, esegui quanto segue

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

    L'ID della risorsa Lambda può essere il nome della funzione Lambda o l'indirizzo completo della Terraform risorsa, ad esempio o. aws_lambda_function.list_books module.list_book_function.aws_lambda_function.this[0]

Se il codice sorgente della funzione o altri file di Terraform configurazione si trovano all'esterno della directory contenente il modulo Terraform root, è necessario specificare la posizione. Utilizzate l'--terraform-project-root-pathopzione per specificare il percorso assoluto o relativo della directory di primo livello contenente questi file. Di seguito è riportato un esempio:

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

Crea usando un contenitore

Quando si esegue il AWS SAMCLI sam build comando, è possibile configurarlo AWS SAMCLI per creare l'applicazione utilizzando un Docker contenitore locale.

Nota

È necessario averlo Docker installato e configurato. Per istruzioni, consulta Installazione di Docker da utilizzare con AWS SAMCLI.

Per creare utilizzando un contenitore
  1. Crea un Dockerfile file che contenga gli Make strumenti TerraformPython, e. Dovresti includere anche il runtime della funzione Lambda.

    Di seguito è riportato un esempioDockerfile:

    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. docker buildUsalo per creare la tua Docker immagine.

    Di seguito è riportato un esempio:

    $ docker build --tag terraform-build:v1 <path-to-directory-containing-Dockerfile>
  3. Esegui il AWS SAMCLI sam build comando con le --build-image opzioni --use-container and.

    Di seguito è riportato un esempio:

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

Passaggi successivi

Per iniziare a utilizzarli AWS SAMCLI con i tuoi Terraform progetti, vediUtilizzo di AWS SAMCLI with Terraform per il debug e il test locali.

Configurazione di Terraform Cloud

Ti consigliamo di utilizzare Terraform v1.6.0 una versione più recente. Se si utilizza una versione precedente, è necessario generare un file del Terraform piano localmente. Il file del piano locale fornisce AWS SAM CLI le informazioni necessarie per eseguire test e debug locali.

Per generare un file di piano locale
Nota

Questi passaggi non sono necessari Terraform v1.6.0 o più recenti. Per iniziare a usare AWS SAM CLI withTerraform Cloud, consulta AWS SAMCLIUsando con Terraform.

  1. Configura un API token: il tipo di token dipenderà dal tuo livello di accesso. Per ulteriori informazioni, consulta APITokens nella Terraform Clouddocumentazione.

  2. Imposta la variabile di ambiente del API token: di seguito è riportato un esempio tratto dalla riga di comando:

    $ export TOKEN="<api-token-value>"
  3. Ottieni il tuo Run ID: dalla Terraform Cloud console, individua l'ID di esecuzione per la Terraform corsa che desideri utilizzare con AWS SAMCLI.

    L'ID di corsa si trova nel percorso breadcrumb della corsa.

    Percorso Breadcrumb in cui viene visualizzato l'ID di corsa. Terraform Cloud
  4. Recupera il file del piano: utilizzando il API token, ottieni il file del piano locale. Di seguito è riportato un esempio tratto dalla riga di comando:

    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

Ora sei pronto per usare AWS SAMCLI conTerraform Cloud. Quando utilizzate un AWS SAMCLI comando supportato, utilizzate l'--terraform-plan-fileopzione per specificare il nome e il percorso del file del piano locale. Di seguito è riportato un esempio:

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

Di seguito è riportato un esempio di utilizzo del sam local start-api comando:

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

Per un'applicazione di esempio che puoi usare con questi esempi, consulta api_gateway_v2_tf_cloud nel repository aws-samples. GitHub

Passaggi successivi

Per iniziare a usare il AWS SAMCLI withTerraform Cloud, vediUtilizzo di AWS SAMCLI with Terraform per il debug e il test locali.