Seleziona le tue preferenze relative ai cookie

Utilizziamo cookie essenziali e strumenti simili necessari per fornire il nostro sito e i nostri servizi. Utilizziamo i cookie prestazionali per raccogliere statistiche anonime in modo da poter capire come i clienti utilizzano il nostro sito e apportare miglioramenti. I cookie essenziali non possono essere disattivati, ma puoi fare clic su \"Personalizza\" o \"Rifiuta\" per rifiutare i cookie prestazionali.

Se sei d'accordo, AWS e le terze parti approvate utilizzeranno i cookie anche per fornire utili funzionalità del sito, ricordare le tue preferenze e visualizzare contenuti pertinenti, inclusa la pubblicità pertinente. Per continuare senza accettare questi cookie, fai clic su \"Continua\" o \"Rifiuta\". Per effettuare scelte più dettagliate o saperne di più, fai clic su \"Personalizza\".

Distribuisci funzioni Lambda per Ruby con immagini di container

Modalità Focus
Distribuisci funzioni Lambda per Ruby con immagini di container - AWS Lambda

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à.

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à.

Esistono tre modi per creare un'immagine di container per una funzione Lambda in Ruby:

Suggerimento

Per ridurre il tempo necessario all'attivazione delle funzioni del container Lambda, consulta Utilizzo di compilazioni a più fasi nella documentazione Docker. Per creare immagini di container efficienti, segui le best practice per scrivere file Docker.

Questa pagina spiega come creare, testare e implementare le immagini di container per Lambda.

AWS immagini di base per Ruby

AWS fornisce le seguenti immagini di base per Ruby:

Tag Runtime Sistema operativo Dockerfile Definizione come obsoleto

3.3

Ruby 3.3 Amazon Linux 2023 Dockerfile per Ruby 3.3 su GitHub

31 marzo 2027

3.2

Ruby 3.2 Amazon Linux 2 Dockerfile per Ruby 3.2 su GitHub

31 marzo 2026

Archivio Amazon ECR: gallery.ecr. aws/lambda/ruby

Usare un'immagine AWS di base per Ruby

Per completare le fasi riportate in questa sezione, è necessario:

Per completare le fasi riportate in questa sezione, è necessario:

Creazione di un'immagine di container per Ruby
  1. Crea una directory per il progetto, quindi passa a quella directory.

    mkdir example cd example
  2. Crea un nuovo file denominato Gemfile. Qui è dove elenchi i pacchetti richiesti dall'applicazione. RubyGems AWS SDK per Ruby È disponibile da RubyGems. Dovresti scegliere AWS service gem specifici da installare. Ad esempio, per usare la gemma Ruby per Lambda, il tuo Gemfile dovrebbe avere questo aspetto:

    source 'https://rubygems.org' gem 'aws-sdk-lambda'

    In alternativa, la gemma aws-sdk contiene tutte le gem di servizio disponibili. AWS Questa gemma è molto grande. Ti consigliamo di utilizzarlo solo se dipendi da molti servizi. AWS

  3. Installa le dipendenze specificate nel Gemfile utilizzando l'installazione in bundle.

    bundle install
  4. Crea un nuovo file denominato lambda_function.rb. A fini di test, puoi utilizzare il codice della funzione di esempio seguente o sostituirlo con il tuo codice personalizzato.

    Esempio Funzione Ruby
    module LambdaFunction class Handler def self.process(event:,context:) "Hello from Lambda!" end end end
  5. Crea un nuovo Dockerfile. Il Dockerfile di esempio seguente utilizza l'immagine di base AWS. Il Dockerfile utilizza la seguente configurazione:

    • Imposta la proprietà FROM sull'URI dell'immagine di base.

    • Utilizza il comando COPY per copiare il codice della funzione e le dipendenze di runtime in {LAMBDA_TASK_ROOT}, una variabile d'ambiente definita da Lambda.

    • Imposta l'argomento CMD specificando il gestore della funzione Lambda.

    Nota che l'esempio Dockerfile non include un'istruzione USER. Quando implementi un'immagine di container su Lambda, Lambda definisce automaticamente un utente Linux predefinito con autorizzazioni con privilegi minimi. Questo è diverso dal comportamento standard di Docker, che per impostazione predefinita è l'utente root quando non viene fornita alcuna istruzione USER.

    Esempio Dockerfile
    FROM public.ecr.aws/lambda/ruby:3.2 # Copy Gemfile and Gemfile.lock COPY Gemfile Gemfile.lock ${LAMBDA_TASK_ROOT}/ # Install Bundler and the specified gems RUN gem install bundler:2.4.20 && \ bundle config set --local path 'vendor/bundle' && \ bundle install # Copy function code COPY lambda_function.rb ${LAMBDA_TASK_ROOT}/ # Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile) CMD [ "lambda_function.LambdaFunction::Handler.process" ]
  6. Crea l'immagine Docker con il comando docker build. L'esempio seguente assegna un nome all'immagine docker-image e le assegna il tag test. Per rendere l'immagine compatibile con Lambda, è necessario utilizzare l'--provenance=falseopzione.

    docker buildx build --platform linux/amd64 --provenance=false -t docker-image:test .
    Nota

    Il comando specifica l’opzione --platform linux/amd64 per garantire che il container sia compatibile con l'ambiente di esecuzione di Lambda, indipendentemente dall'architettura della macchina di sviluppo. Se intendi creare una funzione Lambda utilizzando l'architettura del set di ARM64 istruzioni, assicurati di modificare il comando per utilizzare invece l'--platform linux/arm64opzione.

