AWS Lambda 작업 구현 - AWS Flow Framework 자바용

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

AWS Lambda 작업 구현

AWS Lambda 정보

AWS Lambda는 사용자 지정 코드로 생성된 이벤트에 대한 응답으로 또는 Amazon S3, DynamoDB, Amazon Kinesis, Amazon SNS 및 Amazon Cognito 등 다양한 AWS 서비스에서 코드를 실행하는 완전관리형 컴퓨팅 서비스입니다. Lambda에 대한 자세한 내용은 AWS Lambda 개발자 가이드를 참조하세요.

Amazon Simple Workflow Service는 Lambda 작업을 제공하므로 기존 Amazon SWF 활동 대신 또는 이러한 활동과 함께 Lambda 함수를 실행할 수 있습니다.

중요

Amazon SWF에서 자동으로 실행한 Lambda 실행(요청)에 대한 비용이 AWS 계정에 청구됩니다. Lambda 요금에 대한 자세한 내용은 https://aws.amazon.com/lambda/pricing/을 참조하십시오.

Lambda 작업 사용의 이점 및 제한 사항

일반적인 Amazon SWF 활동 대신 Lambda 작업을 사용하면 다음과 같은 여러 가지 이점이 있습니다.

  • Lambda 작업은 Amazon SWF 활동 유형처럼 등록하거나 버전을 관리할 필요가 없습니다.

  • 워크플로에 이미 정의해 둔 기존 Lambda 함수는 어느 것이나 사용할 수 있습니다.

  • Lambda 함수는 Amazon SWF에서 직접 호출하기 때문에 일반적인 활동에 대해 수행해야 하는 것처럼 작업을 실행할 작업자 프로그램을 구현할 필요가 없습니다.

  • Lambda에서는 함수 실행을 추적 및 분석할 수 있도록 측정치 및 로그를 제공합니다.

또한 Lambda 작업과 관련해서는 반드시 알고 있어야 하는 여러 가지 제한 사항이 있습니다.

  • Lambda 작업은 Lambda를 지원하는 AWS 리전에서만 실행할 수 있습니다. 현재 Lambda를 지원하는 리전에 대한 자세한 내용은 Amazon Web Services 일반 참조Lambda 리전 및 엔드포인트를 참조하십시오.

  • Lambda 작업은 현재 기본 SWF HTTP API 및 Java용 AWS Flow Framework에서만 지원됩니다. Ruby용 AWS Flow Framework에서는 현재 Lambda 작업이 지원되지 않습니다.

AWS Flow Framework for Java 워크플로에서 Lambda 작업 사용

AWS Flow Framework for Java 워크플로에서 Lambda 작업을 사용하는 것과 관련해 다음과 같은 세 가지 요구 사항이 있습니다.

  • 실행할 Lambda 함수입니다. 정의한 Lambda 함수를 자유롭게 사용할 수 있습니다. Lambda 함수를 생성하는 방법에 대한 자세한 내용은 AWS Lambda 개발자 안내서를 참조하십시오.

  • Amazon SWF 워크플로에서 Lambda 함수를 실행할 수 있도록 액세스 권한을 제공하는 IAM 역할.

  • 워크플로 내에서 Lambda 작업을 예약할 수 있는 코드.

IAM 역할 설정

Amazon SWF에서 Lambda 함수를 간접적으로 호출하려면 Amazon SWF에서 Lambda에 대한 액세스를 제공하는 IAM 역할을 제공해야 합니다. 다음 작업 중 하나를 수행할 수 있습니다.

  • 사전 정의된 역할인 AWSLambdaRole을 선택해 워크플로에 계정과 연결된 모든 Lambda 함수를 간접적으로 호출할 수 있는 권한을 부여합니다.

  • 자체 정책 및 연결된 역할을 정의해 Amazon 리소스 이름(ARN)으로 지정된 특정 Lambda 함수를 간접적으로 호출하는 워크플로 권한을 부여합니다.

IAM 역할에 대한 권한 제한

리소스 신뢰 정책의 SourceArnSourceAccount 컨텍스트 키를 사용하여 Amazon SWF에 제공하는 IAM 역할에 대한 권한을 제한할 수 있습니다. 이러한 키는 지정된 도메인 ARN에 속하는 Amazon Simple Workflow Service 실행에서만 사용하도록 IAM 정책의 사용을 제한합니다. 두 글로벌 조건 컨텍스트 키를 모두 사용하는 경우 aws:SourceAccount 값과 aws:SourceArn 값에서 참조되는 계정은 동일한 정책 문에서 사용할 경우 동일한 계정 ID를 사용해야 합니다.

다음 신뢰 정책 예에서는 SourceArn 컨텍스트 키를 사용하여 IAM 서비스 역할이 123456789012 계정의 someDomain에 속하는 Amazon Simple Workflow Service 실행에서만 사용되도록 제한합니다.

{ "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" } } } ] }

다음 신뢰 정책 예에서는 SourceAccount 컨텍스트 키를 사용하여 IAM 서비스 역할을 123456789012 계정의 Amazon Simple Workflow Service 실행에서만 사용하도록 제한합니다.

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

