Implementazione di task AWS Lambda - AWS Flow Framework per Java

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

Implementazione di task AWS Lambda

Informazioni su AWS Lambda

AWS Lambdaè un servizio di elaborazione gestito che esegue il codice in risposta a eventi generati dal codice personalizzato o da variAWSservizi come Amazon S3, DynamoDB, Amazon Kinesis, Amazon SNS e Amazon Cognito. Per ulteriori informazioni su Lambda, consulta la Guida per gli sviluppatori di AWS Lambda.

Amazon Simple Workflow Service fornisce un task Lambda in modo da permetterti di eseguire funzioni Lambda in sostituzione o insieme alle tradizionali attività Amazon SWF.

Importante

Il tuoAWSverrà addebitato l'importo delle esecuzioni Lambda (richieste) eseguite da Amazon SWF per tuo conto. Per i dettagli sui prezzi di Lambda, consultahttps://aws.amazon.com/lambda/pricing/.

Vantaggi e limiti inerenti all'utilizzo di task Lambda

L'utilizzo di task Lambda anziché di una tradizionale attività Amazon SWF include numerosi vantaggi:

  • I task Lambda non devono essere registrati o avere una versione come i tipi di attività Amazon SWF.

  • Puoi utilizzare qualsiasi funzione Lambda esistente già definita nei tuoi flussi di lavoro.

  • Le funzioni Lambda sono chiamate direttamente da Amazon SWF; non devi implementare un programma lavoratore per eseguirle.

  • Lambda fornisce parametri e log per monitorare e analizzare le esecuzioni delle funzioni.

L'utilizzo di task Lambda comporta anche alcuni limiti che è necessario conoscere:

  • I task Lambda possono essere eseguiti solo inAWSregioni che supportano Lambda. Consulta .Regioni ed endpoint LambdanellaRiferimento generale di Amazon Web Servicesper informazioni dettagliate sulle regioni attualmente supportate per Lambda.

  • I task Lambda sono attualmente supportati solo dall'API HTTP di SWF di base e in AWS Flow Framework per Java. I task Lambda non sono supportati in AWS Flow Framework per Ruby.

Utilizzo di task Lambda nel tuoAWS Flow Frameworkper i flussi di lavoro Java

Per utilizzare task Lambda nel tuoAWS Flow Frameworkper i flussi di lavoro Java:

  • Una funzione Lambda da eseguire. Puoi utilizzare qualsiasi funzione Lambda definita. Per ulteriori informazioni su come creare funzioni Lambda, consultaAWS LambdaGuida per gli sviluppatori.

  • Un ruolo IAM che fornisce l'accesso per eseguire funzioni Lambda dai flussi di lavoro Amazon SWF.

  • Codice per pianificare il task Lambda dall'interno del flusso di lavoro.

Configurazione di un ruolo IAM

Prima di richiamare le funzioni Lambda da Amazon SWF devi fornire un ruolo IAM che fornisce l'accesso a Lambda da Amazon SWF. Puoi eseguire una delle seguenti operazioni:

  • scegli un ruolo predefinito,AWSLambdaRole, per autorizzare i tuoi flussi di lavoro a richiamare qualsiasi funzione Lambda associata al tuo account.

  • definire una policy e il ruolo associato per autorizzare i flussi di lavoro a richiamare particolari funzioni Lambda, specificate in base ai relativi nomi ARN.

Limitare le autorizzazioni su un ruolo IAM

Puoi limitare le autorizzazioni per un ruolo IAM che fornisci ad Amazon SWF utilizzando ilSourceArneSourceAccountchiavi di contesto nel criterio di attendibilità delle risorse. Queste chiavi limitano l'utilizzo di una policy IAM in modo che venga utilizzata solo dalle esecuzioni di Amazon Simple Workflow Service appartenenti al dominio ARN specificato. Se si utilizzano entrambe le chiavi di contesto delle condizioni globali,aws:SourceAccountvalore e il conto a cui si fa riferimento nelaws:SourceArnvalue deve utilizzare lo stesso ID account quando viene utilizzato nella stessa istruzione della policy.

Nel seguente esempio di policy di trust, viene utilizzato il kitSourceArnchiave di contesto per limitare l'utilizzo del ruolo del servizio IAM solo nelle esecuzioni di Amazon Simple Workflow Service appartenentisomeDomainnel conto,123456789012.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "swf.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:swf:*:123456789012:/domain/someDomain" } } } ] }

Nel seguente esempio di policy di trust, viene utilizzato il kitSourceAccountchiave di contesto per limitare l'utilizzo del ruolo del servizio IAM solo nelle esecuzioni di Amazon Simple Workflow Service nell'account,123456789012.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "swf.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringLike": { "aws:SourceAccount": "123456789012" } } } ] }

Fornire ad Amazon SWF l'accesso per richiamare qualsiasi ruolo Lambda

Puoi utilizzare il ruolo predefinito,AWSLambdaRoleper consentire ai flussi di lavoro Amazon SWF di richiamare qualsiasi funzione Lambda associata al tuo account.