Creazione di un'immagine di container per Ruby
  1. Crea una directory per il progetto, quindi passa a quella directory.

    mkdir example cd example
  2. Crea un nuovo file denominato Gemfile. Qui è dove elenchi i pacchetti richiesti dall'applicazione. RubyGems AWS SDK per Ruby È disponibile da RubyGems. Dovresti scegliere AWS service gem specifici da installare. Ad esempio, per usare la gemma Ruby per Lambda, il tuo Gemfile dovrebbe avere questo aspetto:

    source 'https://rubygems.org' gem 'aws-sdk-lambda'

    In alternativa, la gemma aws-sdk contiene tutte le gem di servizio disponibili. AWS Questa gemma è molto grande. Ti consigliamo di utilizzarlo solo se dipendi da molti servizi. AWS

  3. Installa le dipendenze specificate nel Gemfile utilizzando l'installazione in bundle.

    bundle install
  4. Crea un nuovo file denominato lambda_function.rb. A fini di test, puoi utilizzare il codice della funzione di esempio seguente o sostituirlo con il tuo codice personalizzato.

    Esempio Funzione Ruby
    module LambdaFunction class Handler def self.process(event:,context:) "Hello from Lambda!" end end end
  5. Crea un nuovo Dockerfile. Il Dockerfile di esempio seguente utilizza l'immagine di base AWS. Il Dockerfile utilizza la seguente configurazione:

    • Imposta la proprietà FROM sull'URI dell'immagine di base.

    • Utilizza il comando COPY per copiare il codice della funzione e le dipendenze di runtime in {LAMBDA_TASK_ROOT}, una variabile d'ambiente definita da Lambda.

    • Imposta l'argomento CMD specificando il gestore della funzione Lambda.

    Nota che l'esempio Dockerfile non include un'istruzione USER. Quando implementi un'immagine di container su Lambda, Lambda definisce automaticamente un utente Linux predefinito con autorizzazioni con privilegi minimi. Questo è diverso dal comportamento standard di Docker, che per impostazione predefinita è l'utente root quando non viene fornita alcuna istruzione USER.

    Esempio Dockerfile
    FROM public.ecr.aws/lambda/ruby:3.2 # Copy Gemfile and Gemfile.lock COPY Gemfile Gemfile.lock ${LAMBDA_TASK_ROOT}/ # Install Bundler and the specified gems RUN gem install bundler:2.4.20 && \ bundle config set --local path 'vendor/bundle' && \ bundle install # Copy function code COPY lambda_function.rb ${LAMBDA_TASK_ROOT}/ # Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile) CMD [ "lambda_function.LambdaFunction::Handler.process" ]
  6. Crea l'immagine Docker con il comando docker build. L'esempio seguente assegna un nome all'immagine docker-image e le assegna il tag test. Per rendere l'immagine compatibile con Lambda, è necessario utilizzare l'--provenance=falseopzione.

    docker buildx build --platform linux/amd64 --provenance=false -t docker-image:test .
    Nota

    Il comando specifica l’opzione --platform linux/amd64 per garantire che il container sia compatibile con l'ambiente di esecuzione di Lambda, indipendentemente dall'architettura della macchina di sviluppo. Se intendi creare una funzione Lambda utilizzando l'architettura del set di ARM64 istruzioni, assicurati di modificare il comando per utilizzare invece l'--platform linux/arm64opzione.

  1. Avvia l'immagine Docker con il comando docker run. In questo esempio, docker-image è il nome dell'immagine e test è il tag.

    docker run --platform linux/amd64 -p 9000:8080 docker-image:test

    Questo comando esegue l'immagine come container e crea un endpoint locale in localhost:9000/2015-03-31/functions/function/invocations.

    Nota

    Se hai creato l'immagine Docker per l'architettura del set di ARM64 istruzioni, assicurati di utilizzare l'--platform linux/arm64opzione invece di. --platform linux/amd64

  2. Da una nuova finestra di terminale, invia un evento all'endpoint locale.

    Linux/macOS

    Su MacOS o Linux, esegui il comando seguente curl:

    curl "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{}'

    Questo comando richiama la funzione con un evento vuoto e restituisce una risposta. Se stai utilizzando il tuo codice della funzione anziché quello di esempio, potresti voler richiamare la funzione con un payload JSON. Esempio:

    curl "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{"payload":"hello world!"}'
    PowerShell

    In PowerShell, esegui il seguente Invoke-WebRequest comando:

    Invoke-WebRequest -Uri "http://localhost:9000/2015-03-31/functions/function/invocations" -Method Post -Body '{}' -ContentType "application/json"

    Questo comando richiama la funzione con un evento vuoto e restituisce una risposta. Se stai utilizzando il tuo codice della funzione anziché quello di esempio, potresti voler richiamare la funzione con un payload JSON. Esempio:

    Invoke-WebRequest -Uri "http://localhost:9000/2015-03-31/functions/function/invocations" -Method Post -Body '{"payload":"hello world!"}' -ContentType "application/json"
  3. Ottieni l'ID del container.

    docker ps
  4. Utilizza il comando docker kill per arrestare il container. In questo comando, sostituisci 3766c4ab331c con l'ID del container del passaggio precedente.

    docker kill 3766c4ab331c

  1. Avvia l'immagine Docker con il comando docker run. In questo esempio, docker-image è il nome dell'immagine e test è il tag.

    docker run --platform linux/amd64 -p 9000:8080 docker-image:test

    Questo comando esegue l'immagine come container e crea un endpoint locale in localhost:9000/2015-03-31/functions/function/invocations.

    Nota

    Se hai creato l'immagine Docker per l'architettura del set di ARM64 istruzioni, assicurati di utilizzare l'--platform linux/arm64opzione invece di. --platform linux/amd64

  2. Da una nuova finestra di terminale, invia un evento all'endpoint locale.

    Linux/macOS

    Su MacOS o Linux, esegui il comando seguente curl:

    curl "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{}'

    Questo comando richiama la funzione con un evento vuoto e restituisce una risposta. Se stai utilizzando il tuo codice della funzione anziché quello di esempio, potresti voler richiamare la funzione con un payload JSON. Esempio:

    curl "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{"payload":"hello world!"}'
    PowerShell

    In PowerShell, esegui il seguente Invoke-WebRequest comando:

    Invoke-WebRequest -Uri "http://localhost:9000/2015-03-31/functions/function/invocations" -Method Post -Body '{}' -ContentType "application/json"

    Questo comando richiama la funzione con un evento vuoto e restituisce una risposta. Se stai utilizzando il tuo codice della funzione anziché quello di esempio, potresti voler richiamare la funzione con un payload JSON. Esempio:

    Invoke-WebRequest -Uri "http://localhost:9000/2015-03-31/functions/function/invocations" -Method Post -Body '{"payload":"hello world!"}' -ContentType "application/json"
  3. Ottieni l'ID del container.

    docker ps
  4. Utilizza il comando docker kill per arrestare il container. In questo comando, sostituisci 3766c4ab331c con l'ID del container del passaggio precedente.

    docker kill 3766c4ab331c
