이야기박스

AWS SNS & AWS Athena 본문

Computer & Data/Cloud Platform

AWS SNS & AWS Athena

박스님 2019. 8. 14. 12:34
반응형

# 개요

AWS Glue 작업을 하면서 추가적으로 사용했던 서비스들을 간략하게 정리하기 위한 포스팅입니다.
AWS Athena는 S3에 적재된 Parquet를 읽기 위하여 사용하였고 AWS SNS는 Glue에서 ETL 작업 도중, 에러가 발생하면 알람을 받기 위하여 구성하였습니다.

# AWS SNS ; Amazon Simple Notification Service

AWS의 메시징 서비스 중 하나입니다. 문서를 보니 Scale In/Out도 자동으로 지원하는 듯하네요.
사용방법은 더욱 간단합니다.
## IAM Role 설정
우선 Trust Relationships에 SNS.amazonaws.com 등록이 필요합니다.
이후, AWS SNS 토픽을 생성하려면 다음과 같은 권한들이 필요합니다.

  • SNS Publish Permission
  • Cloudwatch Logs Create
  • Cloudwatch Put Permission

## Topic 생성 후, 구독 등록
Topic은 위에서 생성한 IAM Role을 이용하여 생성 가능합니다.
토픽이 생성 완료된다면 구독을 등록하면 작업이 완료됩니다.

# AWS Athena

Presto 기반의 표준 SQL을 지원하는 대화식 쿼리 서비스입니다. 서버리스 기반으로 완전 관리형 서비스이고요.
AWS S3의 데이터를 쿼리 하기 위하여 사용하게 되었습니다.

## Data Catalog
Athena에서 구성한 데이터 카탈로그는 AWS Glue의 데이터 카탈로그와 통합되기 때문에, Glue를 이용한다면 데이터 카탈로그를 손쉽게 관리할 수 있습니다.

## JDBC 연결
Athena Simba JDBC 설치를 진행 한 후, 가이드에 따라 작업을 진행하면 됩니다.
커넥션 포맷은 다음과 같은 형식으로 이루어집니다.


테스트 샘플 코드입니다.

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

/**
* @author Jin Won Park, oringnam
* @since 2019-02-22
*/
public class AthenaJdbcTest {

   private static Connection getConnection() throws ClassNotFoundException, SQLException {
       Class.forName("com.simba.athena.jdbc.Driver");

       Properties info = new Properties();
       // AWSAccessKey
       info.put("User", "testUser");
       // AWSSecretAccessKey
       info.put("Password", "testPassword");
       info.put("S3OutputLocation", "s3://aws-athena-query-results-*-us-east-1/jdbc_test/");

       Connection connection = DriverManager.getConnection("jdbc:awsathena://AwsRegion=us-east-1;", info);

       return connection;
   }

   public static void main(String[] args) throws SQLException, ClassNotFoundException {
       System.out.println("Athena Jdbc Test Start !!");
       Connection connection = getConnection();

       Statement preparedStatement = connection.createStatement();
       ResultSet resultSet = preparedStatement.executeQuery("SELECT * FROM \"spec_test_db\".\"test_table\" limit 10;");

       while (resultSet.next()) {
           Integer id = resultSet.getInt("id");
           String deviceId = resultSet.getString("device_id");

           System.out.println("id : " + id + " , device id : " + deviceId);
       }
   }
}


## ODBC 연결
AWS Athena ODBC Driver Link에 들어가서 OS 환경에 맞는 드라이버 설치를 진행합니다.
아래에 정리한 연결 방법은 윈도우에서 제가 직접 테스트 한 내용입니다.
1. ODBC 데이터 원본 실행

2. 시스템 DSN에서 설치된 드라이버 확인

3. 설정
'구성' 탭을 클릭하여 Athena 설정을 진행합니다.

  • Schema : DataCatalog의 Database명을 명시
  • Workgroup : Athena에 지정되어 있는 작업 그룹 (default : primary)
  • S3 Output Location : 쿼리 결과를 저장해두는 S3 경로
  • Encryption Options
  • Authentication Options

    • S3 접속을 위한 유저 정보

      • AWS_ACCESS_KEY_ID

      • AWS_SECRET_ACCESS_KEY

    • Session Token : temporary credentials을 사용하는 경우

반응형

'Computer & Data > Cloud Platform' 카테고리의 다른 글

GCP. Dataproc 간단한 리뷰  (0) 2022.05.19
gsutil ; change directory path  (1) 2020.06.11
AWS Glue 실전  (0) 2019.08.13
GCP; App Engine  (0) 2019.05.30
GCP; Cloud Pub/Sub  (0) 2019.05.23