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à.
Utilizzo di Lambda con l'infrastructure as code (IaC)
Le funzioni Lambda raramente vengono eseguite in modo isolato. Spesso fanno invece parte di un'applicazione serverless con altre risorse come database, code e spazio di archiviazione. Con l'infrastruttura come codice (IaC)
Strumenti di IaC per Lambda
- AWS CloudFormation
-
CloudFormation è il servizio IaC fondamentale di. AWS Puoi utilizzare i modelli YAML o JSON per modellare e fornire l'intera AWS infrastruttura, comprese le funzioni Lambda. CloudFormation gestisce le complessità legate alla creazione, all'aggiornamento e all'eliminazione delle risorse. AWS
- AWS Serverless Application Model (AWS SAM)
-
AWS SAM è un framework open source basato su. CloudFormation Fornisce una sintassi semplificata per definire applicazioni serverless. Usa AWS SAM i modelli per effettuare rapidamente il provisioning di funzioni Lambda APIs, database e sorgenti di eventi con poche righe di YAML.
- AWS Cloud Development Kit (AWS CDK)
-
Il CDK è un approccio basato sul codice a IaC. È possibile definire l'architettura basata su Lambda utilizzando JavaScript Python, Java TypeScript, C#/.Net o Go. Scegli il tuo linguaggio preferito e utilizza elementi di programmazione come parametri, condizionali, cicli, composizione ed ereditarietà per definire il risultato desiderato della tua infrastruttura. Il CDK genera quindi i modelli sottostanti per la distribuzione. CloudFormation Per un esempio di come utilizzare Lambda con CDK, consulta Implementazione delle funzioni Lambda con AWS CDK.

