Implementação de tarefas do AWS Lambda - AWS Flow Framework para Java

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Implementação de tarefas do AWS Lambda

Sobre o AWS Lambda

O AWS Lambda é um serviço de computação totalmente gerenciado que executa seu código em resposta a eventos gerados por código personalizado ou de vários serviços do AWS, como Amazon S3, DynamoDB, Amazon Kinesis, Amazon SNS e Amazon Cognito. Para obter mais informações sobre o Lambda, consulte o Manual do desenvolvedor do AWS Lambda.

O Amazon Simple Workflow Service fornece uma tarefa Lambda para que você possa executar funções Lambda no lugar ou ao lado das atividades tradicionais do Amazon SWF.

Importante

Sua conta AWS será cobrada pelas execuções (solicitações) do Lambda realizadas pelo Amazon SWF em seu nome. Para detalhes sobre preços do Lambda, consulte https://aws.amazon.com/lambda/pricing/.

Benefícios e limitações do uso de tarefas Lambda

Há vários benefícios no uso de tarefas Lambda em vez de uma atividade tradicional do Amazon SWF:

  • As tarefas Lambda não precisam ser registradas ou versionadas como os tipos de atividade do Amazon SWF.

  • Você pode usar quaisquer funções Lambda existentes que já tenha definido em seus fluxos de trabalho.

  • As funções Lambda são chamadas diretamente pelo Amazon SWF; não há necessidade de implementar um programa de trabalho para executá-las, como deve ser feito com as atividades tradicionais.

  • O Lambda fornece métricas e registros para rastrear e analisar as execuções das funções.

Há também uma série de limitações em relação a tarefas Lambda sobre as quais você deve estar ciente:

  • As tarefas do Lambda só podem ser executadas nas regiões do AWS que oferecem suporte ao Lambda. Consulte Regiões e pontos de extremidade do Lambda na Referência geral do Amazon Web Services para obter detalhes sobre as regiões atualmente compatíveis com o Lambda.

  • No momento, tarefas Lambda têm suporte na API HTTP base do SWF e no AWS Flow Framework para Java. Atualmente, não há suporte para tarefas Lambda no AWS Flow Framework para Ruby.

Usando tarefas Lambda em seus fluxos de trabalho AWS Flow Framework para Java

Há três requisitos para usar tarefas Lambda em seu AWS Flow Framework para fluxos de trabalho Java:

  • Uma função do Lambda a ser executada. Você pode usar qualquer função Lambda que tenha definido Para obter mais informações sobre como criar funções Lambda, consulte o Guia do desenvolvedor do AWS Lambda.

  • Uma função IAM que fornece acesso para executar funções Lambda a partir de seus fluxos de trabalho do Amazon SWF.

  • Código para agendar a tarefa Lambda de dentro do seu fluxo de trabalho.

Configurar uma função do IAM

Antes de poder invocar as funções do Lambda a partir do Amazon SWF, você deve fornecer uma função IAM que forneça acesso ao Lambda a partir do Amazon SWF. Você também pode:

  • escolha uma função predefinida, AWSLambdaRole para dar permissão aos seus fluxos de trabalho para invocar qualquer função Lambda associada à sua conta.

  • defina sua própria política e função associada para dar permissão aos fluxos de trabalho para invocar funções Lambda específicas, especificadas por seus nomes de recursos da Amazon (ARNs).

Limite de permissões de uma função do IAM

Você pode limitar as permissões em uma função IAM fornecida ao Amazon SWF usando as chaves de contexto SourceArn e SourceAccount em sua política de confiança de recursos. Essas chaves limitam o uso de uma política de IAM para que ela seja usada somente em execuções do Amazon Simple Workflow Service que pertençam ao domínio ARN especificado. Se você usar ambas as chaves de contexto de condição global, o valor aws:SourceAccount e a conta referenciada no valor aws:SourceArn deverão usar o mesmo ID de conta quando usados na mesma declaração de política.

No exemplo de política de confiança a seguir, usamos a chave de contexto SourceArn para restringir a função de serviço IAM a ser usada somente nas execuções do Amazon Simple Workflow Service que pertencem a someDomain na conta 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" } } } ] }

