본 핸즈온에서 만드는 구조도
본 핸즈온에서는 서울과 싱가폴 리전을 사용합니다.
- 분석(Athena, QuickSight)과 개발환경(Cloud9)은 싱가폴(ap-southeast-1) 리전을 사용합니다.
- 데이터레이크 파이프라인(Lambda, APIGateway, CloudWatch, XRay, DynamoDB, SNS, SQS)은 서울(ap-northeast-2) 리전을 사용합니다.
- S3, IAM 도 사용 중이나 아시다시피 리전에 구애받지 않습니다.
- 개발환경 설정(IAM, Cloud9)
- geoserver 배포
- datalake 배포
- Athena 와 QuickSight 데이터 분석 맛보기
- Cleanup
- Cloud9 구성
- 계정 생성
- 계정 설정
-
Web Console을 열고, 우측 상단에 리전을
싱가포르(ap-southeast-1)
으로 선택 -
Service
에서Cloud9
을 입력 후 아래 목록을 클릭하거나, Cloud9 Console을 열어도 됩니다. -
Create Environment
클릭 -
Name
에awskrug
입력 후Next step
클릭 -
Create a new instance for environment (EC2)
Instance type
은t2.micro
선택 후Next step
클릭 -
Create environment
클릭
준비되는 동안 기다리면 브라우저에서 사용할 수 있는 통합 개발 환경(IDE)가 보입니다.
-
Web Console을 엽니다.
-
Service
에서IAM
을 입력 후 아래 목록을 클릭하거나, IAM Console을 열어도 됩니다. -
좌측 메뉴에서
Users
클릭 -
우측 상단 메뉴에서
Add user
클릭 -
Add user
화면에서 -
Add user
화면에서 -
Add user
화면에서Access key ID
를 복사한다.Secret access key
에Show
를 클릭하여 나온Secrect access key
를 복사
-
이전에 생성한
Cloud9
창으로 돌아가서, 우측 상단에 있는 기어모양 아이콘을 클릭 -
Preferences
대화상자가 나오면 좌측 메뉴에서AWS Settings
클릭 -
우측
AWS Settings
에서Credentials
항목에AWS managed temporary credentials:
를 체크(색이 바뀐다)
-
우측 상단에 있는 기어모양 아이콘을 클릭하여
Preferences
대화상자를 닫는다. -
하단의 터미널 창에서(안 보인다면
Alt+'T'
혹은Cmd +'T'
로 새 터미널 창을 열 수 있다)...아래와 같이 입력한다. 이후 작업은 계속 터미널을 사용한다.
# aws access key 설정 ec2-user:~/environment $ aws configure --profile datalake AWS Access Key ID []: 방금 생성한 access key 를 입력하세요 AWS Secret Access Key []: 방금 생성한 secrect access key 를 입력하세요 Default region name [ap-northeast-2]: ap-northeast-2 Default output format [json]: json ec2-user:~/environment $
# 파이썬 환경 설정 ec2-user:~/environment $ echo unset PYTHON_INSTALL_LAYOUT >> ~/.bash_profile # 설정을 적용합니다. ec2-user:~/environment $ source ~/.bash_profile
# environment 폴더에서
ec2-user:~/environment $ cd ~/environment
# 소스를 가지고 옵니다.
ec2-user:~/environment $ git clone https://github.com/awskrug/handson-labs-2018.git
Cloning into 'handson-labs-2018'...
...
- zappa, sls 설명
-
파이썬 환경 설정
$ cd ~/environment/handson-labs-2018/Serverless/3_serverless_datalake/2.geoserver/ $ python3 -m venv .venv $ . ./.venv/bin/activate # 프롬프트가 바뀝니다. # (.venv) ec2-user:~/environment/handson-labs-2018/Serverless/3_serverless_datalake/2.geoserver (develop) $ $ pip install -r requirements.txt ...
-
zappa 설정 변경
본인핸드폰번호
로 되어 있는 부분을 본인 것으로 변경해서 입력합니다.# 편집기를 열고 본인 핸드폰번호 부분을 변경합니다. $ nano zappa_settings.json { "dev": { "aws_region": "ap-northeast-2", "django_settings": "geoserver.settings", "project_name": "geoserver", "profile_name":"datalake", "runtime": "python3.6", "s3_bucket": "zappa-datalake-server-본인핸드폰번호", "extra_permissions": [ { // Attach any extra permissions to this policy. "Effect": "Allow", "Action": [ "*" ], // AWS Service ARN "Resource": "*" } ], "exclude": [ ".git", ".idea", ".venv" ], "environment_variables": { "DEBUG": "True" }, "xray_tracing": true, "keep_warm": false, "lambda_description": "자료 입력용 장고" } } $ # Ctrl + X 누르고 Save modified buffer (ANSWERING "No" WILL DESTROY CHANGES) ? 메시지가 나오면 Y 하면 저장한다.
-
zappa 배포
$ cd ~/environment/handson-labs-2018/Serverless/3_serverless_datalake/2.geoserver/ $ zappa deploy ...
-
API Gateway Console에 열고,
- 데이터레이크 설명
-
serverless 도구 설명
$ cd ~/environment/handson-labs-2018/Serverless/3_serverless_datalake/3.datalake/ # serverless 및 플러그인 설치 $ npm install -g serverless $ npm install
-
serverless.yml 설명
$ cd ~/environment/handson-labs-2018/Serverless/3_serverless_datalake/3.datalake/ # 배포 $ cp ./templates/1_csv2shp.yml ./serverless.yml $ sls deploy
-
serverless.yml 설명
$ cd ~/environment/handson-labs-2018/Serverless/3_serverless_datalake/3.datalake/ # 배포 $ cp ./templates/2_shp2metadata.yml ./serverless.yml $ sls deploy
-
serverless.yml 설명
$ cd ~/environment/handson-labs-2018/Serverless/3_serverless_datalake/3.datalake/ # 배포 $ cp ./templates/3_shp2json.yml ./serverless.yml $ sls deploy
- 구성된 데이터레이크를 확인해 봅시다.
geoserver
에서1. 샘플 파일을 다운로드 받으세요.
메뉴에서샘플 파일 다운로드
버튼을 클릭합니다.- 관측 데이터 파일인
upload_sample.zip
을 다운로드 받습니다. 이 파일은 관측 데이터 파일들을 zip 형식으로 묶어 놓은 것입니다. - 다운 로드 받은
upload_sample.zip
파일을 풀어 놓습니다.
- 관측 데이터 파일인
2. GIS DataLake를 ...
메뉴에서 에서- 풀린 관측 데이터 파일의 csv 폴더에서 .csv 파일들을
csv 파일 업로드
를 클릭해서 모두 업로드합니다. - 풀린 관측 데이터 파일의 shp_all 폴더에서 .shp 파일들을
shp 파일 업로드
를 클릭해서 모두 업로드 합니다.
- 풀린 관측 데이터 파일의 csv 폴더에서 .csv 파일들을
- 실제 데이터가 처리되는 모습은
3. 전체 진행 상황을 확인해보세요
에x-ray 보러가기
나shp 메타데이터 보러가기
버튼을 클릭하여 알 수 있습니다.
- 데이터레이크 파이프라인으로 처리된 데이터를 연동하여
- SQL 형식으로 ETL(Extraction, Transformation, and Loading) 수행
-
Web Console을 열고,
우측 상단에 리전을
싱가포르(ap-southeast-1)
으로 선택합니다. -
Service
에서Athena
를 입력후, 아래 목록을 클릭하거나,Athena Console 열어도 됩니다.
-
Get Started
클릭 -
콘솔이 나오면, 좌측
Database
패널 아래Create Table
클릭검은 팝업 대화상자에서
Manually
클릭 -
Databases > Add table
대화상자가 나옵니다.-
Step 1: Name & Location
단계입니다.-
Database
에Create a new database
선택 -
아래에
MyDatabase
입력란에datalake
이름 입력 -
Table Name
에moodoong
입력 -
Location of Input Data Set
에 출력 결과물이 있는 S3 버킷 주소를 입력. 주소 값은 꼭/
로 끝나야 합니다. 예를 들어,s3://datalakes3/
와 같이 말입니다.여기 들어갈 S3 버킷 주소값은
geoserver
에서2. GIS DataLake를 단계별로 구축하고 직접 파일을 업로드 하여 결과를 확인해보세요
에서csv 파일 업로드
버튼을 클릭 후 나오는 화면의 맨 아래json
을 클릭하면 나오는 링크입니다.단, 이전에
geoserver
를 통해 관측 데이터 파일을 입력하지 않았다면,Athena
에서 조회를 해도 아무 것도 볼 수 없습니다. 그러나, 편의상 json 디렉터리에 결과 파일을 올려 놓았으니, 파일들을 이 결과 S3 버킷에 직접 업로드하여 아래 과정을 진행하셔도 되겠습니다. S3 업로드 방법 참고(https://docs.aws.amazon.com/ko_kr/AmazonS3/latest/user-guide/upload-objects.html). -
모두 선택하였으면,
Next
클릭
-
-
Step 2: Data Format
단계입니다. -
Step 3: Columns
단계입니다. -
Step 4: Partitions
단계입니다. -
화면이 전환되고,
datalake
데이터베이스의moodoong
이라는 테이블이 생성됩니다.
-
-
이제, JSON 형식으로 변경된 관측 정보는 Athena 의 table 형식으로 접근하여 SQL형식으로 질의(query) 가능할 수 있으며, 지리 공간 질의도 가능합니다(https://docs.aws.amazon.com/ko_kr/athena/latest/ug/geospatial-functions-list.html 참조).
-
이제 사용할 형식은 이전에
Step 3: Columns
단계에서 지정하였습니다. -
데이터 파이프라인을 통해 처리된 결과가 다음과 같은 컬럼을 key/value 를 갖는 JSON 형식으로 저장되었습니다.
필드 형식 비고 탐방로 string 구간 int 좌우 string 왼쪽에서 볼 수 있으면 L 오른쪽이면 R(출발지 기준) 종명 string 나무 이름 개화 int 1이면 꽃이 피었다. 0이면 안 피었다. 결실 int 1이면 결실하였다. 0이면 결실하지 않았다. 비고 string 경도 double geometry 위도 double geometry 고도 double geometry -
일단 테이블에 정보는 잘 있는지 확인해 봅시다. 우측 질의 창에 내용을 지우고, 다음을 입력해 봅시다.
SELECT * FROM moodoong LIMIT 10
테이블에서 10개 행을 뽑아서 보여 준 것입니다.
관측 데이터에 기록된 탐방로를 모두 찾아보도록 합시다.
SELECT "탐방로" FROM moodoong GROUP BY "탐방로" LIMIT 10
한글을 컬럼명으로 사용할 때에는 쌍따옴표("")로 묶어줍니다.
다음 정보도 추출해 보도록 합시다.
-
조사된 수목 종류
SELECT "종명" FROM moodoong GROUP BY "종명" LIMIT 10
"종명"으로 묶었습니다.
-
수목별 개체수 수량
SELECT "종명", COUNT("종명") AS "개체수" FROM moodoong GROUP BY "종명" ORDER BY "종명" LIMIT 10
AS
는 빼도 됩니다. -
단풍나무의 분포 고도
SELECT "고도" FROM moodoong WHERE "종명" = '단풍나무' GROUP BY "고도" ORDER BY "고도" DESC LIMIT 10
문자열은 작은 따옴표('')로 묶어줍니다.
-
특정종('단풍나무')을 자주 살펴 볼 수 있는 탐방로는?
SELECT * FROM ( SELECT "탐방로", COUNT("탐방로") AS "개체수" FROM moodoong WHERE "종명" ='단풍나무' GROUP BY "탐방로" ) t ORDER BY "개체수" DESC LIMIT 10
서브 쿼리를 사용했습니다.
-
특정종('단풍나무')을 고도 500m 이하에서 살펴볼 수 있는 탐방로는?
SELECT * FROM ( SELECT "탐방로", COUNT("탐방로") AS "개체수" FROM moodoong WHERE "종명" ='단풍나무' AND "고도" <= 500.0 GROUP BY "탐방로" ) t ORDER BY "개체수" DESC LIMIT 10
이외에도 지리 공간 함수를 이용하여 특정 지역을 대상으로 산불 피해 방지 등의 대책을 세우는 용도로도 쓰일 수 있겠습니다. 아무튼 다양하게 해볼 수 있게 되었습니다. 그러나, 글자만 나오니까 뭔가 허전합니다. 이제 QuickSight 에서 보여주도록 합시다.
-
QuickSight Console를 열거나,
Service
에서 QuickSight
을 입력 후 아래 목록을 클릭해도 됩니다.
-
Welcome to QuickSight
를 비롯한 안내 대화상자는Next
를 계속 클릭 후 사용토록 합니다. -
Sign up for QuickSight
를 클릭 -
QuickSight account 를 생성 합니다.
-
QuickSight account name
은awskrug
로 -
Notification email address
는 사용하는 e-mail 을 넣습니다. -
QuickSight capacity region
은Asia Pacific(Singapore)
로 -
Amazon Athena
를 체크 -
Amazon S3
를 체크하고,Choose S3 Buckets
한다. -
Finish
클릭
-
-
New analysis
를 클릭합니다.- 사용할 데이터 셋을 추가합니다.
-
New Dataset
을 클릭합니다. -
Create a Data Set
에서 datasource 로Athena
를 선택합니다.-
Data source name
에datalake
넣고, 하단의Validate
버튼을 클릭하면SSL is Enabled
로 변합니다. -
이후
Create data source
를 클릭 -
datalake
데이터베이스를 선택하고moodoong
테이블을 선택하고,Select
클릭 -
Import to SPICE for quicker analytics
를 선택만약 그림과 같에 가용 공간이 없을 경우는,
Directly query your data
선택 후Visualize
클릭단, 엄청 느리므로, 1.0 GB 당 0.25$ 이니 일단 구입하는 것도 권장
-
-
좌측 상단에
Data set
오른쪽에 연필 아이콘을 클릭하여 데이터 소스를 수정 -
Data sets in this analysis
에서moodoong
에서 우측 연필 아이콘을 클릭 -
Data source
수정 화면에서 죄측Fields
에New field
클릭 -
New calculated field
대화상자에서 고도를 100m 단위로 구분짓는고도등급
필드를 추가Calculated field name
에고도등급
입력Formula
에floor(고도/100)
입력Apply changes
클릭
-
경도
와위도
를 지형좌표 형식으로 변환합니다.
차트명(차트 종류)
- 자료 형식: 입력값
전체 수량(KPI)
- Value: 종명(Count)
- Group/Color: 탐방로
고도별등급별 분포비율(PIE)
- GroupColor: 고도등급
고도(LINE)
- X: 종명
- Value: 고도(avg)/고도(min)/고도(max)
탐방로별 분포 비율(PIE)
- Value: 종명(Count)
- Group/Color: 탐방로번호
탐방로별 수량(TABLE)
- GroupBy: 탐방로번호
- Value: 종명(Count)
고도별 분포(HITMAP)
- Rows: 고도등급
- Columns: 종명
- Values: 종명(Count)
지도별 분포(MAP, 추가함)
-
Geo: 경도,위도
-
Color: 탐방로번호,고도등급,개화,결실
차트의 색은 오른쪽 상단에 Format Visual 해서 Chart Color 나오는데 수정을 할 수 있습니다.
- 지금 작성한 역순으로 리소스를 제거합니다. 순서가 중요합니다!
-
QuickSight 삭제
-
N.Virgina열고, Account Settings 맨 아래
Unsubscribe
를 클릭 -
확인 화면에서 한번 더
Unsubscribe
를 클릭 -
이후 QuickSight 에서 추가된 IAM role 삭제를 위해 복사하고, 이후에 모두 삭제
-
-
Athena 삭제
datalake
Database 삭제-
datalake
선택 후,Drop
클릭
-
-
Datalake 삭제
-
Cloud9 에서 새 터미널을 열고,
$ cd ~/environment/handson-labs-2018/Serverless/3_serverless_datalake/3.datalake/ # 삭제 $ cp ./templates/3_shp2json.yml ./serverless.yml $ sls remove $ cp ./templates/2_shp2metadata.yml ./serverless.yml $ sls remove $ cp ./templates/1_csv2shp.yml ./serverless.yml $ sls remove
-
-
geoserver 삭제
-
geoserver
웹을 열고,5. 실습을 완료...
에S3 초기화
버튼을 클릭 -
Cloud9 에서 새 터미널을 열고,
$ cd ~/environment/handson-labs-2018/Serverless/3_serverless_datalake/2.geoserver/ $ . ./.venv/bin/activate $ zappa undeploy -y ...
-
-
DynamoDB 삭제
- DynamoDB Console 에서
gis-datalake-shp-metadata
체크 후Delete table
클릭- 확인 대화상자에서도
Delete
클릭
- 확인 대화상자에서도
- DynamoDB Console 에서
-
Cloud9 삭제
- Cloud9 console 에서
awskrug
삭제
- Cloud9 console 에서
-
S3 버킷 삭제
-
IAM 삭제
- IAM console에서
awskrug
삭제
- IAM console에서