Amazon SWF에 Lambda 역할을 간접 호출하기 위한 액세스 권한 제공

사전 정의된 역할인 AWSLambdaRole을 사용해 Amazon SWF 워크플로에 계정과 연결된 모든 Lambda 함수를 간접적으로 호출할 수 있는 권한을 부여합니다.

AWSLambdaRole을 사용해 Amazon SWF에 Lambda 함수를 간접적으로 호출할 수 있는 액세스 권한을 부여하려면
  1. Amazon IAM 콘솔을 엽니다.

  2. [Roles]를 선택한 다음 [Create New Role]을 선택합니다.

  3. swf-lambda와 같이 역할에 이름을 지정한 다음 [Next Step]을 선택합니다.

  4. AWS 서비스 역할에서 Amazon SWF를 선택하고 다음 단계를 선택합니다.

  5. [Attach Policy] 화면의 목록에서 [AWSLambdaRole]을 선택합니다.

  6. 역할을 검토한 후 [Next Step]을 선택하고 [Create Role]을 선택합니다.

특정 Lambda 함수를 간접 호출할 액세스 권한을 제공하는 IAM 역할 정의

워크플로에서 특정 Lambda 함수를 간접적으로 호출하는 액세스 권한을 제공하려는 경우 자체 IAM 정책을 정의해야 합니다.

특정 Lambda 함수에 대한 액세스 권한을 부여하는 IAM 정책을 생성하려면
  1. Amazon IAM 콘솔을 엽니다.

  2. [Policies]를 선택한 다음 [Create Policy]를 선택합니다.

  3. [Copy an AWS Managed Policy]를 선택하고 목록에서 [AWSLambdaRole]을 선택합니다. 정책이 자동으로 생성됩니다. 경우에 따라 필요에 맞춰 정책 이름 및 설명을 편집합니다.

  4. 정책 문서리소스 필드에 Lambda 함수의 ARN을 추가합니다. 예:

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

    IAM 역할에서 리소스를 지정하는 방법에 대한 전체 설명은 IAM 사용IAM 정책 개요를 참조하십시오.

  5. [Create policy]를 선택하여 정책 생성을 마칩니다.

그런 다음 새 IAM 역할을 생성할 때 이 정책을 선택하고 해당 역할을 사용해 Amazon SWF 워크플로에 간접 호출 액세스 권한을 부여합니다. 이 절차는 AWSLambdaRole 정책을 사용해 역할을 생성하는 것과 매우 유사합니다. 대신 역할을 생성할 때 고유한 정책을 선택합니다.

Lambda 정책을 사용하여 Amazon SWF 역할을 생성하려면
  1. Amazon IAM 콘솔을 엽니다.

  2. [Roles]를 선택한 다음 [Create New Role]을 선택합니다.

  3. swf-lambda-function와 같이 역할에 이름을 지정한 다음 [Next Step]을 선택합니다.

  4. AWS 서비스 역할에서 Amazon SWF를 선택하고 다음 단계를 선택합니다.

  5. 정책 연결 화면의 목록에서 Lambda 함수 관련 정책을 선택합니다.

  6. 역할을 검토한 후 [Next Step]을 선택하고 [Create Role]을 선택합니다.

실행을 위해 Lambda 작업을 예약하려면

Lambda 함수를 간접적으로 호출할 수 있게 해주는 IAM 역할을 정의했다면 이 함수가 워크플로의 일부로 실행되도록 예약할 수 있습니다.

참고

이 프로세스는 AWS SDK for Java의 HelloLambda 샘플을 통해 완전히 입증되었습니다.

실행을 위해 Lambda 작업을 예약하려면
  1. 워크플로 구현에서 DecisionContext 인스턴스의 getLambdaFunctionClient()를 직접적으로 호출하여 LambdaFunctionClient의 인스턴스를 얻습니다.

    // Get a LambdaFunctionClient instance DecisionContextProvider decisionProvider = new DecisionContextProviderImpl(); DecisionContext decisionContext = decisionProvider.getDecisionContext(); LambdaFunctionClient lambdaClient = decisionContext.getLambdaFunctionClient();
  2. LambdaFunctionClientscheduleLambdaFunction() 메서드를 사용하여 작업을 예약하고 생성한 Lambda 함수의 이름과 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. 워크플로 실행 시작자에서 StartWorkflowOptions.withLambdaRole()을 사용하여 IAM Lambda 역할을 기본 워크플로 옵션에 추가한 후 이 워크플로를 시작할 때 옵션을 전달합니다.

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

HelloLambda 샘플 보기

Lambda 작업을 사용하는 워크플로의 구현을 제공하는 샘플은 AWS SDK for Java에서 제공됩니다. 이 샘플을 보거나 실행하려면 소스를 다운로드하십시오.

HelloLambda 샘플을 빌드 및 실행하는 방법에 관한 자세한 설명은 AWS Flow Framework for Java 샘플과 함께 제공되는 README 파일에 있습니다.