Step Functions의 분산 맵을 사용하여 대규모 CSV 데이터 복사 - AWS Step Functions

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

Step Functions의 분산 맵을 사용하여 대규모 CSV 데이터 복사

이 자습서는 분산 모드에서 Map 상태 사용을 시작하는 데 도움이 됩니다. Distributed로 설정된 Map 상태를 Distributed Map 상태라고 합니다. 워크플로의 Distributed Map 상태를 사용하여 대규모 Amazon S3 데이터 소스를 반복할 수 있습니다. Map 상태는 각 반복을 하위 워크플로 실행으로 실행하므로 높은 동시성이 가능합니다. 분산 모드에 대한 자세한 내용은 분산 모드의 Map 상태를 참조하세요.

이 자습서에서는 분산 맵 상태를 사용하여 Amazon S3 버킷의 CSV 파일을 반복합니다. 그런 다음 하위 워크플로 ARN 실행의 내용과 함께 다른 Amazon S3 버킷에 해당 콘텐츠를 반환합니다. 먼저 Workflow Studio에서 워크플로 프로토타입을 만듭니다. 다음으로, Map상태의 처리 모드를 Distributed로 설정하고, CSV 파일을 데이터세트로 지정하고, 해당 위치를 Map 상태에 제공합니다. 또한 Distributed Map 상태Express로 시작하는 하위 워크플로 실행의 워크플로 유형을 지정합니다.

이 자습서에서 사용하는 예제 워크플로의 경우 이러한 설정 외에도 하위 워크플로의 최대 동시 실행 수, Map 결과를 내보내는 위치와 같은 다른 구성도 지정합니다.

사전 조건

  • Amazon S3 버킷에 CSV 파일을 업로드합니다. CSV파일 내에 헤더 행을 정의해야 합니다. CSV파일에 적용되는 크기 제한 및 헤더 행을 지정하는 방법에 대한 자세한 내용은 을 참조하십시오CSVAmazon S3 버킷에 있는 파일.

  • Amazon S3 버킷과 Map 상태 결과를 내보낼 버킷 내에 폴더를 만듭니다.

중요

Amazon S3 버킷이 동일한 위치에 있는지 확인하십시오. AWS 계정 그리고 AWS 리전 스테이트 머신으로 사용하십시오.

1단계: 워크플로 프로토타입 만들기

이 단계에서는 Workflow Studio를 사용하여 워크플로의 프로토타입을 만듭니다. Workflow Studio는 Step Functions 콘솔에서 사용할 수 있는 시각적 워크플로 디자이너입니다. 플로우 탭과 API 액션 탭에서 각각 필요한 상태와 액션을 선택합니다. Workflow Studio의 끌어서 놓기 기능을 사용하여 워크플로 프로토타입을 만듭니다.

  1. Step Functions 콘솔을 열고 상태 시스템 생성을 선택합니다.

  2. 템플릿 선택 대화 상자에서 공백을 선택합니다.

  3. 선택을 선택하여 에서 워크플로 스튜디오를 엽니다디자인 모드.

  4. 흐름 탭에서 Map 상태를 끌어 첫 번째 상태를 여기에 놓기 레이블이 지정된 빈 상태에 놓습니다.

  5. 구성 탭의 상태 이름Process data를 입력합니다.

  6. 작업 탭에서 드래그하십시오. AWS Lambda API작업을 호출하여 프로세스 데이터 상태 내에 드롭합니다.

  7. 이름을 바꿉니다. AWS Lambda 상태를 로 호출합니다. Process CSV data

2단계: Map 상태에 필요한 필드 구성