No exemplo de política de confiança a seguir, usamos a chave de contexto SourceAccount para restringir a função de serviço IAM a ser usada somente em execuções do Amazon Simple Workflow Service na conta 123456789012.

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

Fornecer ao Amazon SWF acesso para invocar qualquer função Lambda

Você pode usar a função predefinida, AWSLambdaRole, para dar aos seus fluxos de trabalho do Amazon SWF a capacidade de invocar qualquer função Lambda associada à sua conta.

Para usar o AWSLambdaRole para dar ao Amazon SWF acesso para invocar funções Lambda
  1. Abra o console do Amazon IAM.

  2. Escolha Roles e depois Create New Role.

  3. Dê um nome para a sua função, como swf-lambda e escolha Next Step.

  4. Em AWS Service Roles, escolha Amazon SWF e selecione Próxima etapa.

  5. Na tela Attach Policy, escolha AWSLambdaRole na lista.

  6. Escolha Next Step e depois Create Role depois de analisar a função.

Definição de uma função IAM para fornecer acesso para invocar uma função Lambda específica

Se quiser fornecer acesso para invocar uma função Lambda específica do seu fluxo de trabalho, você precisará definir sua própria política de IAM..

Para criar uma política de IAM para fornecer acesso a uma função Lambda específica
  1. Abra o console do Amazon IAM.

  2. Escolha Policies e depois Create Policy.

  3. Escolha Copiar uma política gerenciada da AWS e selecione AWSLambdaRole na lista. Uma política será gerada para você. Opcionalmente, edite seu nome e descrição para atender às suas necessidades.

  4. No campo Recurso do Documento de política, adicione o ARN de sua(s) função(ões) Lambda. Por exemplo:

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

    Para obter uma descrição completa de como especificar recursos em uma função de IAM, consulte Visão geral das políticas de IAM em Uso do IAM.

  5. Escolha Create Policy para concluir a criação da sua política.

Em seguida, você pode selecionar essa política ao criar uma nova função de IAM e usar essa função para conceder acesso de invocação aos seus fluxos de trabalho do Amazon SWF. Este procedimento é muito semelhante à criação de uma função com a política AWSLambdaRole. Em vez disso, escolha sua própria política ao criar a função.

Para criar uma função do Amazon SWF usando sua política Lambda
  1. Abra o console do Amazon IAM.

  2. Escolha Roles e depois Create New Role.

  3. Dê um nome para a sua função, como swf-lambda-function e escolha Next Step.

  4. Em AWS Service Roles, escolha Amazon SWF e selecione Próxima etapa.

  5. Na Anexar política, escolha a política específica da função Lambda na lista.

  6. Escolha Next Step e depois Create Role depois de analisar a função.

Agendar uma tarefa Lambda para execução

Depois de definir uma função de IAM que permite invocar funções Lambda, você pode programá-las para execução como parte do seu fluxo de trabalho.

nota

Esse processo é demonstrado totalmente pelo exemplo HelloLambda no AWS SDK for Java.

Para agendar uma tarefa Lambda para execução
  1. Na implementação do fluxo de trabalho, obtenha uma instância do LambdaFunctionClient chamando getLambdaFunctionClient() em uma instância DecisionContext.

    // Get a LambdaFunctionClient instance DecisionContextProvider decisionProvider = new DecisionContextProviderImpl(); DecisionContext decisionContext = decisionProvider.getDecisionContext(); LambdaFunctionClient lambdaClient = decisionContext.getLambdaFunctionClient();
  2. Programe a tarefa usando o método scheduleLambdaFunction() no LambdaFunctionClient, passando a ele o nome da função Lambda que você criou e quaisquer dados de entrada para a tarefa 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. Em seu iniciador de execução de fluxo de trabalho, adicione a função lambda do IAM às opções padrão do fluxo de trabalho usando StartWorkflowOptions.withLambdaRole() e, em seguida, passe as opções ao iniciar o fluxo de trabalho.

    // 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);

Exibir o exemplo HelloLambda

Uma amostra que fornece uma implementação de um fluxo de trabalho que usa uma tarefa Lambda é fornecida no AWS SDK for Java. Para visualizar e/ou executá-lo, faça download da fonte.

Uma descrição completa de como criar e executar a amostra HelloLambda é fornecida no arquivo README fornecido com as amostras do AWS Flow Framework para Java.