Distribuisci funzioni Lambda per Go con gli archivi di file .zip
Il codice della funzione AWS Lambda è costituito da script o programmi compilati e dalle relative dipendenze. Utilizza un pacchetto di implementazione per distribuire il codice della funzione a Lambda. Lambda supporta due tipi di pacchetti di implementazione: immagini di container e archivi di file .zip.
In questa pagina viene descritto come creare un file .zip come pacchetto di implementazione per il runtime Go e utilizzarlo quindi per implementare il codice della funzione in AWS Lambda tramite la Console di gestione AWS, l'AWS Command Line Interface (AWS CLI) e AWS Serverless Application Model (AWS SAM).
Nota che Lambda utilizza le autorizzazioni dei file POSIX, quindi potresti aver bisogno di impostare le autorizzazioni per la cartella del pacchetto di implementazione
Sezioni
Creazione di un file .zip su macOS e Linux
I passaggi seguenti mostrano come compilare il file eseguibile utilizzando il comando go build e creare un pacchetto di implementazione con file .zip per Lambda. Prima di compilare il codice, assicurati di aver installato il pacchetto lambda
go get github.com/aws/aws-lambda-go/lambda
Se la funzione utilizza AWS SDK per Go, scarica il set standard di moduli SDK, insieme a tutti i client API di servizio AWS richiesti dall'applicazione. Per informazioni su come installare l'SDK for Go, consulta la Guida introduttiva a AWS SDK per Go versione 2
Utilizzo della famiglia di runtime forniti
Go è implementato in modo diverso rispetto ad altri runtime gestiti. Poiché Go viene compilato nativamente in un file binario eseguibile, non richiede un runtime linguistico dedicato. Usa un runtime solo per il sistema operativo (la famiglia di runtime provided) per distribuire le funzioni Go in Lambda.
Creazione di un pacchetto di implementazione .zip (macOS/Linux)
-
Nella directory del progetto contenente il file
main.godell'applicazione, compila il tuo eseguibile. Tieni presente quanto segue:-
L'eseguibile deve essere denominato
bootstrap. Per ulteriori informazioni, consulta Convenzioni di denominazione dei gestori. -
Imposta l'architettura del set di istruzioni di destinazione. I runtime del sistema operativo supportano sia arm64 sia x86_64.
-
Puoi usare il tag facoltativo
lambda.norpcper escludere il componente Remote Procedure Call (RPC) della libreria lambda. Il componente RPC è richiesto solo quando si utilizza il runtime Go 1.x obsoleto. L'esclusione dell'RPC riduce le dimensioni del pacchetto di implementazione.
Per l'architettura arm64:
GOOS=linux GOARCH=arm64go build -tags lambda.norpc -o bootstrap main.goPer l'architettura x86_64:
GOOS=linux GOARCH=amd64go build -tags lambda.norpc -o bootstrap main.go -
-
(Opzionale) Potrebbe essere necessario compilare pacchetti con
CGO_ENABLED=0impostato su Linux:GOOS=linux GOARCH=arm64CGO_ENABLED=0 go build -o bootstrap -tags lambda.norpc main.goQuesto comando crea un pacchetto binario stabile per le versioni standard della libreria C (
libc) che possono essere diverse su Lambda e su altri dispositivi. -
Crea un pacchetto di distribuzione comprimendo l'eseguibile in un file .zip.
zip myFunction.zip bootstrapNota
Il file
bootstrapdeve trovarsi nella posizione root del file .zip. -
Crea la funzione . Tieni presente quanto segue:
-
Il file binario deve essere denominato
bootstrapma il nome del gestore può essere qualsiasi cosa. Per ulteriori informazioni, consulta Convenzioni di denominazione dei gestori. -
L'opzione
--architecturesè necessaria solo se si utilizza arm64. Il valore predefinito è x86_64. -
Per
--role, specifica il nome della risorsa Amazon (ARN) del ruolo di esecuzione.
aws lambda create-function --function-name myFunction \ --runtime provided.al2023 --handlerbootstrap\ --architecturesarm64\ --rolearn:aws:iam::111122223333:role/lambda-ex\ --zip-file fileb://myFunction.zip -
Creazione di un file .zip su Windows
La seguente procedura mostra come scaricare lo strumento build-lambda-zip
Nota
Se non è già presente, è necessario installare gitgit alla variabile di ambiente di Windows %PATH%.
Prima di compilare il codice, assicurati di aver installato la libreria lambda
go get github.com/aws/aws-lambda-go/lambda
Se la funzione utilizza AWS SDK per Go, scarica il set standard di moduli SDK, insieme a tutti i client API di servizio AWS richiesti dall'applicazione. Per informazioni su come installare l'SDK for Go, consulta la Guida introduttiva a AWS SDK per Go versione 2
Utilizzo della famiglia di runtime forniti
Go è implementato in modo diverso rispetto ad altri runtime gestiti. Poiché Go viene compilato nativamente in un file binario eseguibile, non richiede un runtime linguistico dedicato. Usa un runtime solo per il sistema operativo (la famiglia di runtime provided) per distribuire le funzioni Go in Lambda.
Creazione di un pacchetto di implementazione .zip (Windows)
-
Scarica lo strumento build-lambda-zip da GitHub.
go install github.com/aws/aws-lambda-go/cmd/build-lambda-zip@latest -
Utilizza lo strumento dal tuo
GOPATHper creare un file .zip. Se si dispone di un'installazione predefinita di Go, lo strumento si trova solitamente in%USERPROFILE%\Go\bin. Altrimenti, vai alla posizione in cui è stato installato il runtime Go ed esegui una delle seguenti operazioni: -
Crea la funzione . Tieni presente quanto segue:
-
Il file binario deve essere denominato
bootstrapma il nome del gestore può essere qualsiasi cosa. Per ulteriori informazioni, consulta Convenzioni di denominazione dei gestori. -
L'opzione
--architecturesè necessaria solo se si utilizza arm64. Il valore predefinito è x86_64. -
Per
--role, specifica il nome della risorsa Amazon (ARN) del ruolo di esecuzione.
aws lambda create-function --function-name myFunction \ --runtime provided.al2023 --handlerbootstrap\ --architecturesarm64\ --rolearn:aws:iam::111122223333:role/lambda-ex\ --zip-file fileb://myFunction.zip -
Creazione e aggiornamento delle funzioni Lambda di Go utilizzando file .zip
Dopo aver creato il pacchetto di implementazione .zip, puoi utilizzarlo per creare una nuova funzione Lambda o aggiornarne una esistente. È possibile caricare il pacchetto .zip utilizzando la console Lambda, l'AWS Command Line Interface e l'API Lambda. Puoi anche creare e aggiornare le funzioni Lambda usando AWS Serverless Application Model (AWS SAM) e CloudFormation.
La dimensione massima per un pacchetto di implementazione .zip per Lambda è di 250 MB (dopo l'estrazione). Nota che questo limite si applica alla dimensione combinata di tutti i file caricati, inclusi eventuali livelli Lambda.
Il runtime Lambda necessita dell'autorizzazione per leggere i file nel pacchetto di distribuzione. Nella notazione ottale delle autorizzazioni di Linux, Lambda richiede 644 autorizzazioni per i file non eseguibili (rw-r--r--) e 755 autorizzazioni (rwxr-xr-x) per le directory e i file eseguibili.
In Linux e macOS, utilizza il comando chmod per modificare le autorizzazioni file su file e directory nel pacchetto di implementazione. Ad esempio, per assegnare a un file non eseguibile le autorizzazioni corrette, utilizza il comando seguente.
chmod 644 <filepath>
Per modificare le autorizzazioni file in Windows, consulta Set, View, Change, or Remove Permissions on an Object
Nota
Se non concedi a Lambda le autorizzazioni necessarie per accedere alle directory del pacchetto di implementazione, Lambda imposta le autorizzazioni per tali directory su 755 (rwxr-xr-x).
Creazione e aggiornamento delle funzioni con file .zip utilizzando la console
Per creare una nuova funzione, devi prima creare la funzione nella console, quindi devi caricare il tuo archivio .zip. Per aggiornare una funzione esistente, apri la pagina relativa alla funzione, quindi segui la stessa procedura per aggiungere il file .zip aggiornato.
Se il file .zip ha dimensioni inferiori a 50 MB, è possibile creare o aggiornare una funzione caricando il file direttamente dal computer locale. Per i file .zip di dimensioni superiori a 50 MB, prima è necessario caricare il pacchetto in un bucket Amazon S3. Per istruzioni su come caricare un file in un bucket Amazon S3 utilizzando la Console di gestione AWS, consulta la sezione Nozioni di base su Amazon S3. Per caricare file utilizzando la AWS CLI, consulta la sezione Spostamento di oggetti nella Guida per l'utente di AWS CLI.
Nota
Non è possibile convertire una funzione di immagine di container esistente per utilizzare un archivio .zip. È necessario creare una nuova funzione.
Creazione di una nuova funzione (console)
-
Apri la pagina Funzioni
della console Lambda e scegli Crea funzione. -
Scegli Author from scratch (Crea da zero).
-
In Basic information (Informazioni di base) eseguire queste operazioni:
-
In Nome funzione, inserisci il nome della funzione.
-
In Runtime, selezionare
provided.al2023.
-
-
(Opzionale) In Autorizzazioni espandere Modifica ruolo di esecuzione predefinito. Puoi creare un nuovo ruolo di esecuzione o utilizzare un ruolo esistente.
-
Scegli Crea funzione. Lambda crea una funzione di base "Hello world" utilizzando il runtime scelto.
Caricamento di un archivio .zip dal computer locale (console)
-
Nella pagina Funzioni
della console Lambda, scegli la funzione per cui vuoi caricare il file .zip. -
Scegli la scheda Codice.
-
Nel riquadro Origine del codice, scegli Carica da.
-
Scegli File .zip.
-
Per caricare il file .zip, procedi come segue:
-
Seleziona Carica, quindi seleziona il tuo file .zip nel selettore di file.
-
Seleziona Apri.
-
Selezionare Salva.
-
Caricamento di un archivio .zip da un bucket Amazon S3 (console)
-
Nella pagina Funzioni
della console Lambda, scegli la funzione per cui vuoi caricare un nuovo file .zip. -
Scegli la scheda Codice.
-
Nel riquadro Origine del codice, scegli Carica da.
-
Scegli Posizione Amazon S3.
-
Incolla l'URL del link Amazon S3 del tuo file .zip e scegli Salva.
Creazione e aggiornamento delle funzioni con file .zip utilizzando la AWS CLI
È possibile utilizzare la AWS CLI per creare una nuova funzione o aggiornare una funzione esistente mediante un file .zip. Utilizza i comandi create-function e update-function-code per implementare il tuo pacchetto .zip. Se il file .zip ha dimensioni inferiori a 50 MB, è possibile caricare il pacchetto .zip da una posizione di file nella macchina di compilazione locale. Per i file di dimensioni maggiori, è necessario caricare il pacchetto .zip da un bucket Amazon S3. Per istruzioni su come caricare un file in un bucket Amazon S3 utilizzando la AWS CLI, consulta la sezione Spostamento di oggetti nella Guida per l'utente di AWS CLI.
Nota
Se carichi il file .zip da un bucket Amazon S3 utilizzando la AWS CLI, il bucket deve trovarsi nella stessa Regione AWS della funzione.
Per creare una nuova funzione mediante un file .zip con la AWS CLI, è necessario specificare quanto segue:
-
Il nome della funzione (
--function-name) -
Il runtime della tua funzione (
--runtime) -
Il nome della risorsa Amazon (ARN) del ruolo di esecuzione della funzione (
--role) -
Il nome del metodo del gestore nel codice della funzione (
--handler)
È inoltre necessario specificare la posizione del file .zip. Se il file .zip si trova in una cartella sulla macchina di compilazione locale, utilizza l'opzione --zip-file per specificare il percorso del file, come mostrato nel seguente comando di esempio.
aws lambda create-function --function-name myFunction \ --runtime provided.al2023 --handler bootstrap \ --role arn:aws:iam::111122223333:role/service-role/my-lambda-role \ --zip-file fileb://myFunction.zip
Per specificare la posizione del file .zip in un bucket Amazon S3, utilizza l'opzione --code illustrata nel seguente comando di esempio. È necessario utilizzare il parametro S3ObjectVersion solo per gli oggetti con controllo delle versioni.
aws lambda create-function --function-name myFunction \ --runtime provided.al2023 --handler bootstrap \ --role arn:aws:iam::111122223333:role/service-role/my-lambda-role \ --code S3Bucket=amzn-s3-demo-bucket,S3Key=myFileName.zip,S3ObjectVersion=myObjectVersion
Per aggiornare una funzione esistente mediante la CLI, specifica il nome della funzione utilizzando il parametro --function-name. È inoltre necessario specificare la posizione del file .zip che desideri utilizzare per aggiornare il codice della funzione. Se il file .zip si trova in una cartella sulla macchina di compilazione locale, utilizza l'opzione --zip-file per specificare il percorso del file, come mostrato nel seguente comando di esempio.
aws lambda update-function-code --function-name myFunction \ --zip-file fileb://myFunction.zip
Per specificare la posizione del file .zip in un bucket Amazon S3, utilizza le opzioni --s3-bucket e --s3-key come illustrato nel seguente comando di esempio. È necessario utilizzare il parametro --s3-object-version solo per gli oggetti con controllo delle versioni.
aws lambda update-function-code --function-name myFunction \ --s3-bucket amzn-s3-demo-bucket --s3-key myFileName.zip --s3-object-version myObject Version
Creazione e aggiornamento delle funzioni con file .zip utilizzando l'API Lambda
Per creare e aggiornare le funzioni mediante un archivio di file .zip, utilizza le seguenti operazioni API:
Creazione e aggiornamento delle funzioni con file .zip utilizzando AWS SAM
AWS Serverless Application Model (AWS SAM) è un toolkit che aiuta a semplificare il processo di creazione ed esecuzione di applicazioni serverless su AWS. Definisci le risorse per la tua applicazione in un modello YAML o JSON e usa l'interfaccia della linea di comando AWS SAM (AWS SAM CLI) per compilare, creare pacchetti e implementare le tue applicazioni. Quando crei una funzione Lambda da un modello AWS SAM, AWS SAM crea automaticamente un pacchetto di implementazione .zip o un'immagine di container con il codice della funzione e le dipendenze specificate. Per ulteriori informazioni sull'utilizzo di AWS SAM per creare e implementare funzioni Lambda, consulta la pagina Nozioni di base su AWS SAM nella Guida introduttiva per gli sviluppatori di AWS Serverless Application Model.
Puoi anche utilizzare AWS SAM per creare una funzione Lambda mediante un archivio di file .zip esistente. Per creare una funzione Lambda utilizzando AWS SAM, puoi salvare il tuo file .zip in un bucket Amazon S3 o in una cartella locale sul tuo computer di compilazione. Per istruzioni su come caricare un file in un bucket Amazon S3 utilizzando la AWS CLI, consulta la sezione Spostamento di oggetti nella Guida per l'utente di AWS CLI.
Nel modello AWS SAM, la risorsa AWS::Serverless::Function specifica la funzione Lambda. In questa risorsa, imposta le seguenti proprietà per creare una funzione utilizzando un archivio di file .zip:
-
PackageType: imposta il valore suZip -
CodeUri: imposta il valore sull'URI Amazon S3, sul percorso della cartella locale o sull'oggetto FunctionCode del codice della funzione -
Runtime: imposta il runtime prescelto
Con AWS SAM, se il file .zip è superiore a 50 MB, non è necessario caricarlo prima in un bucket Amazon S3. AWS SAM può caricare pacchetti .zip fino alla dimensione massima consentita di 250 MB (dopo l'estrazione) da una posizione sulla macchina di compilazione locale.
Per ulteriori informazioni sull'implementazione di funzioni mediante il file .zip in AWS SAM, consulta la sezione AWS::Serverless::Function nella Guida per gli sviluppatori di AWS SAM.
Esempio: utilizzo di AWS SAM per creare una funzione Go con provided.al2023
-
Crea un modello AWS SAM con le seguenti proprietà:
-
BuildMethod: specifica il compilatore per l'applicazione. Utilizza
go1.x. -
Runtime: utilizza
provided.al2023. -
CodeUri: inserisci il percorso del tuo codice.
-
Architetture: usa
[arm64]per l'architettura arm64. Per l'architettura del set di istruzioni x86_64, utilizza[amd64]oppure rimuovi la proprietàArchitectures.
Esempio template.yaml
AWSTemplateFormatVersion: '2010-09-09' Transform: 'AWS::Serverless-2016-10-31' Resources: HelloWorldFunction: Type: AWS::Serverless::Function Metadata: BuildMethod:go1.xProperties: CodeUri:hello-world/# folder where your main program resides Handler: bootstrap Runtime:provided.al2023Architectures:[arm64] -
-
Usa il comando sam build per compilare l'eseguibile.
sam build -
Utilizza il comando sam deploy per implementare la funzione su Lambda.
sam deploy --guided
Creazione e aggiornamento delle funzioni con file .zip utilizzando CloudFormation
È possibile utilizzare CloudFormation per creare una funzione Lambda mediante un archivio di file .zip. Per creare una funzione Lambda da un file .zip, devi prima caricare il file su un bucket Amazon S3. Per istruzioni su come caricare un file in un bucket Amazon S3 utilizzando la AWS CLI, consulta la sezione Spostamento di oggetti nella Guida per l'utente di AWS CLI.
Nel modello CloudFormation, la risorsa AWS::Lambda::Function specifica la funzione Lambda. In questa risorsa, imposta le seguenti proprietà per creare una funzione utilizzando un archivio di file .zip:
-
PackageType: imposta il valore suZip -
Code: inserisci il nome del bucket Amazon S3 e il nome del file .zip nei campiS3BucketeS3Key -
Runtime: imposta il runtime prescelto
Il file .zip che CloudFormation genera non può superare i 4 MB. Per ulteriori informazioni sull'implementazione di funzioni mediante un file .zip in CloudFormation, consulta la sezione AWS::Lambda::Function nella Guida per gli sviluppatori di CloudFormation.