- ๋์ฅ์ฃผ๋ ์ค์๊ฐ ์ผ์ ์ ๋ณด๋ฅผ ํ์ธํ ์ ์์ด์ผ ํฉ๋๋ค.
- IoT ๋๋ฐ์ด์ค์๋ ์จ๋, ์ต๋ ๋ฐ ์ด์ฐํํ์ ์ ๋ณด๋ฅผ ์์ง/์์ฑํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์กด์ฌํฉ๋๋ค.
- ์์ง/์์ฑ ์ ํ๋ฆฌ์ผ์ด์ ์ผ๋ก๋ถํฐ ๋ฐ์ํ ๋ก๊ทธ๊ฐ ๋ฐ์ดํฐ ํ์ดํ๋ผ์ธ์ ํตํด ์ค์๊ฐ์ผ๋ก ๋ก๊ทธ ์ ์ฅ์์ ์ ์ก๋์ด์ผ ํฉ๋๋ค.
- ๋ก๊ทธ๋ ์กฐ๊ฑด์ ๋ง๊ฒ ์ฟผ๋ฆฌํ์ฌ ์ฌ์ฉํ ์ ์์ด์ผ ํฉ๋๋ค. ๋ณดํต ์๊ณ์ด ๊ธฐ๋ฐ์ ์ ๋ณด๋ฅผ ์กฐํํฉ๋๋ค. (์: ์ง๋ 7์ผ๊ฐ ์จ๋ ์ถ์ด)
- ์๋น์ค ๊ฐ์ ์ฐ๊ฒฐ์ ์๋ฒ๋ฆฌ์ค ํํ๋ก ๊ตฌ์ฑํด์ผ ํฉ๋๋ค.
์ค๋งํธํ์ ์จ์ค๋ง๋ค ์ค์น๋์ด ์๋ IoT ๋๋ฐ์ด์ค์ ์ค์น๋ ์จ๋, ์ต๋ ๋ฐ ์ด์ฐํํ์ ์ผ์๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ์์งํ๊ณ , ์ด๋ฅผ ์ค์ค์๊ฐ์ผ๋ก ๋ฐ์ดํฐ ํ์ดํ๋ผ์ธ์ ์ด์ฉํด ๋ก๊ทธ ์ ์ฅ์๋ก ์ ์กํฉ๋๋ค.
๋์ฅ์ฃผ๋ ์ด๋ฌํ ์ผ์ ์ ๋ณด๋ฅผ ์ค์ค์๊ฐ์ผ๋ก ๋ชจ๋ํฐ๋งํ ์ ์๊ณ , ๋ก๊ทธ ์ ์ฅ์์ ์ ์ฅ๋ ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก ์๊ณ์ด ๊ธฐ๋ฐ์ ์ ๋ณด ๋ํ ํ์ธ ๊ฐ๋ฅํฉ๋๋ค.
์ค์ค์๊ฐ ๋ก๊ทธ ์์ง: ์ต์ 1๋ถ ๋จ์๋ก ๋ก๊ทธ ์ ์ฅ์์ ์ ์ก์ ๋ณด์ฅํฉ๋๋ค.
๋ํ ์ด์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ก ๋ชจ์ ํ์ธํ ์ ์์ผ๋ฉฐ, ์ด์ ๋ฐ์ดํฐ ๋ฐ์ ์, Discord๋ก ์๋ฆผ์ ๋ณด๋ ๋๋ค.
์์ง/์์ฑ Application์ ๋์ ํด, Architecture ํ ์คํธ๋ฅผ ์ํ ๋ก๊ทธ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ ์ ์์ต๋๋ค.
- ๋ฐ์ดํฐ ํ์ดํ๋ผ์ธ ์ง์
- ๋ฐ์ดํฐ ์๊ฐํ, Monitoring
- Discord ์๋ฆผ ์ ์ก
- ๊ฐ์์ ๋ก๊ทธ ๋ฐ์ดํฐ ์ ์ก
- Terraform ์
README.md
ํ์ผ ์ฐธ์กฐ
- Resource ์ ์ ์ด์
- ์์ง/์์ฑ Application์ผ๋ก๋ถํฐ ๋ฐ์ํ ๋ก๊ทธ๊ฐ Kinesis Proxy ์ญํ ์ ํ๋ ApiGateway
kinesis_api_gw
๋ฅผ ํตํด ๋ฐ์ดํฐ ํ์ดํ๋ผ์ธ์ผ๋ก ์ง์ ํฉ๋๋ค. - ์ง์ ํ ๋ก๊ทธ๋ Kinesis DataStream ์ ํตํด ์ค์๊ฐ์ผ๋ก ์์ง๋ฉ๋๋ค.
- Kinesis DataStream ์์ ์์งํ ๋ก๊ทธ๋ S3๋ก ์ ์ฅ๋๊ธฐ ์ , Kinesis Data Firehose ๋ฅผ ์ด์ฉํ์ฌ ETL ์์
์ด ์ด๋ฃจ์ด์ง๋๋ค.
- Kinesis Data Firehose๋ ์ต์ 1๋ถ ๋จ์๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์กํฉ๋๋ค.
JSON -> parquet
- ์ด๋, Kinesis Data Firehose๋ AWS Glue Data Catalog ์
Database Table
์ ์ฐธ์กฐํฉ๋๋ค.Database Table
์ ์์ง๋ ๋ก๊ทธ์ ๋ฐ์ดํฐ ์คํค๋ง ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค.
- ์ดํ, ๋ก๊ทธ๋ ๋ฐ์ดํฐ ์ ์ฅ์์ธ S3 ์ธ
sensor-log-bucket
์ ์ ์ฅ๋ฉ๋๋ค.
- AWS Glue DataCatalog์ Crawler ๋
sensor-log-bucket
์ ์ ์ฅ๋ ๋ก๊ทธ๋ฅผ ๋ถ๋ฌ์ Table ์ ์์ฑํฉ๋๋ค.์ต์ด ํ๋ฒ๋ง ์คํํฉ๋๋ค.
- Amazon Athena ๊ฐ ์์ฑ๋ Table ์ ์ฐธ์กฐํ์ฌ query๋ฅผ ์คํํฉ๋๋ค.
- Monitoring Tool์ธ Grafana๋ Athena์ ์ฐ๊ฒฐ๋์ด ์๊ฐํ๋ฅผ ์งํํฉ๋๋ค.
- Grafana ๋ Amazon EC2 ๋ฅผ ํ์ฉํ์ฌ ๊ตฌ๋๋ฉ๋๋ค.
- Grafana๊ฐ ์ค์น๋ EC2์ Endpoint ๋ Route53์ ๋ ์ฝ๋๋ก ๋ฑ๋กํฉ๋๋ค.
- ๋์ฅ์ฃผ๋ Route53 ์ ๋๋ฉ์ธ์ผ๋ก ์ ์ํ๋ฉด ๋ก๊ทธ๋ฅผ ๋ชจ๋ํฐ๋งํ ์ ์์ต๋๋ค.
- ๋ก๊ทธ ์ ์ฅ์
sensor-log-bucket
์ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ฉด AWS Lambda ๊ฐ ์คํ๋ฉ๋๋ค.- ์ด๋, AWS Lambda๋ ์ด์ ๋ฐ์ดํฐ๊ฐ ๋ฐ์ํ๋ ์ง, ํ์ธํฉ๋๋ค.
-
์ด์ ๋ฐ์ดํฐ์ ๊ธฐ์ค
๊ธฐ์ค ์์ ์ฝ๋ ์ผ์์ ์ด์์ด ์๋ ๊ฐ? error_code = "1"
๋น์ ์์ ์ธ ์์น๊ฐ ๋ณด์ด๋ ๊ฐ? temperature = "400"
-
- ์ด๋, AWS Lambda๋ ์ด์ ๋ฐ์ดํฐ๊ฐ ๋ฐ์ํ๋ ์ง, ํ์ธํฉ๋๋ค.
- ์ด์ ๋ฐ์ดํฐ๊ฐ ๋ฐ์ํ๋ค๋ฉด,
- AWS Lambda์ ๋ก์ง์ผ๋ก ์ธํด Discord Webhook์ ํตํด ์๋ฆผ์ ๋ณด๋ ๋๋ค.
- ๊ทธ ํ, ์ด์ ๋ฐ์ดํฐ๋ง ์ ๋ณํ์ฌ S3์ธ
spike-log-bucket
์ ๋ฐ๋ก ์ ์ฅํฉ๋๋ค.
- AWS Lambda์ธ
pseudo_sensor_log_lambda
์ API Gateway์ธpseudo_api_gw
์ Endpoint ์ ์์ฒญ body ๋ฅผ ๋ด์, POST ์์ฒญ์ ๋ณด๋ ๋๋ค. pseudo_api_gw
์ ์ํด ์คํ๋pseudo_sensor_log_lambda
๋ ์์ฒญํ body ์ ๋ฐ๋ผ ๋ก์ง์ ์คํ,kinesis_api_gw
์ Endpoint ๋ก ์์ฒญ์ ๋ณด๋ ๋๋ค.
POST /
Content-Type : application/json
{
"count" : 12,
"interval" : 10
}
Endpoint :
pseudo_api_gw
์ Endpoint
Name Type Description count int ์ ์กํ ๋ฐ์ดํฐ์ ๊ฐฏ์ interval int ์ ์กํ ๋ฐ์ดํฐ์ ๊ฐ๊ฒฉ (์ด ๋จ์)
ํด๋น repository์ test.py
ํ์ผ์ ์ฌ์ฉํ์ฌ
$ python test.py
$ python3 test.py
์์ ๋ช ๋ น์ ์คํํฉ๋๋ค.
์์ ์ด๋ฏธ์ง๋ฅผ ํด๋ฆญํ๋ฉด Terraform README.md๋ก ์ด๋ํฉ๋๋ค.
์ ์ด ๋ฆฌ์์ค๋ฅผ ์ ์ ํ๋ ๊ฐ?
- ์๋ํฌ์ธํธ๋ฅผ ํ์ฉํ์ฌ ์์ฒญ์ ์ฒ๋ฆฌํ๊ธฐ ๋๋ฌธ์, IoT sensor Application ๊ตฌํ์ ์ฉ์ด์ฑ, authorization token ๋ฑ์ ์ฌ์ฉํด์ ๋ณด์๋ ์ข์ต๋๋ค.
- Kinesis Data Stream์ ์ด๋ฆ์ ์ง์ ํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๋ ๋ฐฉ๋ฒ์ด ์๋๋ฐ, ์ด ๋ฐฉ๋ฒ์ ๊ฐ์ ํ๊ฒฝ์์ ๊ฐ๋ฐ๋๋ ๊ฒ์ด ์๋ ์ธ๋ถ ์๋น์ค๊ฐ ์ฐ๊ฒฐ๋๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ Python Boto3 ๋ชจ๋๊ณผ ํ๊ฒฝ๋ณ์ ๋ฑ์ ๋ณต์ก๋๊ณผ ๋ฏผ๊ฐํ ์ ๋ณด๋ฅผ ๋ณดํธํ๊ธฐ ์ํด API Gateway๋ฅผ ์ฌ์ฉํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค.
- Kinesis Proxy๋ก ํ์ฉํ์ฌ API Gateway Endpoint๋ก ์์ฒญ์ ๋ณด๋ด๋ฉด Kinesis Data Stream์ ๋ฐ์ดํฐ๊ฐ ๋ฐ๋ก ๋ค์ด๊ฐ๋๋ก ๊ตฌํํ์์ต๋๋ค.
- ๋ณ๋ ฌ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ์ฌ ํ๋ ฅ์ฑ์ด ์ข์. Kinesis Data Firehose, Kinesis Data Analytics์ ๊ฐ์ ์๋น์ค ํ์ฅ์ฑ์ด ์ข์ต๋๋ค.
- AWS Key Management Service ์๋น์ค๋ฅผ ํ์ฉํ์ฌ Server-Side Encryption์ ๊ฐ์ ๊ธฐ๋ฅ์ผ๋ก ๋ฐ์ดํฐ ๋ณด์์ ๊ฐํํ ์ ์์ต๋๋ค.
- Kinesis Data Stream์ ์ผ์ ๊ธฐ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ๋๋ฌธ์ ๋ด๊ตฌ์ฑ์ด ์ข์ต๋๋ค.
- ์๋์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด Shard๋ฅผ ์ถ๊ฐํ๋ ๋ฐฉ์์ผ๋ก ํ์ฅ์ฑ ๋ํ ์ข๊ธฐ ๋๋ฌธ์ Kinesis Data Stream์ ์ ํํ์์ต๋๋ค.
- Kinesis Data Streams High-Level Architecture
- ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๋๋ก ๋ฐ์ดํฐ ์์ฐ์๋ฅผ ๊ตฌ์ฑํ๋ฉด ์ง์ ํ ๋์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์๋์ผ๋ก ์ ์กํฉ๋๋ค. ์ ์ก ์ ์ Kinesis Data Firehose Firehose๋ฅผ ๊ตฌ์ฑํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๋ณํํ ์๋ ์์ต๋๋ค.
- ํ์ผ ํ์์ JSON์์ Apache Parquet ํ์์ผ๋ก ๋ณํํ๋ ๋ฐฉ๋ฒ์ ์ฑํํ๋๋ฐ, JSON์ ๋ฐ์ดํฐ ํ์ ์ ๋ํ ์ ๋ณด๊ฐ ์๋ ๋ฐ๋ฉด, Parquet์ ํด๋น ์ ๋ณด๋ฅผ ํฌํจํ๊ณ ์๊ณ , Amazon Athena์์ ์ฟผ๋ฆฌ ์ฉ๋์ ๋ฐ๋ผ ๊ณผ๊ธ์ด ๋๊ธฐ ๋๋ฌธ์ ์ด ๊ธฐ๋ฐ ๋ฐ์ดํฐ ํ์์ธ Parquet์ผ๋ก ์ ํํ์ฌ ๋น์ฉ ์ ๊ฐ์ ๊ณ ๋ คํ์์ต๋๋ค.
- AWS Glue๋ ์์ ๊ด๋ฆฌํ ์ถ์ถ, ๋ณํ ๋ฐ ๋ก๋(ETL) ์๋น์ค๋ก, ํจ์จ์ ์ธ ๋น์ฉ์ผ๋ก ๊ฐ๋จํ๊ฒ ์ฌ๋ฌ ๋ฐ์ดํฐ ์คํ ์ด ๋ฐ ๋ฐ์ดํฐ ์คํธ๋ฆผ ๊ฐ์ ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฅ, ์ ๋ฆฌ, ๋ณด๊ฐ, ์ด๋ํฉ๋๋ค.
- Crawler๋ฅผ ์ด์ฉํ์ฌ ์๋์ผ๋ก ๋ฐ์ดํฐ ์คํค๋ง ์ ๋ณด์ ๋ฉํ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ธฐ๋ฅ์ด ์๊ณ , ์ด๋ฅผ ๋ค๋ฅธ ์๋น์ค์์ ๋์ ํ์ฅ์ฑ์ผ๋ก Amazon Athena์๋ ๋์ ํธํ์ฑ์ ์๋ํฉ๋๋ค.
- AWS Glue๋ ์๋ฒ๋ฆฌ์ค์ด๋ฏ๋ก ์ค์ ํ๊ฑฐ๋ ๊ด๋ฆฌํ ์ธํ๋ผ๊ฐ ์์ต๋๋ค.
- ์ด ์ํคํ ์ฒ์์๋ Crawling์ ํ๋ฒ๋ง ํ์ฌ Table์ ์ฐธ์กฐํ๊ธฐ๋ง ํ๋ฉด ๋๊ธฐ ๋๋ฌธ์ ๋น์ฉ ํจ์จ์ฑ๋ ๊ณ ๋ คํ์ฌ ์ ์ ํ์ต๋๋ค.
- Athena๋ ์๋ฒ๋ฆฌ์ค ์๋น์ค์ด๋ฏ๋ก ์ค์ ํ๊ฑฐ๋ ๊ด๋ฆฌํ ์ธํ๋ผ๊ฐ ์์ผ๋ฉฐ ์คํํ ์ฟผ๋ฆฌ์ ๋ํด์๋ง ๋น์ฉ์ ์ง๋ถํ๋ฉด ๋ฉ๋๋ค. Athena๋ ์๋์ผ๋ก ํ์ฅ๋์ด ์ฟผ๋ฆฌ๋ฅผ ๋ณ๋ ฌ๋ก ์คํํ์ฌ ๋๊ท๋ชจ ๋ฐ์ดํฐ ์งํฉ๊ณผ ๋ณต์กํ ์ฟผ๋ฆฌ์์๋ ๋น ๋ฅด๊ฒ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์์ต๋๋ค.
- Amazon Athena๋ Amazon S3๋ฅผ ๊ธฐ๋ณธ ๋ฐ์ดํฐ ์คํ ์ด๋ก ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ๊ฐ์ฉ์ฑ๊ณผ ๋ด๊ตฌ์ฑ์ด ๋งค์ฐ ์ฐ์ํฉ๋๋ค.
- Grafana์์ Athena Plugin์ผ๋ก ์ธํด ์ฐ๊ฒฐ์ฑ๊ณผ ํธํ์ฑ ๋ํ ์ข์ต๋๋ค.
- S3 Select๋ผ๋ ์๋น์ค๋ ๊ณ ๋ คํ์ง๋ง, S3 Object ๋จ์๋ก ์๋ํ๋ ๊ฒ์ด ์ด ์ํคํ ์ฒ์๋ ๋ง์ง ์์ ์ ํํ์ง ์์์ต๋๋ค.
- ํ๋์จ์ด์ ์ ํฌ์ํ ํ์๊ฐ ์์ด ๋ ๋น ๋ฅด๊ฒ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ๊ณ ๋ฐฐํฌํ ์ ์์ต๋๋ค.
- Amazon EC2์์๋ ํ์ฅ ๋๋ ์ถ์๋ฅผ ํตํด ์๊ตฌ ์ฌํญ ๋ณ๊ฒฝ ๋๋ ์ฌ์ฉ๋ ์คํ์ดํฌ๋ฅผ ์ฒ๋ฆฌํ ์ ์์ผ๋ฏ๋ก ํธ๋ํฝ์ ์์ธกํ ํ์์ฑ์ด ์ค์ด๋ญ๋๋ค.
- Grafana๋ฅผ ๋ก์ปฌํ๊ฒฝ์ด ์๋ ํด๋ผ์ฐ๋ ์์์ ๊ตฌ๋ํ๊ธฐ ์ํด ์ฌ์ฉํ์ต๋๋ค.
- AWS managed grafana ์๋น์ค๋ ์๋๋ฐ, ๋ผ์ด์ผ์ค ๋ฐ๊ธ์๋ง 9$์ธ ๋ฐ๋ฉด, EC2์ T2 Nano๋ ํ๋ฌ์ 7$ ์์๋๊ธฐ ๋๋ฌธ์ EC2๋ก ์ ์ ํ์์ต๋๋ค.
- ๊ฐ์ฉ์ฑ๊ณผ ํ์ฅ์ฑ์ด ๋ฐ์ด๋ DNS(Domain Name System) ์น ์๋น์ค์ ๋๋ค.
- Route 53์ ์ฌ์ฉํ์ฌ ์ธ ๊ฐ์ง ์ฃผ์ ๊ธฐ๋ฅ,
- ์ฆ, ๋๋ฉ์ธ ๋ฑ๋ก, DNS ๋ผ์ฐํ , ์ํ ํ์ธ์ ์กฐํฉํ์ฌ ์คํํ ์ ์์ต๋๋ค.
- Grafana๋ฅผ EC2์์ ๊ตฌ๋ํ๋๋ก ์ค๊ณํ๋๋ฐ, ์ด๋ฅผ Client์ ์ฉ์ดํ ์ ๊ทผ์ฑ์ ์ํด ์ ํํ์์ต๋๋ค.
- Amazon Simple Storage Service(Amazon S3)๋ ๋์ ํ์ฅ์ฑ, ๋ฐ์ดํฐ ๊ฐ์ฉ์ฑ, ๋ณด์ ๋ฐ ์ฑ๋ฅ์ ์ ๊ณตํ๋ ๊ฐ์ฒด ์คํ ๋ฆฌ์ง ์๋น์ค์ ๋๋ค.
- Intelligent-Tiering ๊ธฐ๋ฅ์ผ๋ก ์ค๋๋ ๋ฐ์ดํฐ๋ค์ ๊ฐ๊ฐ ์คํ ๋ฆฌ์ง ํด๋์ค๋ฅผ ๋ถ๋ฆฌํ์ฌ ์ ์ฅํ ์ ์๊ธฐ ๋๋ฌธ์ ์คํ ๋ฆฌ์ง ๋น์ฉ์ ์ ๊ฐํ ์ ์์ด, S3๋ฅผ ์ ์ ํ์์ต๋๋ค.
- Lambda๋ ์๋ฒ๋ฅผ ํ๋ก๋น์ ๋ํ๊ฑฐ๋ ๊ด๋ฆฌํ์ง ์๊ณ ๋ ์ฝ๋๋ฅผ ์คํํ ์ ์๊ฒ ํด์ฃผ๋ ์ปดํจํ ์๋น์ค์ ๋๋ค.
- Lambda๋ ํ์ ์์๋ง ํจ์๋ฅผ ์คํํ๋ฉฐ, ์ผ์ผ ๋ช ๊ฐ์ ์์ฒญ์์ ์ด๋น ์์ฒ ๊ฐ์ ์์ฒญ๊น์ง ์๋์ผ๋ก ํ์ฅ์ด ๊ฐ๋ฅํฉ๋๋ค. ์ฌ์ฉํ ์ปดํจํ ์๊ฐ๋งํผ๋ง ๋น์ฉ์ ์ง๋ถํ๊ณ , ์ฝ๋๊ฐ ์คํ๋์ง ์์ ๋๋ ์๊ธ์ด ๋ถ๊ณผ๋์ง ์์ต๋๋ค.
- Lambda API๋ฅผ ์ฌ์ฉํ์ฌ Lambda ํจ์๋ฅผ ํธ์ถํ๊ฑฐ๋, Lambda๊ฐ ๋ค๋ฅธ AWS ์๋น์ค์ ์ด๋ฒคํธ์ ์๋ตํ์ฌ ํจ์๋ฅผ ์คํํ ์ ์์ต๋๋ค.
- ์คํ์์ค์ด๋ฉฐ, ์ธํ๋ผ ๊ด๋ฆฌ ๋น์ฉ๋ EC2 T2 Nano๋ฅผ ์ฌ์ฉํ์ฌ ์ ๋ ดํฉ๋๋ค.
- ๋ค์ํ ์๊ฐํ ์ต์ ์ด ์๊ณ , Dashboard๋ฅผ Grafana CLI๋ฅผ ์ฌ์ฉํ์ฌ IaCํ๊ฐ ๊ฐ๋ฅํฉ๋๋ค.