Caricamento dell'immagine su Amazon ECR e creazione della funzione Lambda
  1. Esegui il get-login-passwordcomando per autenticare la CLI Docker nel tuo registro Amazon ECR.

    • Imposta il --region valore nel Regione AWS punto in cui desideri creare il repository Amazon ECR.

    • Sostituiscilo 111122223333 con il tuo ID. Account AWS

    aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 111122223333.dkr.ecr.us-east-1.amazonaws.com
  2. Crea un repository in Amazon ECR utilizzando il commando create-repository.

    aws ecr create-repository --repository-name hello-world --region us-east-1 --image-scanning-configuration scanOnPush=true --image-tag-mutability MUTABLE
    Nota

    Il repository Amazon ECR deve corrispondere alla funzione Lambda. Regione AWS

    In caso di esito positivo, dovresti ottenere una risposta simile a questa:

    { "repository": { "repositoryArn": "arn:aws:ecr:us-east-1:111122223333:repository/hello-world", "registryId": "111122223333", "repositoryName": "hello-world", "repositoryUri": "111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world", "createdAt": "2023-03-09T10:39:01+00:00", "imageTagMutability": "MUTABLE", "imageScanningConfiguration": { "scanOnPush": true }, "encryptionConfiguration": { "encryptionType": "AES256" } } }
  3. Copia il repositoryUri dall'output del passaggio precedente.

  4. Esegui il comando docker tag per etichettare l'immagine locale nel repository Amazon ECR come versione più recente. In questo comando:

    • docker-image:test è il nome e tag dell'immagine Docker. Si tratta del nome e del tag dell'immagine specificati nel comando docker build.

    • Sostituisci l’<ECRrepositoryUri> con l’repositoryUri copiato. Assicurati di includere :latest alla fine dell'URI.

    docker tag docker-image:test <ECRrepositoryUri>:latest

    Esempio:

    docker tag docker-image:test 111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest
  5. Esegui il comando docker push per implementare la tua immagine locale sul repository Amazon ECR. Assicurati di includere :latest alla fine dell'URI del repository.

    docker push 111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest
  6. Crea un ruolo di esecuzione per la funzione, se non lo hai già fatto. Il nome della risorsa Amazon (ARN) del ruolo ti occorrerà nel passaggio successivo.

  7. Creazione della funzione Lambda Per ImageUri, specifica l'URI del repository creato in precedenza. Assicurati di includere :latest alla fine dell'URI.

    aws lambda create-function \ --function-name hello-world \ --package-type Image \ --code ImageUri=111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest \ --role arn:aws:iam::111122223333:role/lambda-ex
    Nota

    È possibile creare una funzione utilizzando un'immagine in un AWS account diverso, purché l'immagine si trovi nella stessa regione della funzione Lambda. Per ulteriori informazioni, consulta Autorizzazioni multiaccount Amazon ECR.

  8. Richiama la funzione.

    aws lambda invoke --function-name hello-world response.json

    Dovresti ottenere una risposta simile a questa:

    { "ExecutedVersion": "$LATEST", "StatusCode": 200 }
  9. Per vedere l'output della funzione, controlla il file response.json.

Per aggiornare il codice della funzione, devi creare nuovamente l'immagine, caricare la nuova immagine nell'archivio Amazon ECR e quindi utilizzare il update-function-codecomando per distribuire l'immagine nella funzione Lambda.

Lambda risolve il tag dell'immagine in un digest di immagine specifico. Ciò significa che se punti il tag immagine utilizzato per implementare la funzione su una nuova immagine in Amazon ECR, Lambda non aggiorna automaticamente la funzione per utilizzare la nuova immagine.

Per distribuire la nuova immagine nella stessa funzione Lambda, è necessario utilizzare update-function-codeil comando, anche se il tag dell'immagine in Amazon ECR rimane lo stesso. Nell'esempio seguente, l'opzione --publish crea una nuova versione della funzione utilizzando l'immagine del container aggiornata.

aws lambda update-function-code \ --function-name hello-world \ --image-uri 111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest \ --publish

