Athena를 사용하여 AWS Glue 대상 테이블의 데이터를 최신 상태로 유지 - AWS Step Functions

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

Athena를 사용하여 AWS Glue 대상 테이블의 데이터를 최신 상태로 유지

이 샘플 프로젝트는 AWS Glue Catalog로 대상 테이블을 쿼리하여 현재 데이터를 가져온 다음 Amazon Athena를 사용하여 다른 소스의 새 데이터로 업데이트하는 방법을 보여줍니다.

이 프로젝트에서는 Step Functions 상태 머신이 AWS Glue Catalog를 호출하여 Amazon S3 버킷에 대상 테이블이 있는지 확인합니다. 테이블이 없으면 새 테이블이 생성됩니다. 그런 다음 Step Functions에서 Athena 쿼리를 실행하여 다른 데이터 소스의 대상 테이블에 행을 추가합니다. 먼저 대상 테이블을 쿼리하여 최신 날짜를 가져온 다음 최신 데이터의 소스 테이블을 쿼리하여 대상 테이블에 삽입합니다.

1단계: 상태 시스템 만들기 및 리소스 프로비저닝

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

  2. 검색 상자에 Keep data up to date를 입력한 다음 반환된 검색 결과에서 데이터를 최신 상태로 유지를 선택합니다.

  3. 다음을 선택하여 계속 진행합니다.

  4. Step Functions는 선택한 샘플 프로젝트에 AWS 서비스 사용된 항목을 나열합니다. 또한 샘플 프로젝트의 워크플로 그래프도 보여줍니다. 이 프로젝트를 사용자 프로젝트에 AWS 계정 배포하거나 자체 프로젝트를 빌드하기 위한 출발점으로 사용하세요. 진행하려는 방식에 따라 데모 실행 또는 이를 기반으로 구축을 선택합니다.

    이 샘플 프로젝트는 다음 리소스를 배포합니다.

    • Amazon S3 버킷

    • Amazon Athena 쿼리

    • AWS Glue Data Catalog 직접 호출

    • AWS Step Functions 상태 머신

    • 관련된 AWS Identity and Access Management(IAM) 역할

    다음 이미지에서는 데이터를 최신 상태로 유지 샘플 프로젝트의 워크플로 그래프를 보여줍니다.

    데이터를 최신 상태로 유지 샘플 프로젝트의 워크플로 그래프입니다.
  5. 템플릿 사용을 선택하여 계속 선택합니다.

  6. 다음 중 하나를 수행합니다.

    • 빌드를 선택한 경우 Step Functions는 워크플로 프로토타입을 생성하지만 워크플로 정의에 리소스를 배포하지는 않으므로 워크플로 프로토타입을 계속 구축할 수 있습니다.

      Workflow Studio에서는 워크플로 프로토타입에 상태를 추가할 수 있습니다. 디자인 모드 또는 로 전환하여 통합 코드 코드 모드 편집기를 사용하여 Step Functions 콘솔에서 상태 머신의 Amazon States Language (ASL) 정의를 편집할 수 있습니다.

      중요

      워크플로를 실행하기 전에 샘플 프로젝트에 사용된 리소스의 Amazon Resource Name (ARN) 자리 표시자를 업데이트해야 할 수 있습니다.

    • 데모 실행을 선택한 경우 Step Functions는 템플릿을 사용하여 해당 AWS CloudFormation 템플릿의 AWS 리소스를 사용자에게 배포하는 읽기 전용 프로젝트를 만듭니다. AWS 계정코드 모드를 선택하여 스테이트 머신 정의를 볼 수 있습니다.

      [Deploy and run] 을 선택하여 프로젝트를 배포하고 리소스를 생성합니다.

      리소스 및 IAM 권한을 생성하는 데 배포하는 데 최대 10분이 걸릴 수 있습니다. 리소스를 배포하는 동안 AWS CloudFormation Stack ID 링크를 열어 프로비저닝되는 리소스를 확인할 수 있습니다.

      모든 리소스가 생성되고 나면 콘솔의 상태 시스템 페이지에서 프로젝트를 확인할 수 있습니다.

      중요

      CloudFormation 템플릿에서 사용되는 각 서비스에는 표준 요금이 적용될 수 있습니다.

