Salta al contenuto

Come posso configurare una notifica di eventi Amazon S3 per invocare una funzione Lambda presente in un altro account AWS?

5 minuti di lettura
0

Desidero che il mio bucket Amazon Simple Storage Service (Amazon S3) invochi una funzione AWS Lambda in un altro account AWS.

Risoluzione

Per configurare un bucket Amazon S3 in modo che invochi una funzione Lambda in un altro account AWS, completa i seguenti passaggi:

  1. Aggiorna la policy delle autorizzazioni basata sulle risorse della funzione Lambda per concedere l'autorizzazione di invocazione ad Amazon S3.
  2. Crea una notifica di evento Amazon S3 che invochi la funzione Lambda.

Importante: la funzione Lambda deve trovarsi nella stessa Regione AWS del bucket S3.

Per informazioni sulla migrazione delle funzioni, consulta Come faccio a eseguire la migrazione di una funzione Lambda verso un altro account o Regione AWS utilizzando la console Lambda?

Aggiorna la policy delle autorizzazioni basata sulle risorse della funzione Lambda per concedere l'autorizzazione di invocazione ad Amazon S3

Console di gestione AWS

Per aggiornare la policy delle autorizzazioni basata sulle risorse della funzione Lambda per concedere l'autorizzazione di invocazione ad Amazon S3, completa i seguenti passaggi:

  1. Apri la pagina Funzioni della console Lambda con l'account AWS in cui si trova la funzione Lambda.
  2. Scegli il nome della funzione Lambda che desideri venga invocata da Amazon S3.
  3. Nella scheda Configurazione, scegli ** Autorizzazioni**.
  4. Nel pannello Policy basata sulle risorse, scegli Aggiungi autorizzazioni.
  5. Nel pannello Istruzione della policy, scegli Servizio AWS. Viene visualizzato l'elenco a discesa Servizio.
  6. Nell'elenco a discesa Servizio, scegli S3 per visualizzare altri campi.
  7. Per ID istruzione, inserisci un ID univoco per l'istruzione per differenziare l'istruzione che crei all'interno della policy.
  8. Per Account di origine, inserisci l'ID dell'account AWS che ospita il bucket S3.
  9. Per ARN di origine, inserisci l'ARN del bucket S3. Utilizza il seguente formato:
    arn:aws:s3:::bucket_name
    Nota: sostituisci bucket_name con il nome del tuo bucket S3.
  10. Per Operazione, seleziona lambda:InvokeFunction dall'elenco a discesa.
  11. Scegli Salva.

Per ulteriori informazioni, consulta Visualizzazione delle policy IAM basate sulle risorse in Lambda.

AWS CLI

Nota: se ricevi messaggi di errore durante l'esecuzione dei comandi dell'interfaccia della linea di comando AWS (AWS CLI), consulta la sezione Troubleshoot AWS CLI errors. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.

Aggiorna la policy delle autorizzazioni basata sulle risorse della funzione Lambda per concedere l'autorizzazione di invocazione ad Amazon S3 con l'API add-permission simile alla seguente:

aws lambda add-permission \--function-name LambdaFunction_name \
--action lambda:InvokeFunction \
--principal s3.amazonaws.com \
--source-arn arn:aws:s3:::bucket_name \
--source-account account-id \
--statement-id "unique_statement_ID"

Nota: sostituisci LambdaFunction_name, bucket_name e unique_statement_ID con le tue variabili.

Crea una notifica di evento Amazon S3 che invochi la funzione Lambda

Console di gestione AWS

Segui le istruzioni per attivare e configurare le notifiche di evento utilizzando la console Amazon S3.

AWS CLI

Per creare una notifica di evento Amazon S3 che invochi la funzione Lambda, utilizza il comando put-bucket-notification-configuration.

Importante: prima di utilizzare il comando put-bucket-notification, verifica di non avere altre notifiche di evento configurate nel bucket S3. Il comando put-bucket-notification-configuration esegue un'operazione di sostituzione su qualsiasi configurazione di notifica esistente anziché un'aggiunta.

Per verificare se sono già presenti configurazioni Notifica evento per il bucket, esegui questo comando:

aws s3api get-bucket-notification-configuration --bucket bucket_name

Se il comando precedente restituisce un oggetto JSON vuoto o nessuna risposta, ciò significa che non è presente alcuna configurazione Notifica evento esistente. Crea e salva un nuovo file denominato notification.json con la seguente configurazione:

{
"LambdaFunctionConfigurations": [
    {
      "Id": "my-lambda-function-s3-event-configuration",
      "LambdaFunctionArn": "LambdaFunction_ARN",
      "Events": [ "s3:ObjectCreated:" ],
      "Filter": {
        "Key": {
          "FilterRules": [
            {
              "Name": "prefix"|"suffix",
              "Value": "string"
            }
          ]
        }
      }
    }
  ]
}

Nota: sostituisci LambdaFunction_ARN con l'ARN della tua funzione Lambda. Sostituisci il prefisso e il suffisso con le tue variabili per la regola di filtro.

Se get-bucket-notification-configuration restituisce il JSON di una configurazione Notifica evento esistente, salva la configurazione JSON esistente come file denominato notification.json. Aggiungi la nuova configurazione di notifica Lambda a una chiave LambdaFunctionConfigurations esistente o crea una nuova chiave con la sintassi JSON mostrata nell'esempio seguente. Aggiungi la chiave al file notification.json:

{
... # Non Lambda event configurations like SNS, SQS etc. ,
"LambdaFunctionConfigurations": [
    {
      "Id": "my-lambda-function-s3-event-configuration",
      "LambdaFunctionArn": "LambdaFunction_ARN",
      "Events": [ "s3:ObjectCreated:" ],
      "Filter": {
        "Key": {
          "FilterRules": [
            {
              "Name": "prefix"|"suffix",
              "Value": "string"
            }
          ]
        }
      }
    },
    {...}, #Other pre-existing Lambda Function configurations
  ]
}

Dopo aver creato notification.json, esegui questo comando per aggiornare la configurazione Notifica evento di S3:

aws s3api put-bucket-notification-configuration \
--bucket bucket_name \
--notification-configuration file://notification.json

Nota: sostituisci bucket_name con il nome del tuo bucket S3.

Testa la funzione Lambda

Per testare la funzione Lambda con la console Lambda, consulta Test di una funzione Lambda con un evento fittizio. Se la funzione non viene invocata dalla Notifica evento, consulta Come posso risolvere il problema delle notifiche degli eventi Amazon S3 che non invocano una funzione Lambda?

Informazioni correlate

Come posso consentire alla mia funzione Lambda di accedere al mio bucket Amazon S3?

Perché ricevo l'errore "Unable to validate the following destination configurations" quando utilizzo Notifiche degli eventi in Amazon S3?

AWS UFFICIALEAggiornata 2 anni fa