Caricamento dell'immagine su Amazon ECR e creazione della funzione Lambda
  1. Esegui il get-login-passwordcomando per autenticare la CLI Docker nel tuo registro Amazon ECR.

    • Imposta il --region valore nel Regione AWS punto in cui desideri creare il repository Amazon ECR.

    • Sostituiscilo 111122223333 con il tuo ID. Account AWS

    aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 111122223333.dkr.ecr.us-east-1.amazonaws.com
  2. Crea un repository in Amazon ECR utilizzando il commando create-repository.

    aws ecr create-repository --repository-name hello-world --region us-east-1 --image-scanning-configuration scanOnPush=true --image-tag-mutability MUTABLE
    Nota

    Il repository Amazon ECR deve corrispondere alla funzione Lambda. Regione AWS

    In caso di esito positivo, dovresti ottenere una risposta simile a questa:

    { "repository": { "repositoryArn": "arn:aws:ecr:us-east-1:111122223333:repository/hello-world", "registryId": "111122223333", "repositoryName": "hello-world", "repositoryUri": "111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world", "createdAt": "2023-03-09T10:39:01+00:00", "imageTagMutability": "MUTABLE", "imageScanningConfiguration": { "scanOnPush": true }, "encryptionConfiguration": { "encryptionType": "AES256" } } }
  3. Copia il repositoryUri dall'output del passaggio precedente.

  4. Esegui il comando docker tag per etichettare l'immagine locale nel repository Amazon ECR come versione più recente. In questo comando:

    • docker-image:test è il nome e tag dell'immagine Docker. Si tratta del nome e del tag dell'immagine specificati nel comando docker build.

    • Sostituisci l’<ECRrepositoryUri> con l’repositoryUri copiato. Assicurati di includere :latest alla fine dell'URI.

    docker tag docker-image:test <ECRrepositoryUri>:latest

    Esempio:

    docker tag docker-image:test 111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest
  5. Esegui il comando docker push per implementare la tua immagine locale sul repository Amazon ECR. Assicurati di includere :latest alla fine dell'URI del repository.

    docker push 111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest
  6. Crea un ruolo di esecuzione per la funzione, se non lo hai già fatto. Il nome della risorsa Amazon (ARN) del ruolo ti occorrerà nel passaggio successivo.

  7. Creazione della funzione Lambda Per ImageUri, specifica l'URI del repository creato in precedenza. Assicurati di includere :latest alla fine dell'URI.

    aws lambda create-function \ --function-name hello-world \ --package-type Image \ --code ImageUri=111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest \ --role arn:aws:iam::111122223333:role/lambda-ex
    Nota

    È possibile creare una funzione utilizzando un'immagine in un AWS account diverso, purché l'immagine si trovi nella stessa regione della funzione Lambda. Per ulteriori informazioni, consulta Autorizzazioni multiaccount Amazon ECR.

  8. Richiama la funzione.

    aws lambda invoke --function-name hello-world response.json

    Dovresti ottenere una risposta simile a questa:

    { "ExecutedVersion": "$LATEST", "StatusCode": 200 }
  9. Per vedere l'output della funzione, controlla il file response.json.

Per aggiornare il codice della funzione, devi creare nuovamente l'immagine, caricare la nuova immagine nell'archivio Amazon ECR e quindi utilizzare il update-function-codecomando per distribuire l'immagine nella funzione Lambda.

Lambda risolve il tag dell'immagine in un digest di immagine specifico. Ciò significa che se punti il tag immagine utilizzato per implementare la funzione su una nuova immagine in Amazon ECR, Lambda non aggiorna automaticamente la funzione per utilizzare la nuova immagine.

Per distribuire la nuova immagine nella stessa funzione Lambda, è necessario utilizzare update-function-codeil comando, anche se il tag dell'immagine in Amazon ECR rimane lo stesso. Nell'esempio seguente, l'opzione --publish crea una nuova versione della funzione utilizzando l'immagine del container aggiornata.

aws lambda update-function-code \ --function-name hello-world \ --image-uri 111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest \ --publish

Utilizzo di un'immagine di base alternativa con il client di interfaccia di runtime

Se utilizzi un'immagine di base solo per il sistema operativo o un'immagine di base alternativa, devi includere il client dell'interfaccia di runtime nell'immagine. Il client dell'interfaccia di runtime estende l'Utilizzo dell'API di runtime Lambda per runtime personalizzati, che gestisce l'interazione tra Lambda e il codice della funzione.

Installa il client dell'interfaccia runtime Lambda per Ruby utilizzando il gestore di RubyGems pacchetti.org:

gem install aws_lambda_ric

Puoi anche scaricare il client dell'interfaccia di runtime Ruby da. GitHub

L'esempio seguente mostra come creare un'immagine contenitore per Ruby utilizzando un'immagine non di base.AWS Il Dockerfile di esempio utilizza un'immagine di base Ruby ufficiale. Il Dockerfile include il client di interfaccia di runtime.

Per completare le fasi riportate in questa sezione, è necessario:

Per completare le fasi riportate in questa sezione, è necessario:

Creazione di un'immagine di container per Ruby utilizzando un'immagine di base alternativa
  1. Crea una directory per il progetto, quindi passa a quella directory.

    mkdir example cd example
  2. Crea un nuovo file denominato Gemfile. Qui è dove elenchi i pacchetti richiesti dall'applicazione. RubyGems AWS SDK per Ruby È disponibile da RubyGems. Dovresti scegliere AWS service gem specifici da installare. Ad esempio, per usare la gemma Ruby per Lambda, il tuo Gemfile dovrebbe avere questo aspetto:

    source 'https://rubygems.org' gem 'aws-sdk-lambda'

    In alternativa, la gemma aws-sdk contiene tutte le gem di servizio disponibili. AWS Questa gemma è molto grande. Ti consigliamo di utilizzarlo solo se dipendi da molti servizi. AWS

  3. Installa le dipendenze specificate nel Gemfile utilizzando l'installazione in bundle.

    bundle install
  4. Crea un nuovo file denominato lambda_function.rb. A fini di test, puoi utilizzare il codice della funzione di esempio seguente o sostituirlo con il tuo codice personalizzato.

    Esempio Funzione Ruby
    module LambdaFunction class Handler def self.process(event:,context:) "Hello from Lambda!" end end end
  5. Crea un nuovo Dockerfile. Il seguente Dockerfile utilizza un'immagine di base Ruby anziché un'immagine di base AWS. Il Dockerfile include il client di interfaccia di runtime per Ruby, che rende l'immagine compatibile con Lambda. In alternativa, puoi aggiungere il client di interfaccia di runtime al Gemfile dell'applicazione.

    • Imposta la proprietà FROM sull'immagine di base Ruby.

    • Crea una directory per il codice della funzione e una variabile di ambiente che punti a quella directory. In questo esempio, la directory è /var/task, che rispecchia l'ambiente di esecuzione Lambda. Tuttavia, puoi scegliere qualsiasi directory per il codice della funzione perché il Dockerfile non utilizza un'immagine di AWS base.

    • Imposta l'ENTRYPOINT sul modulo su cui desideri che il container Docker venga eseguito all'avvio. In questo caso, il modulo è il client di interfaccia di runtime.

    • Imposta l'argomento CMD specificando il gestore della funzione Lambda.

    Nota che l'esempio Dockerfile non include un'istruzione USER. Quando implementi un'immagine di container su Lambda, Lambda definisce automaticamente un utente Linux predefinito con autorizzazioni con privilegi minimi. Questo è diverso dal comportamento standard di Docker, che per impostazione predefinita è l'utente root quando non viene fornita alcuna istruzione USER.

    Esempio Dockerfile
    FROM ruby:2.7 # Install the runtime interface client for Ruby RUN gem install aws_lambda_ric # Add the runtime interface client to the PATH ENV PATH="/usr/local/bundle/bin:${PATH}" # Create a directory for the Lambda function ENV LAMBDA_TASK_ROOT=/var/task RUN mkdir -p ${LAMBDA_TASK_ROOT} WORKDIR ${LAMBDA_TASK_ROOT} # Copy Gemfile and Gemfile.lock COPY Gemfile Gemfile.lock ${LAMBDA_TASK_ROOT}/ # Install Bundler and the specified gems RUN gem install bundler:2.4.20 && \ bundle config set --local path 'vendor/bundle' && \ bundle install # Copy function code COPY lambda_function.rb ${LAMBDA_TASK_ROOT}/ # Set runtime interface client as default command for the container runtime ENTRYPOINT [ "aws_lambda_ric" ] # Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile) CMD [ "lambda_function.LambdaFunction::Handler.process" ]
  6. Crea l'immagine Docker con il comando docker build. L'esempio seguente assegna un nome all'immagine docker-image e le assegna il tag test. Per rendere l'immagine compatibile con Lambda, è necessario utilizzare l'--provenance=falseopzione.

    docker buildx build --platform linux/amd64 --provenance=false -t docker-image:test .
    Nota

    Il comando specifica l’opzione --platform linux/amd64 per garantire che il container sia compatibile con l'ambiente di esecuzione di Lambda, indipendentemente dall'architettura della macchina di sviluppo. Se intendi creare una funzione Lambda utilizzando l'architettura del set di ARM64 istruzioni, assicurati di modificare il comando per utilizzare invece l'--platform linux/arm64opzione.

Creazione di un'immagine di container per Ruby utilizzando un'immagine di base alternativa
  1. Crea una directory per il progetto, quindi passa a quella directory.

    mkdir example cd example
  2. Crea un nuovo file denominato Gemfile. Qui è dove elenchi i pacchetti richiesti dall'applicazione. RubyGems AWS SDK per Ruby È disponibile da RubyGems. Dovresti scegliere AWS service gem specifici da installare. Ad esempio, per usare la gemma Ruby per Lambda, il tuo Gemfile dovrebbe avere questo aspetto:

    source 'https://rubygems.org' gem 'aws-sdk-lambda'

    In alternativa, la gemma aws-sdk contiene tutte le gem di servizio disponibili. AWS Questa gemma è molto grande. Ti consigliamo di utilizzarlo solo se dipendi da molti servizi. AWS

  3. Installa le dipendenze specificate nel Gemfile utilizzando l'installazione in bundle.

    bundle install
  4. Crea un nuovo file denominato lambda_function.rb. A fini di test, puoi utilizzare il codice della funzione di esempio seguente o sostituirlo con il tuo codice personalizzato.

    Esempio Funzione Ruby
    module LambdaFunction class Handler def self.process(event:,context:) "Hello from Lambda!" end end end
  5. Crea un nuovo Dockerfile. Il seguente Dockerfile utilizza un'immagine di base Ruby anziché un'immagine di base AWS. Il Dockerfile include il client di interfaccia di runtime per Ruby, che rende l'immagine compatibile con Lambda. In alternativa, puoi aggiungere il client di interfaccia di runtime al Gemfile dell'applicazione.

    • Imposta la proprietà FROM sull'immagine di base Ruby.

    • Crea una directory per il codice della funzione e una variabile di ambiente che punti a quella directory. In questo esempio, la directory è /var/task, che rispecchia l'ambiente di esecuzione Lambda. Tuttavia, puoi scegliere qualsiasi directory per il codice della funzione perché il Dockerfile non utilizza un'immagine di AWS base.

    • Imposta l'ENTRYPOINT sul modulo su cui desideri che il container Docker venga eseguito all'avvio. In questo caso, il modulo è il client di interfaccia di runtime.

    • Imposta l'argomento CMD specificando il gestore della funzione Lambda.

    Nota che l'esempio Dockerfile non include un'istruzione USER. Quando implementi un'immagine di container su Lambda, Lambda definisce automaticamente un utente Linux predefinito con autorizzazioni con privilegi minimi. Questo è diverso dal comportamento standard di Docker, che per impostazione predefinita è l'utente root quando non viene fornita alcuna istruzione USER.

    Esempio Dockerfile
    FROM ruby:2.7 # Install the runtime interface client for Ruby RUN gem install aws_lambda_ric # Add the runtime interface client to the PATH ENV PATH="/usr/local/bundle/bin:${PATH}" # Create a directory for the Lambda function ENV LAMBDA_TASK_ROOT=/var/task RUN mkdir -p ${LAMBDA_TASK_ROOT} WORKDIR ${LAMBDA_TASK_ROOT} # Copy Gemfile and Gemfile.lock COPY Gemfile Gemfile.lock ${LAMBDA_TASK_ROOT}/ # Install Bundler and the specified gems RUN gem install bundler:2.4.20 && \ bundle config set --local path 'vendor/bundle' && \ bundle install # Copy function code COPY lambda_function.rb ${LAMBDA_TASK_ROOT}/ # Set runtime interface client as default command for the container runtime ENTRYPOINT [ "aws_lambda_ric" ] # Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile) CMD [ "lambda_function.LambdaFunction::Handler.process" ]
  6. Crea l'immagine Docker con il comando docker build. L'esempio seguente assegna un nome all'immagine docker-image e le assegna il tag test. Per rendere l'immagine compatibile con Lambda, è necessario utilizzare l'--provenance=falseopzione.

    docker buildx build --platform linux/amd64 --provenance=false -t docker-image:test .
    Nota

    Il comando specifica l’opzione --platform linux/amd64 per garantire che il container sia compatibile con l'ambiente di esecuzione di Lambda, indipendentemente dall'architettura della macchina di sviluppo. Se intendi creare una funzione Lambda utilizzando l'architettura del set di ARM64 istruzioni, assicurati di modificare il comando per utilizzare invece l'--platform linux/arm64opzione.

