1. 개요/소개
웹, 애플리케이션 서버, 데이터베이스로 구성된 다중 계층 애플리케이션은 웹 개발의 기반이 되고 많은 웹사이트의 출발점이지만 성공하면 확장성, 통합, 민첩성과 관련된 문제가 발생하는 경우가 많습니다. 예를 들어 데이터를 실시간으로 처리하고 여러 주요 비즈니스 시스템에 배포하려면 어떻게 해야 하나요? 이러한 문제가 인터넷 규모의 애플리케이션에 대한 요구와 함께 분산 메시징 시스템에 대한 필요성을 불러일으키고 데이터 파이프라인을 사용하여 복원력이 우수한 실시간 시스템을 구현하는 아키텍처 패턴이 생겨났습니다. 따라서 분산 메시징 시스템에 실시간 데이터를 게시한 다음 데이터 파이프라인을 빌드하는 방법을 이해하는 것은 개발자와 설계자 모두에게 중요한 기술입니다.
빌드할 항목
이 Codelab에서는 사물 인터넷 (IoT) 기기에서 시작하여 메시지 큐를 활용하여 데이터를 수신하고 전달하며 서버리스 기능을 활용하여 데이터를 데이터 웨어하우스로 옮긴 후 정보를 표시하는 대시보드를 만드는 날씨 데이터 파이프라인을 빌드합니다. IoT 기기에는 날씨 센서가 있는 Raspberry Pi가 사용되며 Google Cloud Platform의 여러 구성요소가 데이터 파이프라인을 형성합니다. Raspberry Pi를 빌드하는 것은 이 Codelab의 선택적 부분이며 스트리밍 날씨 데이터는 스크립트로 대체할 수 있습니다.
이 Codelab의 단계를 완료하면 온도, 습도, 이슬점, 기압을 표시하는 대시보드에 데이터를 제공하는 스트리밍 데이터 파이프라인이 생성됩니다.
학습할 내용
- Google Pub/Sub 사용 방법
- Google Cloud 함수를 배포하는 방법
- Google BigQuery 활용 방법
- Google 데이터 스튜디오를 사용하여 대시보드를 만드는 방법
- 또한 IoT 센서를 구축하면 Google Cloud SDK를 활용하는 방법과 Google Cloud Platform에 대한 원격 액세스 호출을 보호하는 방법도 배울 수 있습니다.
필요한 항목
- Google Cloud Platform 계정 Google Cloud Platform의 신규 사용자에게는 $300의 무료 체험판이 제공됩니다.
샘플 데이터와 스크립트를 활용하는 대신 이 Codelab의 IoT 센서 부분을 빌드하려면 다음 항목도 필요합니다 ( 여기에서 전체 키트 또는 개별 부품으로 주문할 수 있음).
- 전원 공급 장치, SD 메모리 카드, 케이스가 있는 Raspberry Pi Zero W
- USB 카드 리더
- USB 허브 (키보드와 마우스를 Raspberry Pi의 단독 USB 포트에 연결할 수 있도록 함)
- 암-암 브레드보드 전선
- GPIO 해머 헤더
- BME280 센서
- 납땜 인두와 땜납
또한 HDMI 입력, HDMI 케이블, 키보드, 마우스가 있는 컴퓨터 모니터 또는 TV에 액세스할 수 있다고 가정합니다.
2. 설정
자습형 환경 설정
아직 Google 계정(Gmail 또는 G Suite)이 없으면 계정을 만들어야 합니다. 이미 Google 계정을 가지고 있는지 여부에 관계없이 $300 무료 평가판을 이용하세요.
Google Cloud Platform 콘솔 ( console.cloud.google.com)에 로그인합니다. 이 실습에서 기본 프로젝트('My First Project')를 사용하거나 새 프로젝트를 만들 수 있습니다. 새 프로젝트를 만들려면 리소스 관리 페이지를 사용할 수 있습니다. 프로젝트 ID는 모든 Google Cloud 프로젝트에서 고유한 이름이어야 합니다(아래에 표시된 이름은 이미 사용되었으므로 사용할 수 없음). 나중에 필요하므로 프로젝트 ID(예: 프로젝트 ID는 _____)를 기록해 둡니다.
이 Codelab을 실행하는 데에는 많은 비용이 들지 않지만 더 많은 리소스를 사용하기로 결정하거나 계속 실행하면 비용이 더 많이 들 수 있습니다. Codelab 끝부분의 정리 섹션을 진행해야 합니다.
3. BigQuery 테이블 만들기
BigQuery는 확장성이 뛰어난 서버리스 저비용 기업용 데이터 웨어하우스로, IoT 기기에서 스트리밍되는 데이터를 저장하는 동시에 분석 대시보드에서 정보를 쿼리할 수 있도록 허용하는 데 이상적인 옵션입니다.
모든 IoT 날씨 데이터를 저장할 테이블을 만들어 보겠습니다. Cloud 콘솔에서 BigQuery를 선택합니다. 이렇게 하면 BigQuery가 새 창에서 열립니다. 원래 창은 나중에 다시 액세스해야 하므로 닫지 마세요.
프로젝트 이름 옆에 있는 아래쪽 화살표 아이콘을 클릭한 다음 '새 데이터 세트 만들기'를 선택합니다.
데이터 세트의 이름으로 'weatherData'를 입력하고 저장할 위치를 선택한 다음 '확인'을 클릭합니다.
데이터 세트 옆에 있는 '+' 기호를 클릭하여 새 테이블을 만듭니다.
소스 데이터에서 빈 테이블 만들기를 선택합니다. 대상 테이블 이름에 weatherDataTable을 입력합니다. 스키마에서 필드 추가 버튼을 클릭하여 총 9개의 필드가 될 때까지 반복합니다. 아래와 같이 필드를 채우고 각 필드에 적절한 유형을 선택합니다. 모든 작업이 완료되면 테이블 만들기 버튼을 클릭합니다.
다음과 같은 결과가 표시됩니다.
이제 날씨 데이터를 수신할 수 있는 데이터 웨어하우스가 설정되었습니다.
4. Pub/Sub 주제 만들기
Cloud Pub/Sub는 스트림 분석 및 이벤트 기반 컴퓨팅 시스템에 사용되는 간단하고도 안정적인 확장형 기반입니다. 따라서 수신되는 IoT 메시지를 처리한 후 다운스트림 시스템에서 이를 처리하도록 허용하는 데 적합합니다.
아직 BigQuery 창에 있다면 Cloud 콘솔로 다시 전환합니다. Cloud 콘솔을 닫은 경우 https://console.cloud.google.com으로 이동합니다.
Cloud 콘솔에서 Pub/Sub를 선택한 다음 주제를 선택합니다.
API 사용 설정 메시지가 표시되면 API 사용 설정 버튼을 클릭합니다.
'주제 만들기' 버튼을 클릭합니다.
주제 이름으로 'weatherdata'를 입력하고 '만들기'를 클릭합니다.
새로 생성된 주제가 표시됩니다.
이제 IoT 메시지를 게시하고 다른 프로세스에서 이러한 메시지에 액세스하도록 허용할 수 있는 Pub/Sub 주제가 준비되었습니다.
주제에 대한 안전한 게시
Google Cloud 콘솔 외부의 리소스(예: IoT 센서)에서 Pub/Sub 주제에 메시지를 게시하려는 경우 서비스 계정을 사용하여 액세스를 더 엄격하게 제어하고 신뢰 인증서를 만들어 연결의 보안을 유지해야 합니다.
Cloud 콘솔에서 IAM 및 관리자와 서비스 계정을 차례로 선택합니다.
'서비스 계정 만들기' 버튼을 클릭합니다.
역할 드롭다운에서 Pub/Sub 게시자 역할을 선택합니다.
서비스 계정 이름 (iotWeatherPublisher)을 입력하고 새 비공개 키 제공 체크박스를 선택합니다. 키 유형이 JSON으로 설정되어 있는지 확인한 다음 '만들기'를 클릭합니다.
보안 키가 자동으로 다운로드됩니다. 키는 하나뿐이므로 잃어버리지 않는 것이 중요합니다. 닫기를 클릭합니다.
서비스 계정이 생성되고 연결된 키 ID가 표시됩니다.
나중에 쉽게 키에 액세스할 수 있도록 Google Cloud Storage에 저장합니다. Cloud 콘솔에서 스토리지를 선택한 다음 브라우저를 선택합니다.
버킷 만들기 버튼을 클릭합니다.
스토리지 버킷의 이름 (모든 Google Cloud에서 전역적으로 고유한 이름이어야 함)을 선택하고 '만들기' 버튼을 클릭합니다.
자동으로 다운로드된 보안 키를 찾아 스토리지 버킷에 드래그/드롭하거나 업로드합니다.
키 업로드가 완료되면 Cloud Storage 브라우저에 표시됩니다.
나중에 사용할 수 있도록 스토리지 버킷 이름과 보안 키 파일 이름을 기록해 둡니다.
5. Cloud 함수 만들기
클라우드 컴퓨팅을 통해 어디서나 발생하는 이벤트에 대한 응답으로 로직을 주문형으로 가동할 수 있는 완전한 서버리스 컴퓨팅 모델이 가능해졌습니다. 이 실습에서는 메시지가 날씨 주제에 게시될 때마다 Cloud 함수가 시작되어 메시지를 읽은 후 BigQuery에 저장합니다.
Cloud Console에서 Cloud Functions를 선택합니다.
API 메시지가 표시되면 API 사용 설정 버튼을 클릭합니다.
함수 만들기 버튼을 클릭합니다.
이름 필드에 function-weatherPubSubToBQ를 입력합니다. 트리거로 Cloud Pub/Sub 주제를 선택하고 주제 드롭다운에서 weatherdata를 선택합니다. 소스 코드의 경우 인라인 편집기를 선택합니다. index.js 탭에서 시작하려면 다음 코드를 기존 코드 위에 붙여넣습니다. projectId, datasetId, tableId의 상수를 환경에 맞게 변경해야 합니다.
/**
* Background Cloud Function to be triggered by PubSub.
*
* @param {object} event The Cloud Functions event.
* @param {function} callback The callback function.
*/
exports.subscribe = function (event, callback) {
const BigQuery = require('@google-cloud/bigquery');
const projectId = "myProject"; //Enter your project ID here
const datasetId = "myDataset"; //Enter your BigQuery dataset name here
const tableId = "myTable"; //Enter your BigQuery table name here -- make sure it is setup correctly
const PubSubMessage = event.data;
// Incoming data is in JSON format
const incomingData = PubSubMessage.data ? Buffer.from(PubSubMessage.data, 'base64').toString() : "{'sensorID':'na','timecollected':'1/1/1970 00:00:00','zipcode':'00000','latitude':'0.0','longitude':'0.0','temperature':'-273','humidity':'-1','dewpoint':'-273','pressure':'0'}";
const jsonData = JSON.parse(incomingData);
var rows = [jsonData];
console.log(`Uploading data: ${JSON.stringify(rows)}`);
// Instantiates a client
const bigquery = BigQuery({
projectId: projectId
});
// Inserts data into a table
bigquery
.dataset(datasetId)
.table(tableId)
.insert(rows)
.then((foundErrors) => {
rows.forEach((row) => console.log('Inserted: ', row));
if (foundErrors && foundErrors.insertErrors != undefined) {
foundErrors.forEach((err) => {
console.log('Error: ', err);
})
}
})
.catch((err) => {
console.error('ERROR:', err);
});
// [END bigquery_insert_stream]
callback();
};
package.json 탭에서 자리표시자 코드 위에 다음 코드를 붙여넣습니다.
{
"name": "function-weatherPubSubToBQ",
"version": "0.0.1",
"private": true,
"license": "Apache-2.0",
"author": "Google Inc.",
"dependencies": {
"@google-cloud/bigquery": "^0.9.6"
}
}
실행할 함수가 'HelloWorld'로 설정되어 있으면 'subscribe'로 변경합니다. 만들기 버튼을 클릭합니다.
함수가 배포되었다고 표시되기까지 약 2분이 소요됩니다.
축하합니다. 지금까지 Functions를 통해 Pub/Sub를 BigQuery에 연결했습니다.
6. IoT 하드웨어 설정 (선택사항)
Raspberry Pi 및 센서 조립하기
핀이 7개를 초과하면 헤더를 7개 핀으로만 자릅니다. 헤더 핀을 센서 보드에 납땜합니다.
Raspberry Pi에 해머 헤더 핀을 조심스럽게 설치합니다.
SD 카드를 포맷하고 여기에 설명된 단계에 따라 NOOBS (New Of Box) 설치 프로그램을 설치합니다. SD 카드를 Raspberry Pi에 삽입하고 Raspberry Pi를 케이스에 넣습니다.
아래 다이어그램에 따라 브레드보드 전선을 사용하여 센서를 Raspberry Pi에 연결합니다.
Raspberry Pi 핀 | 센서 연결 |
핀 1(3.3V) | VIN |
핀 3(CPIO2) | SDI |
PIN 5 (GPIO3) | SCK |
핀 9 (접지) | GND |
미니 HDMI 커넥터를 사용하여 모니터, USB 허브를 사용하여 키보드/마우스, 마지막으로 전원 어댑터를 연결합니다.
Raspberry Pi 및 센서 구성
Raspberry Pi의 부팅이 완료되면 원하는 운영체제의 Raspbian을 선택하고 원하는 언어가 올바른지 확인한 다음 설치(창 왼쪽 상단의 하드 드라이브 아이콘)를 클릭합니다.
화면 오른쪽 상단의 Wi-Fi 아이콘을 클릭하고 네트워크를 선택합니다. 보안 네트워크인 경우 비밀번호 (사전 공유 키)를 입력합니다.
라즈베리 아이콘(화면 왼쪽 상단)을 클릭하고 환경설정과 Raspberry Pi 구성을 차례로 선택합니다. 인터페이스 탭에서 I2C를 사용 설정합니다. 현지화 탭에서 언어와 시간대를 설정합니다. 시간대를 설정한 후 Raspberry Pi를 재부팅합니다.
재부팅이 완료되면 터미널 아이콘을 클릭하여 터미널 창을 엽니다.
다음 명령어를 입력하여 센서가 올바르게 연결되었는지 확인합니다.
sudo i2cdetect -y 1
다음과 같은 결과가 표시됩니다. 77이 표시되는지 확인합니다.
Google Cloud SDK 설치
Google Cloud 플랫폼의 도구를 활용하려면 Raspberry Pi에 Google Cloud SDK를 설치해야 합니다. SDK에는 Google Cloud Platform을 관리하고 활용하는 데 필요한 도구가 포함되어 있으며 여러 프로그래밍 언어로 제공됩니다.
Raspberry Pi에서 터미널 창을 아직 열지 않았다면 Raspberry Pi에서 터미널 창을 열고 SDK 버전과 일치하는 환경 변수를 Raspberry Pi의 운영체제에 설정합니다.
export CLOUD_SDK_REPO="cloud-sdk-$(lsb_release -c -s)"
이제 SDK를 설치하라는 메시지가 표시될 때 설치 도구가 살펴볼 위치를 알 수 있도록 Google Cloud SDK 패키지가 저장된 위치를 추가합니다.
echo "deb http://packages.cloud.google.com/apt $CLOUD_SDK_REPO main" | sudo tee -a /etc/apt/sources.list.d/google-cloud-sdk.list
Raspberry Pi가 설치 중에 보안을 확인하고 콘텐츠를 신뢰하도록 Google의 패키지 저장소에서 공개 키를 추가합니다.
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
Raspberry Pi의 모든 소프트웨어가 최신 상태인지 확인하고 핵심 Google Cloud SDK를 설치합니다.
sudo apt-get update && sudo apt-get install google-cloud-sdk
'계속 진행하시겠어요?'라는 메시지가 표시되면 Enter 키를 누릅니다.
Python 패키지 관리자를 사용하여 tendo 패키지를 설치합니다. 이 패키지는 스크립트가 두 번 이상 실행되고 있는지 확인하고 날씨 스크립트에 적용하기 위해 설치됩니다.
pip install tendo
Python 패키지 관리자를 사용하여 Python용 Google Cloud PubSub 및 OAuth2 패키지가 설치되어 있고 최신 버전인지 확인합니다.
sudo pip install --upgrade google-cloud-pubsub
sudo pip install --upgrade oauth2client
Google Cloud SDK 초기화
SDK를 사용하면 Google Cloud에 원격으로 인증된 액세스를 할 수 있습니다. 이 Codelab에서는 보안 키를 Raspberry Pi에 쉽게 다운로드할 수 있도록 저장소 버킷에 액세스하는 데 사용됩니다.
Raspberry Pi의 명령줄에서 다음을 입력합니다.
gcloud init --console-only
'What will you like to log in (Y/n)?(로그인하시겠습니까(Y/n)?)?'라는 메시지가 표시되면 Enter 키를 누릅니다.
'브라우저에서 다음 링크로 이동하세요'라는 메시지와 함께 https://accounts.google.com/o/oauth로 시작하는 긴 URL이 표시되면 마우스로 URL 위로 마우스를 가져가 마우스 오른쪽 버튼을 클릭하고 'URL 복사'를 선택합니다. 그런 다음 웹브라우저 (화면 왼쪽 상단의 파란색 지구본 아이콘)를 열고 주소 표시줄을 마우스 오른쪽 버튼으로 클릭한 다음 '붙여넣기'를 클릭합니다.
로그인 화면이 표시되면 Google Cloud 계정과 연결된 이메일 주소를 입력하고 Enter 키를 누릅니다. 그런 다음 비밀번호를 입력하고 '다음' 버튼을 클릭합니다.
Google Cloud SDK가 Google 계정에 액세스하려고 한다는 메시지가 표시됩니다. 허용 버튼을 클릭합니다.
인증 코드가 표시됩니다. 마우스를 사용하여 강조 표시한 다음 마우스 오른쪽 버튼을 클릭하고 '복사'를 선택합니다. 터미널 창으로 돌아가서 커서가 'Enter verification code:' 오른쪽에 있는지 확인한 다음 마우스 오른쪽 버튼을 클릭하고 붙여넣기를 선택합니다. Enter 버튼을 누릅니다.
'사용할 클라우드 프로젝트 선택' 메시지가 표시되면 이 Codelab에 사용한 프로젝트 이름에 해당하는 번호를 입력한 후 Enter 키를 누릅니다.
Compute API를 사용 설정하라는 메시지가 표시되면 Enter 버튼을 눌러 사용 설정합니다. 그런 다음 Google Compute Engine 설정을 구성하라는 메시지가 표시됩니다. Enter 키를 누릅니다. 가능한 지역/영역 목록이 표시됩니다. 가까운 지역/영역을 선택하고 해당 번호를 입력한 다음 Enter 키를 누릅니다.
잠시 후 추가 정보가 표시됩니다. 이제 Google Cloud SDK가 구성되었습니다. 웹브라우저 창은 앞으로 필요하지 않으므로 닫아도 됩니다.
센서 소프트웨어 및 날씨 스크립트 설치하기
Raspberry Pi의 명령줄에서 입력/출력 핀에서 정보를 읽는 데 필요한 패키지를 클론합니다.
git clone https://github.com/adafruit/Adafruit_Python_GPIO
다운로드한 패키지 설치
cd Adafruit_Python_GPIO
sudo python setup.py install
cd ..
날씨 센서를 사용 설정하는 프로젝트 코드 클론
git clone https://github.com/googlecodelabs/iot-data-pipeline
센서 드라이버를 다운로드한 나머지 소프트웨어와 동일한 디렉터리에 복사합니다.
cd iot-data-pipeline/third_party/Adafruit_BME280
mv Adafruit_BME280.py ../..
cd ../..
다음을 입력하여 스크립트를 수정합니다.
nano checkWeather.py
프로젝트를 프로젝트 ID로, 주제를 Pub/Sub 주제의 이름으로 변경합니다 (이 Codelab의 설정 및 Pub/Sub 주제 만들기 섹션에 설명되어 있음).
sensorID, sensorZipCode, sensorLat, sensorLong 값을 원하는 값으로 변경합니다. 특정 위치 또는 주소의 위도 및 경도 값은 여기에서 확인할 수 있습니다.
필요한 변경사항을 모두 적용한 후 Ctrl-X를 눌러 nano 편집기를 종료합니다. Y를 눌러 확인합니다.
# constants - change to fit your project and location
SEND_INTERVAL = 10 #seconds
sensor = BME280(t_mode=BME280_OSAMPLE_8, p_mode=BME280_OSAMPLE_8, h_mode=BME280_OSAMPLE_8)
credentials = GoogleCredentials.get_application_default()
project="myProject" #change this to your Google Cloud project id
topic = "myTopic" #change this to your Google Cloud PubSub topic name
sensorID = "s-Googleplex"
sensorZipCode = "94043"
sensorLat = "37.421655"
sensorLong = "-122.085637"
보안 키 설치하기
'주제에 보안 게시' 섹션의 보안 키를 Raspberry Pi에 복사합니다.
SFTP 또는 SCP를 사용하여 로컬 머신에서 Raspberry Pi(/home/pi 디렉터리)로 보안 키를 복사한 경우 다음 단계를 건너뛰고 경로 내보내기로 바로 이동할 수 있습니다.
스토리지 버킷에 보안 키를 삽입한 경우 스토리지 버킷의 이름과 파일 이름을 기억해야 합니다. gsutil 명령어를 사용하여 보안 키를 복사합니다. 이 명령어는 Google Storage에 액세스할 수 있습니다(gsutil이라는 이름과 파일 경로가 gs://로 시작하는 이유). 아래 명령어에서 버킷 이름과 파일 이름을 사용하도록 변경해야 합니다.
gsutil cp gs://nameOfYourBucket/yourSecurityKeyFilename.json .
파일이 복사되고 작업이 완료되었다는 메시지가 표시됩니다.
Raspberry Pi의 명령줄에서 보안 키 경로를 내보냅니다 (파일 이름을 파일 이름과 일치하도록 변경).
export GOOGLE_APPLICATION_CREDENTIALS=/home/pi/iot-data-pipeline/yourSecurityKeyFilename.json
이제 Google Cloud로 데이터를 전송할 준비가 된 완성된 IoT 날씨 센서가 있습니다.
7. 데이터 파이프라인 시작
Compute API를 사용 설정해야 할 수 있음
Raspberry Pi에서 데이터 스트리밍
Raspberry Pi IoT 날씨 센서를 구축했다면 날씨 데이터를 읽고 이를 Google Cloud Pub/Sub에 푸시하는 스크립트를 시작합니다. /home/pi/iot-data-pipeline 디렉터리에 있지 않다면 먼저 해당 디렉터리로 이동합니다.
cd /home/pi/iot-data-pipeline
날씨 스크립트 시작
python checkWeather.py
터미널 창에서 1분마다 날씨 데이터 결과를 에코하는 것을 확인할 수 있습니다. 데이터 흐름이 있는 경우 다음 섹션 (데이터 이동 여부 확인)으로 건너뛸 수 있습니다.
시뮬레이션된 데이터 스트리밍
IoT 날씨 센서를 빌드하지 않은 경우 Google Cloud Storage에 저장된 공개 데이터 세트를 사용하고 이를 기존 Pub/Sub 주제에 입력하여 데이터 스트리밍을 시뮬레이션할 수 있습니다. Cloud Storage에서 읽고 Pub/Sub에 게시하기 위한 Google에서 제공하는 템플릿과 함께 Google Dataflow가 사용됩니다.
이 프로세스에서 Dataflow에 임시 저장소 위치가 필요하므로 이 용도로 스토리지 버킷을 만들어 보겠습니다.
Cloud 콘솔에서 스토리지를 선택한 다음 브라우저를 선택합니다.
버킷 만들기 버튼을 클릭합니다.
스토리지 버킷의 이름 (모든 Google Cloud에서 전역적으로 고유한 이름이어야 함)을 선택하고 '만들기' 버튼을 클릭합니다. 잠시 후에 필요하므로 이 스토리지 버킷의 이름을 기억해 두세요.
Cloud 콘솔에서 Dataflow를 선택합니다.
템플릿에서 작업 만들기 (화면 상단)를 클릭합니다.
아래와 같이 작업 세부정보를 입력합니다. 이때 다음 사항에 유의하세요.
- dataflow-gcs-to-pubsub 작업 이름을 입력합니다.
- 리전은 프로젝트가 호스팅되는 위치에 따라 자동으로 선택되며 변경할 필요가 없습니다.
- GCS Text to Cloud Pub/Sub의 Cloud Dataflow 템플릿 선택
- 입력 Cloud Storage 파일에는 gs://codelab-iot-data-pipeline-sampleweatherdata/*.json을 입력합니다(공용 데이터 세트임).
- 출력 Pub/Sub 주제의 정확한 경로는 프로젝트 이름에 따라 달라지며 'projects/yourProjectName/topics/weatherdata'와 같이 표시됩니다.
- 임시 위치를 방금 만든 Google Cloud Storage 버킷의 이름으로 설정하고 파일 이름 접두사로 'tmp'를 지정합니다. 'gs://myStorageBucketName/tmp'와 같은 형식이어야 합니다.
모든 정보를 입력한 후(아래 참고) '작업 실행' 버튼을 클릭합니다.
Dataflow 작업이 실행되기 시작합니다.
Dataflow 작업이 완료되는 데 약 1분 정도 걸립니다.
8. 데이터가 흐르고 있는지 확인
Cloud 함수 로그
Cloud 함수가 Pub/Sub에 의해 트리거되는지 확인
gcloud beta functions logs read function-weatherPubSubToBQ
로그에 함수가 실행되고 데이터가 수신되고 BigQuery에 삽입되고 있음을 나타내는 메시지가 표시됩니다.
BigQuery 데이터
데이터가 BigQuery 테이블로 전송되고 있는지 확인합니다. Cloud 콘솔에서 BigQuery(bigquery.cloud.google.com)로 이동합니다.
프로젝트 이름(창 왼쪽)에서 데이터 세트(weatherData)를 클릭한 다음 테이블(weatherDataTable)을 클릭하고 테이블 쿼리 버튼을 클릭합니다.
아래와 같이 SELECT * FROM... 을 표시하도록 SQL 문에 별표를 추가한 다음 쿼리 실행 버튼을 클릭합니다.
메시지가 표시되면 쿼리 실행 버튼을 클릭합니다.
결과가 표시되면 데이터가 제대로 전송되고 있는 것입니다.
데이터가 흐르고 있으므로 이제 분석 대시보드를 빌드할 준비가 되었습니다.
9. 데이터 스튜디오 대시보드 만들기
Google 데이터 스튜디오에서는 데이터를 활용하여 읽기 쉽고 공유하기 간편하며 완벽하게 맞춤설정이 가능한 대시보드와 보고서를 만들 수 있습니다.
웹브라우저에서 https://datastudio.google.com으로 이동합니다.
'새 보고서 시작'에서 '빈 보고서'를 클릭한 다음 '시작하기' 버튼을 클릭합니다.
확인란을 클릭하여 약관에 동의하고 '다음' 버튼을 클릭하여 수신하고자 하는 이메일을 선택한 후 완료 버튼을 클릭합니다. '새 보고서 시작'에서 '빈 보고서'를 다시 클릭합니다.
'새 데이터 소스 만들기' 버튼을 클릭합니다.
BigQuery를 클릭한 다음 '승인' 버튼을 클릭하고 데이터 스튜디오에서 사용할 Google 계정을 선택합니다(codelab에서 사용한 계정과 동일해야 함).
'허용' 버튼을 클릭합니다.
프로젝트 이름, 데이터 세트, 테이블을 선택합니다. 그런 다음 Connect 버튼을 클릭합니다.
아래와 같이 유형 필드를 변경합니다(timecollected 및 sensorID를 제외한 모든 항목은 숫자여야 함). timecollected는 날짜가 아닌 날짜 시로 설정됩니다. 아래와 같이 집계 필드를 변경합니다(이슬점, 온도, 습도, 압력은 평균이어야 하며 그 밖의 모든 것은 '없음'으로 설정해야 함). '보고서 만들기' 버튼을 클릭합니다.
'보고서에 추가' 버튼을 클릭하여 확인합니다.
Google 계정을 선택하라는 메시지가 표시되면 계정을 선택한 다음 허용 버튼을 클릭하여 데이터 스튜디오에서 보고서를 Google 드라이브에 저장하도록 합니다.
대시보드를 만들 수 있는 빈 캔버스가 표시됩니다. 맨 위 아이콘 행에서 '시계열'을 선택합니다.
빈 시트의 왼쪽 상단에 직사각형을 그립니다. 총 빈 시트의 약 1/4을 차지해야 합니다.
창 오른쪽에서 스타일 탭을 선택합니다. 누락된 데이터를 '줄에서 0으로'에서 '줄바꿈'으로 변경합니다. 왼쪽 Y축 섹션에서 축 최솟값에서 0을 삭제하여 (자동)으로 변경합니다.
시트의 그래프를 클릭한 다음 세 번 복사/붙여넣기 (Ctrl-C/Ctrl-V)합니다. 각 그래프가 레이아웃의 1/4을 차지하도록 정렬합니다.
각 그래프를 클릭하고 시계열 속성 및 데이터 섹션에서 기존 측정항목 (이슬점)을 클릭하고, 4개의 날씨 측정값 (이슬점, 온도, 습도, 압력)에 모두 고유한 그래프가 표시될 때까지 표시할 다른 측정항목을 선택합니다.
이제 기본 대시보드가 생겼습니다.
10. 축하합니다.
전체 데이터 파이프라인을 만들었습니다. 이 과정에서 Google Pub/Sub 사용 방법, 서버리스 함수 배포 방법, BigQuery 활용 방법, 데이터 스튜디오를 사용하여 분석 대시보드를 만드는 방법을 배웠습니다. 또한 Google Cloud SDK를 사용해 Google Cloud Platform으로 데이터를 안전하게 가져오는 방법도 알아보았습니다. 이제 가용성을 유지하면서 대규모 트래픽을 처리할 수 있는 중요한 아키텍처 패턴을 직접 경험해 보았습니다.
삭제
날씨 데이터와 분석 파이프라인에 대한 실험이 완료되면 실행 중인 리소스를 제거할 수 있습니다.
IoT 센서를 빌드한 경우 전원을 끕니다. 터미널 창에서 Ctrl-C를 눌러 스크립트를 중지한 다음 다음을 입력하여 Raspberry Pi의 전원을 끕니다.
shutdown -h now
Cloud Functions로 이동하여 function-weatherPubSubToBQ 옆에 있는 체크박스를 클릭한 다음 삭제를 클릭합니다.
Pub/Sub로 이동하여 주제를 클릭하고 날씨 데이터 주제 옆의 체크박스를 클릭한 후 삭제를 클릭합니다.
Storage로 이동하여 스토리지 버킷 옆에 있는 체크박스를 클릭한 다음 삭제를 클릭합니다.
bigquery.cloud.google.com으로 이동하여 프로젝트 이름 옆의 아래쪽 화살표를 클릭하고 weatherData 데이터 세트 오른쪽에 있는 아래쪽 화살표를 클릭한 다음 '데이터 세트 삭제'를 클릭합니다.
메시지가 표시되면 데이터 세트 ID (weatherData)를 입력하여 데이터 삭제를 완료합니다.