이 단계에서는 Distributed Map 상태에 필요한 다음 필드를 구성합니다.

  • ItemReaderMap 상태에서 입력을 읽을 수 있는 데이터세트와 해당 위치를 지정합니다.

  • ItemProcessor - 다음 값을 지정합니다.

    • ProcessorConfig - ModeExecutionType을 각각 DISTRIBUTEDEXPRESS로 설정합니다. 이렇게 하면 Distributed Map 상태가 시작하는 하위 워크플로 실행의 Map 상태 처리 모드와 워크플로 유형이 설정됩니다.

    • StartAt - Map 워크플로의 첫 번째 상태입니다.

    • States - 각 하위 워크플로 실행에서 반복되는 일련의 단계인 Map 워크플로를 정의합니다.

  • ResultWriter— Step Functions가 분산 맵 상태 결과를 기록하는 Amazon S3 위치를 지정합니다.

    중요

    맵 실행 결과를 내보내는 데 사용하는 Amazon S3 버킷이 동일한 버킷에 있는지 확인하십시오. AWS 계정 그리고 AWS 리전 스테이트 머신으로 사용하세요. 그렇지 않으면 상태 시스템 실행이 실패하고 States.ResultWriterFailed 오류가 표시됩니다.

필수 필드 구성하기:
  1. Process data 상태를 선택하고 구성 탭에서 다음을 수행합니다.

    1. 처리 모드분산을 선택합니다.

    2. 항목 소스의 경우 Amazon S3를 선택한 다음 S3 항목 소스 드롭다운 목록에서 S3의 CSV 파일을 선택합니다.

    3. CSV파일의 Amazon S3 위치를 지정하려면 다음과 같이 하십시오.

      1. S3 객체의 드롭다운 목록에서 버킷 및 키 입력을 선택합니다.

      2. 버킷에 CSV 파일이 들어 있는 Amazon S3 버킷의 이름을 입력합니다. 예: amzn-s3-demo-source-bucket.

      3. Key에는 CSV 파일을 저장한 Amazon S3 객체의 이름을 입력합니다. 또한 이 필드에 CSV 파일 이름을 지정해야 합니다. 예: csvDataset/ratings.csv.

    4. CSV파일의 경우 열 헤더의 위치도 지정해야 합니다. 이렇게 하려면 추가 구성을 선택한 다음 CSV헤더 위치에 대해 CSV 파일의 첫 번째 행이 헤더인 경우 기본 선택인 첫 번째 행을 유지합니다. 그렇지 않으면 지정을 선택하여 상태 시스템 정의 내에 헤더를 지정합니다. 자세한 내용은 ReaderConfig 단원을 참조하십시오.

    5. 하위 실행 유형Express를 선택합니다.

  2. 내보내기 위치에서 맵 실행 결과를 특정 Amazon S3 위치로 내보내도록 Map 상태의 출력을 Amazon S3로 내보내기를 선택합니다.

  3. 다음을 따릅니다.

    1. S3 버킷의 드롭다운 목록에서 버킷 이름 및 접두사 입력을 선택합니다.

    2. 버킷에 결과를 내보낼 Amazon S3 버킷의 이름을 입력합니다. 예: mapOutputs.

    3. 접두사에 결과를 저장할 폴더 이름을 입력합니다. 예: resultData.

3단계: 추가 옵션 구성

Distributed Map 상태에 필요한 설정 외에도 다른 옵션도 지정할 수 있습니다. 여기에는 하위 워크플로의 최대 동시 실행 수와 Map 상태 결과를 내보낼 위치가 포함될 수 있습니다.

  1. Process data 상태를 선택합니다. 그런 다음 항목 소스에서 추가 구성을 선택합니다.

  2. 다음을 따릅니다.

    1. 항목 수정을 선택하여 각 하위 워크플로 실행에 대한 사용자 지정 JSON 입력을 지정합니다. ItemSelector

    2. 다음 JSON 입력을 입력합니다.

      { "index.$": "$$.Map.Item.Index", "value.$": "$$.Map.Item.Value" }

      사용자 지정 입력을 만드는 방법은 ItemSelector (지도) 섹션을 참조하세요.

  3. 런타임 설정동시성 한도 설정에서 Distributed Map 상태가 시작할 수 있는 하위 워크플로의 동시 실행 수를 지정합니다. 예를 들면 100를 입력합니다.

  4. 브라우저에서 새 창이나 탭을 열고 4단계: Lambda 함수 구성의 설명대로 이 워크플로에서 사용할 Lambda 함수의 구성을 완료합니다.