Usa il simulatore dell'interfaccia di runtime per testare l'immagine in locale. Puoi creare l'emulatore nella tua immagine o seguire la procedura riportata e installarlo sul tuo computer locale.

Installazione ed esecuzione dell'emulatore di interfaccia di runtime sul computer locale
  1. Dalla directory del progetto, esegui il comando seguente per scaricare l'emulatore di interfaccia di runtime (architettura x86-64) GitHub e installarlo sul computer locale.

    Linux/macOS
    mkdir -p ~/.aws-lambda-rie && \ curl -Lo ~/.aws-lambda-rie/aws-lambda-rie https://github.com/aws/aws-lambda-runtime-interface-emulator/releases/latest/download/aws-lambda-rie && \ chmod +x ~/.aws-lambda-rie/aws-lambda-rie

    Per installare l'emulatore arm64, sostituisci l'URL del GitHub repository nel comando precedente con il seguente:

    https://github.com/aws/aws-lambda-runtime-interface-emulator/releases/latest/download/aws-lambda-rie-arm64
    PowerShell
    $dirPath = "$HOME\.aws-lambda-rie" if (-not (Test-Path $dirPath)) { New-Item -Path $dirPath -ItemType Directory } $downloadLink = "https://github.com/aws/aws-lambda-runtime-interface-emulator/releases/latest/download/aws-lambda-rie" $destinationPath = "$HOME\.aws-lambda-rie\aws-lambda-rie" Invoke-WebRequest -Uri $downloadLink -OutFile $destinationPath

    Per installare l'emulatore arm64, sostituisci $downloadLink con quanto segue:

    https://github.com/aws/aws-lambda-runtime-interface-emulator/releases/latest/download/aws-lambda-rie-arm64
  2. Avvia l'immagine Docker con il comando docker run. Tieni presente quanto segue:

    • docker-image è il nome dell'immagine e test è il tag.

    • aws_lambda_ric lambda_function.LambdaFunction::Handler.process è l'ENTRYPOINT seguito dal CMD del Dockerfile.

    Linux/macOS
    docker run --platform linux/amd64 -d -v ~/.aws-lambda-rie:/aws-lambda -p 9000:8080 \ --entrypoint /aws-lambda/aws-lambda-rie \ docker-image:test \ aws_lambda_ric lambda_function.LambdaFunction::Handler.process
    PowerShell
    docker run --platform linux/amd64 -d -v "$HOME\.aws-lambda-rie:/aws-lambda" -p 9000:8080 ` --entrypoint /aws-lambda/aws-lambda-rie ` docker-image:test ` aws_lambda_ric lambda_function.LambdaFunction::Handler.process

    Questo comando esegue l'immagine come container e crea un endpoint locale in localhost:9000/2015-03-31/functions/function/invocations.

    Nota

    Se hai creato l'immagine Docker per l'architettura del set di ARM64 istruzioni, assicurati di utilizzare l'--platform linux/arm64opzione invece di. --platform linux/amd64

  3. Pubblica un evento nell'endpoint locale.

    Linux/macOS

    Su MacOS o Linux, esegui il comando seguente curl:

    curl "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{}'

    Questo comando richiama la funzione con un evento vuoto e restituisce una risposta. Se stai utilizzando il tuo codice della funzione anziché quello di esempio, potresti voler richiamare la funzione con un payload JSON. Esempio:

    curl "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{"payload":"hello world!"}'
    PowerShell

    In PowerShell, esegui il seguente Invoke-WebRequest comando:

    Invoke-WebRequest -Uri "http://localhost:9000/2015-03-31/functions/function/invocations" -Method Post -Body '{}' -ContentType "application/json"

    Questo comando richiama la funzione con un evento vuoto e restituisce una risposta. Se stai utilizzando il tuo codice della funzione anziché quello di esempio, potresti voler richiamare la funzione con un payload JSON. Esempio:

    Invoke-WebRequest -Uri "http://localhost:9000/2015-03-31/functions/function/invocations" -Method Post -Body '{"payload":"hello world!"}' -ContentType "application/json"
  4. Ottieni l'ID del container.

    docker ps
  5. Utilizza il comando docker kill per arrestare il container. In questo comando, sostituisci 3766c4ab331c con l'ID del container del passaggio precedente.

    docker kill 3766c4ab331c

Usa il simulatore dell'interfaccia di runtime per testare l'immagine in locale. Puoi creare l'emulatore nella tua immagine o seguire la procedura riportata e installarlo sul tuo computer locale.

Installazione ed esecuzione dell'emulatore di interfaccia di runtime sul computer locale
  1. Dalla directory del progetto, esegui il comando seguente per scaricare l'emulatore di interfaccia di runtime (architettura x86-64) GitHub e installarlo sul computer locale.

    Linux/macOS
    mkdir -p ~/.aws-lambda-rie && \ curl -Lo ~/.aws-lambda-rie/aws-lambda-rie https://github.com/aws/aws-lambda-runtime-interface-emulator/releases/latest/download/aws-lambda-rie && \ chmod +x ~/.aws-lambda-rie/aws-lambda-rie

    Per installare l'emulatore arm64, sostituisci l'URL del GitHub repository nel comando precedente con il seguente:

    https://github.com/aws/aws-lambda-runtime-interface-emulator/releases/latest/download/aws-lambda-rie-arm64
    PowerShell
    $dirPath = "$HOME\.aws-lambda-rie" if (-not (Test-Path $dirPath)) { New-Item -Path $dirPath -ItemType Directory } $downloadLink = "https://github.com/aws/aws-lambda-runtime-interface-emulator/releases/latest/download/aws-lambda-rie" $destinationPath = "$HOME\.aws-lambda-rie\aws-lambda-rie" Invoke-WebRequest -Uri $downloadLink -OutFile $destinationPath

    Per installare l'emulatore arm64, sostituisci $downloadLink con quanto segue:

    https://github.com/aws/aws-lambda-runtime-interface-emulator/releases/latest/download/aws-lambda-rie-arm64
  2. Avvia l'immagine Docker con il comando docker run. Tieni presente quanto segue:

    • docker-image è il nome dell'immagine e test è il tag.

    • aws_lambda_ric lambda_function.LambdaFunction::Handler.process è l'ENTRYPOINT seguito dal CMD del Dockerfile.

    Linux/macOS
    docker run --platform linux/amd64 -d -v ~/.aws-lambda-rie:/aws-lambda -p 9000:8080 \ --entrypoint /aws-lambda/aws-lambda-rie \ docker-image:test \ aws_lambda_ric lambda_function.LambdaFunction::Handler.process
    PowerShell
    docker run --platform linux/amd64 -d -v "$HOME\.aws-lambda-rie:/aws-lambda" -p 9000:8080 ` --entrypoint /aws-lambda/aws-lambda-rie ` docker-image:test ` aws_lambda_ric lambda_function.LambdaFunction::Handler.process

    Questo comando esegue l'immagine come container e crea un endpoint locale in localhost:9000/2015-03-31/functions/function/invocations.

    Nota

    Se hai creato l'immagine Docker per l'architettura del set di ARM64 istruzioni, assicurati di utilizzare l'--platform linux/arm64opzione invece di. --platform linux/amd64

  3. Pubblica un evento nell'endpoint locale.

    Linux/macOS

    Su MacOS o Linux, esegui il comando seguente curl:

    curl "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{}'

    Questo comando richiama la funzione con un evento vuoto e restituisce una risposta. Se stai utilizzando il tuo codice della funzione anziché quello di esempio, potresti voler richiamare la funzione con un payload JSON. Esempio:

    curl "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{"payload":"hello world!"}'
    PowerShell

    In PowerShell, esegui il seguente Invoke-WebRequest comando:

    Invoke-WebRequest -Uri "http://localhost:9000/2015-03-31/functions/function/invocations" -Method Post -Body '{}' -ContentType "application/json"

    Questo comando richiama la funzione con un evento vuoto e restituisce una risposta. Se stai utilizzando il tuo codice della funzione anziché quello di esempio, potresti voler richiamare la funzione con un payload JSON. Esempio:

    Invoke-WebRequest -Uri "http://localhost:9000/2015-03-31/functions/function/invocations" -Method Post -Body '{"payload":"hello world!"}' -ContentType "application/json"
  4. Ottieni l'ID del container.

    docker ps
  5. Utilizza il comando docker kill per arrestare il container. In questo comando, sostituisci 3766c4ab331c con l'ID del container del passaggio precedente.

    docker kill 3766c4ab331c