AWS fornisce anche un servizio chiamato AWS Infrastructure Composer a sviluppare modelli IaC utilizzando una semplice interfaccia grafica. Con Infrastructure Composer, puoi progettare un'architettura applicativa trascinandola, raggruppandola e connettendola in un'area di disegno visiva. Servizi AWS Infrastructure Composer crea quindi uno AWS CloudFormation o più AWS SAM modelli a partire dal tuo progetto che puoi utilizzare per distribuire l'applicazione.
Nella sezione Guida introduttiva all'IaC per Lambda seguente, Infrastructure Composer viene utilizzato per sviluppare un modello per un'applicazione serverless basata su una funzione Lambda esistente.
Guida introduttiva all'IaC per Lambda
In questo tutorial, puoi iniziare a utilizzare iAc con Lambda creando AWS SAM un modello da una funzione Lambda esistente e quindi creando un'applicazione serverless in Infrastructure Composer aggiungendo altre risorse. AWS
Durante lo svolgimento di questo tutorial, imparerai alcuni concetti fondamentali, ad esempio come AWS vengono specificate le risorse. AWS SAM Imparerai anche come usare Infrastructure Composer per creare un'applicazione serverless che puoi distribuire utilizzando or. AWS SAM AWS CloudFormation
Per completare questo tutorial, eseguirai le seguenti attività:
-
Creazione di una funzione Lambda di esempio
-
Usa la console Lambda per visualizzare il AWS SAM modello per la funzione
-
Esporta la configurazione della funzione AWS Infrastructure Composer e progetta una semplice applicazione serverless basata sulla configurazione della funzione
-
Salva un AWS SAM modello aggiornato che puoi utilizzare come base per distribuire la tua applicazione serverless
Prerequisiti
In questo tutorial, utilizzi la funzionalità di sincronizzazione locale di Infrastructure Composer per salvare i file di modello e codice sul computer di compilazione locale. Per utilizzare questa funzionalità, è necessario un browser che supporti l'API File System Access, che consente alle applicazioni web di leggere, scrivere e salvare file nel file system locale. Ti consigliamo di utilizzare Google Chrome o Microsoft Edge. Per ulteriori informazioni sull'API File System Access, consulta la pagina What is the File System Access API?
Creazione di una funzione Lambda
In questo primo passaggio, creerai una funzione Lambda da utilizzare nei passaggi successivi del tutorial. Per semplicità, utilizzerai la console Lambda per creare una funzione di base "Hello world" tramite il runtime Python 3.11.
Creazione di una funzione Lambda "Hello world" tramite la console
-
Aprire la console Lambda
. -
Scegli Crea funzione.
-
Lascia selezionato Crea da zero e, in Informazioni di base, immetti
LambdaIaCDemo
come Nome della funzione. -
In Runtime, scegli Python 3.11.
-
Scegli Crea funzione.
Visualizza il AWS SAM modello per la tua funzione
Prima di esportare la configurazione della funzione in Infrastructure Composer, utilizza la console Lambda per visualizzare la configurazione corrente della funzione come modello AWS SAM . Seguendo i passaggi di questa sezione, imparerai a conoscere l'anatomia di un AWS SAM modello e a definire risorse come le funzioni Lambda per iniziare a specificare un'applicazione serverless.
Per visualizzare il modello per la tua funzione AWS SAM
-
Aprire la pagina Funzioni
della console Lambda. -
Scegli la funzione creata in precedenza (
LambdaIaCDemo
). -
Nel riquadro Panoramica della funzione, scegli Modello.
Al posto del diagramma che rappresenta la configurazione della funzione, verrà visualizzato un AWS SAM modello per la funzione. Il modello avrà un aspetto simile al seguente.
# This AWS SAM template has been generated from your function's # configuration. If your function has one or more triggers, note # that the AWS resources associated with these triggers aren't fully # specified in this template and include placeholder values.Open this template # in AWS Application Composer or your favorite IDE and modify # it to specify a serverless application with other AWS resources. AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Description: An AWS Serverless Specification template describing your function. Resources: LambdaIaCDemo: Type: AWS::Serverless::Function Properties: CodeUri: . Description: '' MemorySize: 128 Timeout: 3 Handler: lambda_function.lambda_handler Runtime: python3.11 Architectures: - x86_64 EventInvokeConfig: MaximumEventAgeInSeconds: 21600 MaximumRetryAttempts: 2 EphemeralStorage: Size: 512 RuntimeManagementConfig: UpdateRuntimeOn: Auto SnapStart: ApplyOn: None PackageType: Zip Policies: Statement: - Effect: Allow Action: - logs:CreateLogGroup Resource: arn:aws:logs:us-east-1:123456789012:* - Effect: Allow Action: - logs:CreateLogStream - logs:PutLogEvents Resource: - >- arn:aws:logs:us-east-1:123456789012:log-group:/aws/lambda/LambdaIaCDemo:*
Esaminiamo il modello YAML per la funzione in uso e apprendiamo alcuni concetti chiave.
Il modello inizia con la dichiarazione Transform: AWS::Serverless-2016-10-31
. Questa dichiarazione è obbligatoria perché dietro le quinte vengono implementati dei AWS SAM modelli. AWS CloudFormation L'utilizzo dell'istruzione Transform
identifica il modello come file di modello AWS SAM .
Dopo la dichiarazione Transform
, arriva la sezione Resources
. È qui che vengono AWS definite le risorse che si desidera distribuire con il AWS SAM modello. AWS SAM i modelli possono contenere una combinazione di AWS SAM risorse e AWS CloudFormation risorse. Questo perché durante la distribuzione, i AWS SAM modelli si espandono in AWS CloudFormation modelli, quindi è possibile aggiungere qualsiasi AWS CloudFormation sintassi valida a un AWS SAM modello.
Al momento, nella sezione Resources
del modello è presente soltanto una risorsa definita, la funzione Lambda LambdaIaCDemo
. Per aggiungere una funzione Lambda a un AWS SAM modello, si utilizza il tipo di AWS::Serverless::Function
risorsa. La risorsa Properties
di una funzione Lambda definisce il runtime della funzione, il gestore delle funzioni e altre opzioni di configurazione. Qui viene definito anche il percorso del codice sorgente della funzione da AWS SAM utilizzare per distribuire la funzione. Per ulteriori informazioni sulle risorse delle funzioni Lambda in AWS SAM, consulta AWS::Serverless::Functionla Guida per gli AWS SAM sviluppatori.
Oltre alle proprietà e alle configurazioni delle funzioni, il modello specifica anche una policy AWS Identity and Access Management (IAM) per la funzione. Questa politica autorizza la tua funzione a scrivere log su Amazon CloudWatch Logs. Quando crei una funzione nella console Lambda, Lambda associa automaticamente questa policy alla tua funzione. Per ulteriori informazioni su come specificare una policy IAM per una funzione in un AWS SAM modello, consulta la policies
proprietà nella AWS::Serverless::Functionpagina della AWS SAM Developer Guide.
Per ulteriori informazioni sulla struttura dei AWS SAM modelli, consulta anatomia dei AWS SAM modelli.
AWS Infrastructure Composer Utilizzatelo per progettare un'applicazione serverless
Per iniziare a creare una semplice applicazione serverless utilizzando il AWS SAM modello della funzione come punto di partenza, esportate la configurazione della funzione in Infrastructure Composer e attivate la modalità di sincronizzazione locale di Infrastructure Composer. La sincronizzazione locale salva automaticamente il codice della funzione e il AWS SAM modello sulla macchina di compilazione locale e mantiene sincronizzato il modello salvato man mano che aggiungi altre AWS risorse in Infrastructure Composer.
Per esportare una funzione Lambda in Infrastructure Composer
-
Nel riquadro Panoramica della funzione, scegli Esporta in Strumento per la creazione di applicazioni.
Per esportare la configurazione e il codice della funzione in Infrastructure Composer, Lambda crea un bucket Amazon S3 nel tuo account in cui archiviare temporaneamente questi dati.
-
Nella finestra di dialogo, scegli Conferma e crea progetto per accettare il nome predefinito per questo bucket ed esportare la configurazione e il codice della funzione in Infrastructure Composer.
-
(Facoltativo) Per scegliere un altro nome per il bucket Amazon S3 creato da Lambda, immetti un nuovo nome e scegli Conferma e crea progetto. I nomi dei bucket Amazon S3 devono essere univoci a livello globale e seguire le regole di denominazione dei bucket.
Selezionando Conferma e crea progetto si apre la console Infrastructure Composer. Nel canvas vedrai la funzione Lambda.
-
Dal menu a discesa Menu, scegli Attiva sincronizzazione locale.
-
Nella finestra di dialogo che si apre, scegli Seleziona cartella e seleziona una cartella sul tuo computer di compilazione locale.
-
Scegli Attiva per attivare la sincronizzazione locale.
Per esportare la funzione in Infrastructure Composer, è necessaria l'autorizzazione a utilizzare determinate operazioni API. Se non sei in grado di esportare la funzione, consulta Autorizzazioni richieste e assicurati di disporre delle autorizzazioni necessarie.
Nota
Il bucket che Lambda crea quando esporti una funzione in Infrastructure Composer è soggetto ai prezzi di Amazon S3
Per evitare costi aggiuntivi Account AWS, segui le istruzioni riportate in Eliminazione di un bucket dopo aver esportato la funzione in Infrastructure Composer. Per ulteriori informazioni sul bucket Amazon S3 creato da Lambda, consulta la pagina Utilizzo AWS Lambda con AWS Infrastructure Composer.
Per progettare un'applicazione serverless in Infrastructure Composer
Dopo aver attivato la sincronizzazione locale, le modifiche apportate in Infrastructure Composer si rifletteranno nel AWS SAM modello salvato sul computer di compilazione locale. Ora puoi trascinare e rilasciare AWS risorse aggiuntive nell'area di disegno di Infrastructure Composer per creare la tua applicazione. In questo esempio, aggiungi una coda semplice Amazon SQS come trigger per la funzione Lambda e una tabella DynamoDB in cui la funzione può scrivere i dati.
-
Per aggiungere un trigger Amazon SQS alla funzione Lambda, effettua le seguenti operazioni:
-
Nel campo di ricerca della palette Risorse, immetti
SQS
. -
Trascina la risorsa Coda SQS sul canvas e posizionala a sinistra della funzione Lambda.
-
Seleziona Dettagli e per ID logico immetti
LambdaIaCQueue
. -
Seleziona Salva.
-
Connetti le tue risorse Amazon SQS e Lambda facendo clic sulla porta Abbonamento sulla scheda della coda SQS e trascinandola sulla porta sinistra della scheda della funzione Lambda. La comparsa di una linea tra le due risorse indica che la connessione è stabilita. Inoltre, nella parte inferiore del canvas, Infrastructure Composer visualizza un messaggio che indica che le due risorse sono state connesse correttamente.
-
-
Per aggiungere una tabella Amazon DynamoDB in cui la funzione Lambda può scrivere dati, effettua le seguenti operazioni:
-
Nel campo di ricerca della palette Risorse, immetti
DynamoDB
. -
Trascina la risorsa Tabella DynamoDB sul canvas e posizionala a destra della funzione Lambda.
-
Seleziona Dettagli e per ID logico immetti
LambdaIaCTable
. -
Seleziona Salva.
-
Connetti la tabella DynamoDB alla funzione Lambda facendo clic sulla porta destra della scheda della funzione Lambda e trascinandola sulla porta sinistra della scheda di DynamoDB.
-
Ora che hai aggiunto queste risorse extra, diamo un'occhiata al AWS SAM modello aggiornato creato da Infrastructure Composer.
Per visualizzare il modello aggiornato AWS SAM
-
Nel canvas di Infrastructure Composer, scegli Modello per passare dalla visualizzazione del canvas alla visualizzazione del modello.
Il AWS SAM modello dovrebbe ora contenere le seguenti risorse e proprietà aggiuntive:
-
Una coda Amazon SQS con l'identificativo
LambdaIaCQueue
LambdaIaCQueue: Type: AWS::SQS::Queue Properties: MessageRetentionPeriod: 345600
Quando aggiungi una coda Amazon SQS utilizzando Infrastructure Composer, questo imposta la proprietà
MessageRetentionPeriod
. Puoi anche impostare la proprietàFifoQueue
selezionando Dettagli sulla scheda della coda SQS e selezionando o deselezionando Coda Fifo.Per impostare altre proprietà per la coda, puoi modificare manualmente il modello per aggiungerle. Per ulteriori informazioni sulla risorsa
AWS::SQS::Queue
e sulle sue proprietà disponibili, consulta la sezione AWS::SQS::Queue nella Guida per l'utente di AWS CloudFormation . -
Una proprietà
Events
nella definizione della funzione Lambda che specifica la coda Amazon SQS come trigger per la funzioneEvents: LambdaIaCQueue: Type: SQS Properties: Queue: !GetAtt LambdaIaCQueue.Arn BatchSize: 1
La proprietà
Events
è composta da un tipo di evento e da un insieme di proprietà che dipendono dal tipo. Per saperne di più sulle diverse configurazioni Servizi AWS che puoi configurare per attivare una funzione Lambda e sulle proprietà che puoi impostare, consulta la AWS SAM Developer EventSourceGuide. -
Una tabella DynamoDB con l'identificatore
LambdaIaCTable
LambdaIaCTable: Type: AWS::DynamoDB::Table Properties: AttributeDefinitions: - AttributeName: id AttributeType: S BillingMode: PAY_PER_REQUEST KeySchema: - AttributeName: id KeyType: HASH StreamSpecification: StreamViewType: NEW_AND_OLD_IMAGES
Quando aggiungi una tabella DynamoDB utilizzando Infrastructure Composer, puoi impostare le chiavi della tabella scegliendo Dettagli nella scheda della tabella DynamoDB e modificando i valori delle chiavi. Infrastructure Composer imposta anche i valori predefiniti anche per una serie di altre proprietà, tra cui
BillingMode
eStreamViewType
.Per saperne di più su queste proprietà e altre proprietà che puoi aggiungere al tuo AWS SAM modello, consulta AWS: :DynamoDB: :Table nella Guida per l'utente.AWS CloudFormation
-
Una nuova policy IAM che autorizza la funzione a eseguire operazioni CRUD sulla tabella DynamoDB che hai aggiunto.
Policies: ... - DynamoDBCrudPolicy: TableName: !Ref LambdaIaCTable
Il AWS SAM modello finale completo dovrebbe essere simile al seguente.
AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Description: An AWS Serverless Specification template describing your function. Resources: LambdaIaCDemo: Type: AWS::Serverless::Function Properties: CodeUri: . Description: '' MemorySize: 128 Timeout: 3 Handler: lambda_function.lambda_handler Runtime: python3.11 Architectures: - x86_64 EventInvokeConfig: MaximumEventAgeInSeconds: 21600 MaximumRetryAttempts: 2 EphemeralStorage: Size: 512 RuntimeManagementConfig: UpdateRuntimeOn: Auto SnapStart: ApplyOn: None PackageType: Zip Policies: - Statement: - Effect: Allow Action: - logs:CreateLogGroup Resource: arn:aws:logs:us-east-1:594035263019:* - Effect: Allow Action: - logs:CreateLogStream - logs:PutLogEvents Resource: - arn:aws:logs:us-east-1:594035263019:log-group:/aws/lambda/LambdaIaCDemo:* - DynamoDBCrudPolicy: TableName: !Ref LambdaIaCTable Events: LambdaIaCQueue: Type: SQS Properties: Queue: !GetAtt LambdaIaCQueue.Arn BatchSize: 1 Environment: Variables: LAMBDAIACTABLE_TABLE_NAME: !Ref LambdaIaCTable LAMBDAIACTABLE_TABLE_ARN: !GetAtt LambdaIaCTable.Arn LambdaIaCQueue: Type: AWS::SQS::Queue Properties: MessageRetentionPeriod: 345600 LambdaIaCTable: Type: AWS::DynamoDB::Table Properties: AttributeDefinitions: - AttributeName: id AttributeType: S BillingMode: PAY_PER_REQUEST KeySchema: - AttributeName: id KeyType: HASH StreamSpecification: StreamViewType: NEW_AND_OLD_IMAGES
Implementa la tua applicazione serverless utilizzando AWS SAM (opzionale)
Se desideri utilizzare AWS SAM per distribuire un'applicazione serverless utilizzando il modello appena creato in Infrastructure Composer, devi prima installare il AWS SAM CLI. A tale scopo, segui le istruzioni riportate in Installazione della AWS SAM CLI.
Inoltre, prima di implementare l'applicazione devi aggiornare il codice della funzione che Infrastructure Composer ha salvato insieme al modello. Al momento, il file lambda_function.py
salvato da Infrastructure Composer contiene solo il codice di base "Hello world" fornito da Lambda al momento della creazione della funzione.
Per aggiornare il codice della funzione, copia il codice seguente e incollalo nel file lambda_function.py
che Infrastructure Composer ha salvato sul computer di compilazione locale. Hai specificato la directory in cui Infrastructure Composer deve salvare questo file quando hai attivato la modalità di sincronizzazione locale.
Questo codice accetta una coppia chiave-valore in un messaggio dalla coda Amazon SQS creata in Infrastructure Composer. Se sia la chiave sia il valore sono stringhe, il codice li utilizza per scrivere un elemento nella tabella DynamoDB definita nel modello.
import boto3 import os import json # define the DynamoDB table that Lambda will connect to tablename = os.environ['LAMBDAIACTABLE_TABLE_NAME'] # create the DynamoDB resource dynamo = boto3.client('dynamodb') def lambda_handler(event, context): # get the message out of the SQS event message = event['Records'][0]['body'] data = json.loads(message) # write event data to DDB table if check_message_format(data): key = next(iter(data)) value = data[key] dynamo.put_item( TableName=tablename, Item={ 'id': {'S': key}, 'Value': {'S': value} } ) else: raise ValueError("Input data not in the correct format") # check that the event object contains a single key value # pair that can be written to the database def check_message_format(message): if len(message) != 1: return False key, value = next(iter(message.items())) if not (isinstance(key, str) and isinstance(value, str)): return False else: return True
Implementazione dell'applicazione serverless
Per distribuire l'applicazione utilizzando AWS SAM CLI, effettuare le seguenti operazioni. Affinché la funzione venga compilata e implementata correttamente, sul computer di compilazione e nel PATH
deve essere installata la versione 3.11 di Python.
-
Esegui il seguente comando dalla directory in cui Infrastructure Composer ha salvato i tuoi file
template.yaml
elambda_function.py
.sam build
Questo comando raccoglie gli artefatti di compilazione per l'applicazione e li colloca nel formato e nella posizione corretti per l'implementazione.
-
Per distribuire l'applicazione e creare le risorse Lambda, Amazon SQS e DynamoDB specificate AWS SAM nel modello, esegui il comando seguente.
sam deploy --guided
L'uso del
--guided
flag significa che ti AWS SAM verranno mostrate le istruzioni per guidarti attraverso il processo di distribuzione. Per questa implementazione, accetta le opzioni predefinite premendo Invio.
Durante il processo di distribuzione, AWS SAM crea le seguenti risorse nel tuo: Account AWS
-
Una AWS CloudFormation pila denominata
sam-app
-
Una funzione Lambda con il formato del nome
sam-app-LambdaIaCDemo-
99VXPpYQVv1M
-
Una coda Amazon SQS con il formato del nome
sam-app-LambdaIaCQueue-
xL87VeKsGiIo
-
Una tabella DynamoDB con il formato del nome
sam-app-LambdaIaCTable-
CN0S66C0VLNV
AWS SAM crea anche i ruoli e le policy IAM necessari in modo che la funzione Lambda possa leggere i messaggi dalla coda Amazon SQS ed eseguire operazioni CRUD sulla tabella DynamoDB.
Test dell'applicazione implementata (facoltativo)
Per confermare che l'applicazione serverless sia stata implementata correttamente, invia un messaggio alla coda Amazon SQS contenente una coppia chiave-valore e verifica che Lambda scriva un elemento nella tabella DynamoDB utilizzando questi valori.
Test dell'applicazione serverless
-
Apri la pagina Code
della console Amazon SQS e seleziona la coda che AWS SAM ha creato dal modello. Il formato del nome è sam-app-LambdaIaCQueue-
.xL87VeKsGiIo
-
Scegli Invio e ricezione di messaggi e incolla il seguente JSON nel Corpo del messaggio nella sezione Invia messaggio.
{ "myKey": "myValue" }
-
Scegliere Invia messaggio.
L'invio del messaggio alla coda farà sì che Lambda chiami la funzione tramite lo strumento di mappatura dell'origine degli eventi definito nel modello AWS SAM . Per verificare che Lambda abbia chiamato la funzione come previsto, verifica che alla tabella DynamoDB sia stato aggiunto un elemento.
-
Apri la pagina Tabelle
della console DynamoDB e scegli la tabella. Il formato del nome è sam-app-LambdaIaCTable-
.CN0S66C0VLNV
-
Scegli Explore table items (Esplora elementi della tabella). Nel riquadro Elementi restituiti, dovresti vedere un elemento con l'id
myKey
e il valoremyValue
.