4단계: Lambda 함수 구성

중요

Lambda 함수가 동일한 함수에 있는지 확인하십시오. AWS 리전 스테이트 머신으로 사용하세요.

  1. Lambda 콘솔을 열고 함수 생성을 선택합니다.

  2. 함수 생성 페이지에서 처음부터 새로 작성을 선택합니다.

  3. 기본 정보 섹션에서 Lambda 함수를 구성합니다.

    1. [함수 이름]에 distributedMapLambda을 입력합니다.

    2. 런타임으로 Node.js 를 선택합니다.

    3. 모든 기본 선택 항목을 그대로 두고 함수 생성을 선택합니다.

    4. Lambda 함수를 생성한 후 페이지 오른쪽 상단에 표시된 함수의 Amazon 리소스 이름 ARN () 을 복사합니다. 워크플로 프로토타입에 이를 제공해야 합니다. 다음은 예제입니다. ARN

      arn:aws:lambda:us-east-2:123456789012:function:distributedMapLambda
  4. Lambda 함수의 다음 코드를 복사하여 페이지의 코드 소스 섹션에 붙여넣습니다. distributedMapLambda

    exports.handler = async function(event, context) { console.log("Received Input:\n", event); return { 'statusCode' : 200, 'inputReceived' : event //returns the input that it received } };
  5. 배포(Deploy)를 선택합니다. 함수가 배포되면 테스트를 선택하여 Lambda 함수 출력을 확인합니다.

5단계: 워크플로 프로토타입 업데이트

Step Functions 콘솔에서 Lambda 함수를 추가하도록 워크플로를 업데이트합니다. ARN

  1. 워크플로 프로토타입을 만든 탭이나 창으로 돌아갑니다.

  2. 프로세스 CSV 데이터 단계를 선택하고 구성 탭에서 다음을 수행합니다.

    1. 통합 유형최적화를 선택합니다.

    2. 함수 이름에 Lambda 함수 이름을 입력합니다. 나타나는 드롭다운 목록에서 함수를 선택하거나, Enter 함수 이름을 선택하고 Lambda 함수를 제공하십시오. ARN

6단계: 자동 생성된 Amazon States Language 정의 검토 및 워크플로 저장

작업흐름 탭에서 상태를 끌어 캔버스에 놓으면 Workflow Studio에서 워크플로의 Amazon States Language 정의를 실시간으로 자동 작성합니다. 필요에 따라 이 정의를 편집할 수 있습니다.

  1. (선택 사항) 검사기 패널 패널에서 정의를 선택하고 상태 시스템 정의를 봅니다.

    작은 정보

    워크플로 스튜디오에서도 ASL 정의를 볼 수 있습니다코드 편집기. 코드 편집기에서 워크플로의 ASL 정의를 편집할 수도 있습니다.

    다음 예제 코드에서는 워크플로에 자동으로 생성된 Amazon States Language 정의를 보여줍니다.

    { "Comment": "Using Map state in Distributed mode", "StartAt": "Process data", "States": { "Process data": { "Type": "Map", "MaxConcurrency": 100, "ItemReader": { "ReaderConfig": { "InputType": "CSV", "CSVHeaderLocation": "FIRST_ROW" }, "Resource": "arn:aws:states:::s3:getObject", "Parameters": { "Bucket": "amzn-s3-demo-source-bucket", "Key": "csvDataset/ratings.csv" } }, "ItemProcessor": { "ProcessorConfig": { "Mode": "DISTRIBUTED", "ExecutionType": "EXPRESS" }, "StartAt": "Process CSV data", "States": { "Process CSV data": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "OutputPath": "$.Payload", "Parameters": { "Payload.$": "$", "FunctionName": "arn:aws:lambda:us-east-2:123456789012:function:distributedMapLambda" }, "End": true } } }, "Label": "Processdata", "End": true, "ResultWriter": { "Resource": "arn:aws:states:::s3:putObject", "Parameters": { "Bucket": "mapOutputs", "Prefix": "resultData" } }, "ItemSelector": { "index.$": "$$.Map.Item.Index", "value.$": "$$.Map.Item.Value" } } } }
  2. 상태 시스템 이름을 지정합니다. 이렇게 하려면 기본 상태 머신 이름 옆에 있는 편집 아이콘을 선택합니다 MyStateMachine. 그런 다음 상태 머신 구성에서 상태 머신 이름 상자에 이름을 지정합니다.

    이 튜토리얼에서는 이름 DistributedMapDemo를 입력합니다.

  3. (선택 사항) 상태 머신 구성에서 상태 시스템 유형 및 실행 역할과 같은 기타 워크플로 설정을 지정합니다.

    이 자습서의 경우 상태 머신 구성의 모든 기본 선택 항목을 그대로 둡니다.

  4. 역할 생성 확인 대화 상자에서 확인을 선택하여 계속합니다.

    역할 설정 보기를 선택하여 상태 머신 구성으로 돌아갈 수도 있습니다.

    참고

    Step IAM Functions가 생성하는 역할을 삭제하면 Step Functions에서 해당 역할을 나중에 다시 생성할 수 없습니다. 마찬가지로 역할을 수정하는 경우 (예: IAM 정책의 보안 주체에서 Step Functions를 제거하는 경우) Step Functions는 나중에 원래 설정을 복원할 수 없습니다.

7단계: 상태 시스템 실행

실행은 워크플로를 실행하여 작업을 수행하는 상태 시스템의 인스턴스입니다.

  1. DistributedMapDemo페이지에서 실행 시작을 선택합니다.

  2. 실행 시작 대화 상자에서 다음을 수행합니다.

    1. (선택 사항) 생성된 기본값을 재정의하려면 사용자 지정 실행 이름을 입력합니다.

      ASCII비이름 및 로깅

      Step Functions는 ASCII -자가 아닌 문자를 포함하는 상태 머신, 실행, 액티비티 및 레이블의 이름을 허용합니다. CloudWatchAmazon에서는 이러한 문자를 사용할 수 없으므로 지표를 추적할 수 있도록 ASCII 문자만 사용하는 것이 좋습니다 CloudWatch.

    2. (선택 사항) 입력 상자에 워크플로를 실행하는 데 필요한 JSON 형식으로 입력 값을 입력합니다.

    3. 실행 시작을 선택합니다.

    4. Step Functions 콘솔은 실행 ID가 제목인 페이지로 이동합니다. 이 페이지를 실행 세부 정보 페이지라고 합니다. 실행이 진행되는 동안 또는 완료된 후에 이 페이지에서 실행 결과를 검토할 수 있습니다.

      실행 결과를 검토하려면 그래프 보기에서 개별 상태를 선택한 다음 단계 세부 정보 창에서 개별 탭을 선택하여 입력, 출력 및 정의가 포함된 각 상태의 세부 정보를 각각 봅니다. 실행 세부 정보 페이지에서 볼 수 있는 실행 정보에 대한 자세한 내용은 실행 세부 정보 개요 섹션을 참조하세요.

    예를 들어 Map 상태를 선택한 다음 맵 실행을 선택하여 맵 실행 세부 정보 페이지를 엽니다. 이 페이지에서 Distributed Map 상태의 모든 실행 세부 정보와 이 상태가 시작된 하위 워크플로 실행을 볼 수 있습니다. 이 페이지에 대한 자세한 내용은 맵 런 보기 섹션을 참조하세요.