Caricamento dell'immagine su Amazon ECR e creazione della funzione Lambda
  1. Esegui il get-login-passwordcomando per autenticare la CLI Docker nel tuo registro Amazon ECR.

    • Imposta il --region valore nel Regione AWS punto in cui desideri creare il repository Amazon ECR.

    • Sostituiscilo 111122223333 con il tuo ID. Account AWS

    aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 111122223333.dkr.ecr.us-east-1.amazonaws.com
  2. Crea un repository in Amazon ECR utilizzando il commando create-repository.

    aws ecr create-repository --repository-name hello-world --region us-east-1 --image-scanning-configuration scanOnPush=true --image-tag-mutability MUTABLE
    Nota

    Il repository Amazon ECR deve corrispondere alla funzione Lambda. Regione AWS

    In caso di esito positivo, dovresti ottenere una risposta simile a questa:

    { "repository": { "repositoryArn": "arn:aws:ecr:us-east-1:111122223333:repository/hello-world", "registryId": "111122223333", "repositoryName": "hello-world", "repositoryUri": "111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world", "createdAt": "2023-03-09T10:39:01+00:00", "imageTagMutability": "MUTABLE", "imageScanningConfiguration": { "scanOnPush": true }, "encryptionConfiguration": { "encryptionType": "AES256" } } }
  3. Copia il repositoryUri dall'output del passaggio precedente.

  4. Esegui il comando docker tag per etichettare l'immagine locale nel repository Amazon ECR come versione più recente. In questo comando:

    • docker-image:test è il nome e tag dell'immagine Docker. Si tratta del nome e del tag dell'immagine specificati nel comando docker build.

    • Sostituisci l’<ECRrepositoryUri> con l’repositoryUri copiato. Assicurati di includere :latest alla fine dell'URI.

    docker tag docker-image:test <ECRrepositoryUri>:latest

    Esempio:

    docker tag docker-image:test 111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest
  5. Esegui il comando docker push per implementare la tua immagine locale sul repository Amazon ECR. Assicurati di includere :latest alla fine dell'URI del repository.

    docker push 111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest
  6. Crea un ruolo di esecuzione per la funzione, se non lo hai già fatto. Il nome della risorsa Amazon (ARN) del ruolo ti occorrerà nel passaggio successivo.

  7. Creazione della funzione Lambda Per ImageUri, specifica l'URI del repository creato in precedenza. Assicurati di includere :latest alla fine dell'URI.

    aws lambda create-function \ --function-name hello-world \ --package-type Image \ --code ImageUri=111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest \ --role arn:aws:iam::111122223333:role/lambda-ex
    Nota

    È possibile creare una funzione utilizzando un'immagine in un AWS account diverso, purché l'immagine si trovi nella stessa regione della funzione Lambda. Per ulteriori informazioni, consulta Autorizzazioni multiaccount Amazon ECR.

  8. Richiama la funzione.

    aws lambda invoke --function-name hello-world response.json

    Dovresti ottenere una risposta simile a questa:

    { "ExecutedVersion": "$LATEST", "StatusCode": 200 }
  9. Per vedere l'output della funzione, controlla il file response.json.