2단계: 상태 시스템 실행

  1. 상태 시스템 페이지에서 샘플 프로젝트를 선택합니다.

  2. 샘플 프로젝트 페이지에서 실행 시작을 선택합니다.

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

    1. (선택 사항) 실행을 식별하기 위해 이름을 지정하거나 생성된 기본 실행 이름을 사용할 수 있습니다.

      참고

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

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

      데모 실행을 선택한 경우에는 실행 입력을 제공할 필요가 없습니다.

      참고

      배포한 데모 프로젝트에 미리 채워진 실행 입력 데이터가 포함되어 있는 경우 해당 입력을 사용하여 상태 시스템을 실행하세요.

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

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

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

예제 상태 머신 코드

이 샘플 프로젝트의 상태 머신은 해당 리소스에 파라미터를 직접 전달하여 Amazon S3 및 Amazon Athena와 통합됩니다. AWS Glue

이 예제 상태 머신을 살펴보면서 Step Functions가 Resource 필드의 Amazon 리소스 이름 (ARN) 에 연결하고 서비스에 Parameters 전달하여 Amazon S3와 Amazon Athena를 제어하는 방법을 살펴봅니다. AWS Glue API

다른 AWS 서비스를 제어하는 방법에 AWS Step Functions 대한 자세한 내용은 을 참조하십시오Step Functions와 다른 서비스 통합.

{ "Comment": "An example demonstrates how to use Athena to query a target table to get current data, then update it with new data from other sources.", "StartAt": "Get Target Table", "States": { "Get Target Table": { "Type": "Task", "Parameters": { "DatabaseName": "<GLUE_DATABASE_NAME>", "Name": "target" }, "Catch": [ { "ErrorEquals": [ "Glue.EntityNotFoundException" ], "Next": "Create Target Table" } ], "Resource": "arn:aws:states:::aws-sdk:glue:getTable", "Next": "Update Target Table" }, "Create Target Table": { "Resource": "arn:aws:states:::athena:startQueryExecution.sync", "Parameters": { "QueryString": "<ATHENA_QUERYSTRING>", "WorkGroup": "<ATHENA_WORKGROUP>" }, "Type": "Task", "Next": "Update Target Table" }, "Update Target Table": { "Resource": "arn:aws:states:::athena:startQueryExecution.sync", "Parameters": { "QueryString": "<ATHENA_QUERYSTRING>", "WorkGroup": "<ATHENA_WORKGROUP>" }, "Type": "Task", "End": true } } }

IAM예시

샘플 프로젝트에서 생성된 이 예제 AWS Identity and Access Management (IAM) 정책에는 스테이트 머신 및 관련 리소스를 실행하는 데 필요한 최소 권한이 포함되어 있습니다. IAM정책에 필요한 권한만 포함하는 것이 좋습니다.

AthenaStartQueryExecution

"Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "athena:startQueryExecution", "athena:stopQueryExecution", "athena:getQueryExecution", "athena:getDataCatalog" ], "Resource": [ "arn:aws:athena:us-east-2:123456789012:workgroup/stepfunctions-athena-sample-project-workgroup-26ujlyawxg", "arn:aws:athena:us-east-2:123456789012:datacatalog/*" ] }, { "Effect": "Allow", "Action": [ "s3:GetBucketLocation", "s3:GetObject", "s3:ListBucket", "s3:ListBucketMultipartUploads", "s3:ListMultipartUploadParts", "s3:AbortMultipartUpload", "s3:CreateBucket", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::*" ] }, { "Effect": "Allow", "Action": [ "glue:CreateDatabase", "glue:GetDatabase", "glue:GetDatabases", "glue:UpdateDatabase", "glue:DeleteDatabase", "glue:CreateTable", "glue:UpdateTable", "glue:GetTable", "glue:GetTables", "glue:DeleteTable", "glue:BatchDeleteTable", "glue:BatchCreatePartition", "glue:CreatePartition", "glue:UpdatePartition", "glue:GetPartition", "glue:GetPartitions", "glue:BatchGetPartition", "glue:DeletePartition", "glue:BatchDeletePartition" ], "Resource": [ "arn:aws::glue:us-east-2:123456789012:catalog", "arn:aws::glue:us-east-2:123456789012:database/*", "arn:aws::glue:us-east-2:123456789012:table/*", "arn:aws::glue:us-east-2:123456789012:userDefinedFunction/*" ] }, { "Effect": "Allow", "Action": [ "lakeformation:GetDataAccess" ], "Resource": [ "*" ] } ] }

Step Functions를 다른 AWS 서비스와 함께 사용할 IAM 때 구성하는 방법에 대한 자세한 내용은 을 참조하십시오Step Functions가 통합 서비스를 위한 IAM 정책을 생성하는 방법.