Per utilizzareAWSLambdaRoleper consentire ad Amazon SWF di richiamare le funzioni Lambda
  1. Apri la console Amazon IAM.

  2. Scegli Roles (Ruoli), quindi Create New Role (Crea nuovo ruolo).

  3. Assegna un nome al ruolo, come swf-lambda, quindi scegli Next Step (Fase successiva).

  4. UNDERAWSRuoli dei servizi, scegliAmazon SWFe scegliFase successiva.

  5. SulCollegamento della policyschermo, scegliAWSLambdaRoledall'elenco.

  6. Scegli Next Step (Fase successiva), quindi Create Role (Crea ruolo) dopo aver esaminato il ruolo.

Definizione di un ruolo IAM per fornire l'accesso per richiamare una specifica funzione Lambda

Se intendi fornire l'accesso per richiamare una specifica funzione Lambda dal flusso di lavoro, devi definire una policy IAM.

Per creare una policy IAM per consentire l'accesso a una particolare funzione Lambda
  1. Apri la console Amazon IAM.

  2. Scegli Policies (Policy), quindi Create Policy (Crea policy).

  3. ScegliereCopiare un'AWSPolicy gestitae selezionaAWSLambdaRoledall'elenco. Viene generata una policy. Se necessario, modificane il nome e la descrizione.

  4. NellaResource (Risorsa)campo dellaPolicy Document (Documento policy), aggiungi l'ARN delle funzioni Lambda. Ad esempio:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "lambda:InvokeFunction" ], "Resource": [ "arn:aws:lambda:us-east-1:111111000000:function:hello_lambda_function" ] } ] }
    Nota

    Per una descrizione completa di come specificare le risorse in un ruolo IAM, consultaPanoramica delle policy IAMnelUso di IAM.

  5. Scegli Create Policy (Crea policy) per completare la creazione della policy.

Puoi quindi selezionare questa policy quando crei un nuovo ruolo IAM e utilizzare il ruolo per fornire ai flussi di lavoro Amazon SWF l'accesso per richiamare le funzioni. Questa procedura è molto simile alla creazione di un ruolo conAWSLambdaRole. La differenza è che qui scegli la policy quando crei il ruolo.

Per creare un ruolo Amazon SWF utilizzando la tua politica Lambda
  1. Apri la console Amazon IAM.

  2. Scegli Roles (Ruoli), quindi Create New Role (Crea nuovo ruolo).

  3. Assegna un nome al ruolo, come swf-lambda-function, quindi scegli Next Step (Fase successiva).

  4. UNDERAWSRuoli dei servizi, scegliAmazon SWFe scegliFase successiva.

  5. SulCollegamento della policy, scegli la policy specifica alle funzioni Lambda dall'elenco.

  6. Scegli Next Step (Fase successiva), quindi Create Role (Crea ruolo) dopo aver esaminato il ruolo.

Pianificazione di un task Lambda per l'esecuzione

Dopo aver definito il ruolo IAM che ti consente di richiamare funzioni Lambda, puoi pianificare quest'operazioni per l'esecuzione nell'ambito del flusso di lavoro.

Nota

L'intero processo è illustrato nell'insiemeHelloLambdaprovarenellaAWS SDK for Java.

Per pianificare un task Lambda per l'esecuzione
  1. Nell'implementazione di flusso di lavoro, ottieni un'istanza di LambdaFunctionClient chiamando getLambdaFunctionClient() su un'istanza DecisionContext.

    // Get a LambdaFunctionClient instance DecisionContextProvider decisionProvider = new DecisionContextProviderImpl(); DecisionContext decisionContext = decisionProvider.getDecisionContext(); LambdaFunctionClient lambdaClient = decisionContext.getLambdaFunctionClient();
  2. Pianifica l'attività utilizzando ilscheduleLambdaFunction()metodo sul kitLambdaFunctionClient, passandogli il nome della funzione Lambda che hai creato e tutti i dati di input per il task Lambda.

    // Schedule the Lambda function for execution, using your IAM role for access. String lambda_function_name = "The name of your Lambda function."; String lambda_function_input = "Input data for your Lambda task."; lambdaClient.scheduleLambdaFunction(lambda_function_name, lambda_function_input);
  3. Nello starter dell'esecuzione di flusso di lavoro, aggiungi il ruolo lambda IAM alle opzioni di flusso di lavoro di default utilizzandoStartWorkflowOptions.withLambdaRole()e quindi passa le opzioni all'avvio del flusso di lavoro.

    // Workflow client classes are generated for you when you use the @Workflow // annotation on your workflow interface declaration. MyWorkflowClientExternalFactory clientFactory = new MyWorkflowClientExternalFactoryImpl(sdk_swf_client, swf_domain); MyWorkflowClientExternal workflow_client = clientFactory.getClient(); // Give the ARN of an IAM role that allows SWF to invoke Lambda functions on // your behalf. String lambda_iam_role = "arn:aws:iam::111111000000:role/swf_lambda_role"; StartWorkflowOptions workflow_options = new StartWorkflowOptions().withLambdaRole(lambda_iam_role); // Start the workflow execution workflow_client.helloWorld("User", workflow_options);

Visualizzare ilHelloLambdaprovare

Il kit include un esempio che fornisce l'implementazione di un flusso di lavoro che utilizza un task LambdaAWS SDK for Java. Per visualizzarlo e/o eseguirlo, scarica il file.

Una descrizione completa di come compilare ed eseguireHelloLambdal'esempio è incluso nel file README fornito conAWS Flow Frameworkper esempi Java.