Per aggiornare il codice della funzione, devi creare nuovamente l'immagine, caricare la nuova immagine nell'archivio Amazon ECR e quindi utilizzare il update-function-codecomando per distribuire l'immagine nella funzione Lambda.

Lambda risolve il tag dell'immagine in un digest di immagine specifico. Ciò significa che se punti il tag immagine utilizzato per implementare la funzione su una nuova immagine in Amazon ECR, Lambda non aggiorna automaticamente la funzione per utilizzare la nuova immagine.

Per distribuire la nuova immagine nella stessa funzione Lambda, è necessario utilizzare update-function-codeil comando, anche se il tag dell'immagine in Amazon ECR rimane lo stesso. Nell'esempio seguente, l'opzione --publish crea una nuova versione della funzione utilizzando l'immagine del container aggiornata.

aws lambda update-function-code \ --function-name hello-world \ --image-uri 111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest \ --publish

Caricamento dell'immagine su Amazon ECR e creazione della funzione Lambda
  1. Esegui il get-login-passwordcomando per autenticare la CLI Docker nel tuo registro Amazon ECR.

    • Imposta il --region valore nel Regione AWS punto in cui desideri creare il repository Amazon ECR.

    • Sostituiscilo 111122223333 con il tuo ID. Account AWS

    aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 111122223333.dkr.ecr.us-east-1.amazonaws.com
  2. Crea un repository in Amazon ECR utilizzando il commando create-repository.

    aws ecr create-repository --repository-name hello-world --region us-east-1 --image-scanning-configuration scanOnPush=true --image-tag-mutability MUTABLE
    Nota

    Il repository Amazon ECR deve corrispondere alla funzione Lambda. Regione AWS

    In caso di esito positivo, dovresti ottenere una risposta simile a questa:

    { "repository": { "repositoryArn": "arn:aws:ecr:us-east-1:111122223333:repository/hello-world", "registryId": "111122223333", "repositoryName": "hello-world", "repositoryUri": "111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world", "createdAt": "2023-03-09T10:39:01+00:00", "imageTagMutability": "MUTABLE", "imageScanningConfiguration": { "scanOnPush": true }, "encryptionConfiguration": { "encryptionType": "AES256" } } }
  3. Copia il repositoryUri dall'output del passaggio precedente.

  4. Esegui il comando docker tag per etichettare l'immagine locale nel repository Amazon ECR come versione più recente. In questo comando:

    • docker-image:test è il nome e tag dell'immagine Docker. Si tratta del nome e del tag dell'immagine specificati nel comando docker build.

    • Sostituisci l’<ECRrepositoryUri> con l’repositoryUri copiato. Assicurati di includere :latest alla fine dell'URI.

    docker tag docker-image:test <ECRrepositoryUri>:latest

    Esempio:

    docker tag docker-image:test 111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest
  5. Esegui il comando docker push per implementare la tua immagine locale sul repository Amazon ECR. Assicurati di includere :latest alla fine dell'URI del repository.

    docker push 111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest
  6. Crea un ruolo di esecuzione per la funzione, se non lo hai già fatto. Il nome della risorsa Amazon (ARN) del ruolo ti occorrerà nel passaggio successivo.

  7. Creazione della funzione Lambda Per ImageUri, specifica l'URI del repository creato in precedenza. Assicurati di includere :latest alla fine dell'URI.

    aws lambda create-function \ --function-name hello-world \ --package-type Image \ --code ImageUri=111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest \ --role arn:aws:iam::111122223333:role/lambda-ex
    Nota

    È possibile creare una funzione utilizzando un'immagine in un AWS account diverso, purché l'immagine si trovi nella stessa regione della funzione Lambda. Per ulteriori informazioni, consulta Autorizzazioni multiaccount Amazon ECR.

  8. Richiama la funzione.

    aws lambda invoke --function-name hello-world response.json

    Dovresti ottenere una risposta simile a questa:

    { "ExecutedVersion": "$LATEST", "StatusCode": 200 }
  9. Per vedere l'output della funzione, controlla il file response.json.

Per aggiornare il codice della funzione, devi creare nuovamente l'immagine, caricare la nuova immagine nell'archivio Amazon ECR e quindi utilizzare il update-function-codecomando per distribuire l'immagine nella funzione Lambda.

Lambda risolve il tag dell'immagine in un digest di immagine specifico. Ciò significa che se punti il tag immagine utilizzato per implementare la funzione su una nuova immagine in Amazon ECR, Lambda non aggiorna automaticamente la funzione per utilizzare la nuova immagine.

Per distribuire la nuova immagine nella stessa funzione Lambda, è necessario utilizzare update-function-codeil comando, anche se il tag dell'immagine in Amazon ECR rimane lo stesso. Nell'esempio seguente, l'opzione --publish crea una nuova versione della funzione utilizzando l'immagine del container aggiornata.

aws lambda update-function-code \ --function-name hello-world \ --image-uri 111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest \ --publish
PrivacyCondizioni del sitoPreferenze cookie
© 2025, Amazon Web Services, Inc. o società affiliate. Tutti i diritti riservati.