[AWS] timestream - LiveAnalytics
AWS timestream์ ์๊ณ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๊ด๋ฆฌํ์ผ๋ก ์ ๊ณตํ๋ ์๋น์ค๋ค.
๊ทธ๋ ๊ฒ ๋ง์ด ์ฐ๋์ง๋ ๋ชจ๋ฅด๊ฒ ๋๋ฐ, ์ข
์ข
๋ฐ์ดํฐ ํ์ดํ๋ผ์ธ ๊ฐ์๋ฐ์ ์ฐ๊ธด ํ๋ ๊ฒ ๊ฐ๋๋ผ.
์ฌ์ฉ๋์ด ๋ฏธ๋ฌํด์ ๊ทธ๋ฐ์ง, ์ค์ ๋ก๋ ๋ฆฌ์ ์ง์ ์์ค์ด ๋์ง ์๋ค.
ํ์ฌ ์์ฑ ๊ธฐ์ค์ผ๋ก ์ผ๋จ ์์ธ ๋ฆฌ์ ์๋ ์ ๊ณต๋์ง ์๋๋ค. ๊ทธ๋์ ๋ง์ฝ ํ๊ตญ์์ ์๋น์ค๋ฅผ ํ๋ค๋ฉด ๋์ฟ์๋ค๊ฐ ๋ฌ์ผ ํ ๊ฒ์ด๋ค.
์คํ ์ต์
Timestream์ 2๊ฐ์ง์ ์คํ ์ต์ ์ ์ ๊ณตํ๋ค.
ํ๋๋ ์๋ฒ๋ฅผ ํน์ ์คํ์ผ๋ก ํ๋ก๋น์ ๋ํด์ ์ฌ์ฉํ๋ Timestream for InfluxDB๋ค. ์ด๊ฑฐ๋ ๊ทธ๋ฅ InfluxDB์ ํฌ๊ฒ ๋ค๋ฅผ ๊ฒ์ด ์์ผ๋ ๋์ถฉ ๋์ด๊ฐ๊ฒ ๋ค.
๋๋ฒ์งธ๋ ์๋ฒ๋ฆฌ์คํ DB์ธ Timestream for LiveAnalytics๋ค. InfluxDB์๋ ๊ด๊ณ๊ฐ ์๋ค.
์ด๊ฑด ์ฌ์ฉํ ์ ์ฅ๊ณต๊ฐ, ์ฐ๊ธฐ ์ฌ์ฉ๋, query์ ๋ํด์๋ง ์๊ธ์ ์ง๋ถํ๊ณ , ์ฌ์ฉ๋์ ๋ฐ๋ผ์ ์๋์ผ๋ก ํ์ฅ๋๋ค.
์๋ฒ๋ฆฌ์คํ๊ฒ ๊ด๋ฆฌ๋๋ฉฐ, ํํ๋ฐ์ดํธ๊ธ์ ๋น
๋ฐ์ดํฐ์ ๋ํด์๋ ์ด๋จ์ query๋ฅผ ์ ๊ณตํ๋ค๋๊ฒ ์ฅ์ ์ด๋ค.
๋ค๋ง Timestream for InfluxDB๋ณด๋ค๋ ๋ฆฌ์ ์ง์ ์์ค์ด ์ข๋ค.
์ฌ๊ธฐ์๋ ์์ฒด ์์คํ ์ธ LiveAnalytics๋ฅผ ์์ฃผ๋ก ๋ค๋ฃฌ๋ค.
๋น์ฉ
https://aws.amazon.com/ko/timestream/pricing/
๋น์ฉ ์ธก์ ๋ฐฉ์์ ๊ฝค ๊ฐ๋จํ๊ณ ์ง๊ด์ ์ธ ํธ์ด๋ค.
100๋ง๊ฐ ์์๋๋ง๋ค ๋น์ฉ์ ๋ฏ๋๋ค. ์ผ๋จ ์ฐ๊ธฐ ๋น์ฉ ์์ฒด๋ ๋๋ฆ ์ ๋ ดํ ์ถ์ด๋ค.
์ ์ฅ๋ ๋ฐ์ดํฐ ํฌ๊ธฐ์ ๋ํด์๋ ์๊ธ์ ๋ฏ๋๋ค. RAM์ธ์ง, ๋์คํฌ์ธ์ง์ ๋ฐ๋ผ์ ์ฐจ์ด๊ฐ ์ข ๋๋ค.
๋์คํฌ ์ ์ฅ๋น์ฉ์ ๊ทธ๋ฆฌ ๋น์ธ์ง ์๋ค.
S3๊ฐ GB๋น 0.025๋ฌ๋ฌ๊ณ , DynamoDB๊ฐ GB๋น 0.285๋ฌ๋ฌ์ธ๊ฑธ ์๊ฐํ๋ฉด ๋ฌด๋ํ ํธ์ด๋ค.
๊ทธ๋์ ๋ฐ์ดํฐ ํ์ดํ๋ผ์ธ์ ์ฒซ๋ฒ์งธ ๋ฐ์ดํฐ์์ค๋ก๋ ์ข
์ข
์ฐ๋๋ผ
๊ทธ๋ฆฌ๊ณ ์ฌ๊ธฐ์ ์ข ํท๊ฐ๋ฆด ์ ์๋๊ฑด, ์ฟผ๋ฆฌ์ ์ฌ์ฉ๋๋ TCU๋ผ๋ ๋จ์๋ค.
ํ๋์ TCU๋ ์ถ์์ ์ธ ๋จ์๊ฐ ์๋๋ผ, 4๊ฐ์ vCPU์ 16GB๋ก ๊ตฌ์ฑ๋ ํ๋์ ๋
ธ๋ ๋จ์๋ค. ์ฟผ๋ฆฌ๋ฅผ ๋ ๋ฆฌ๋ฉด ๋ฐ์ดํฐ ๊ท๋ชจ์ ๋ง์ถฐ์ TCU ๋
ธ๋๋ฅผ ์ฌ๋ฌ๊ฐ ๋์์ ๋ณ๋ ฌ์ฒ๋ฆฌ๋ฅผ ํ๊ณ , ๊ทธ์ ๋น๋กํด์ ๊ณผ๊ธ์ ํ๋ ๊ฒ์ด๋ค.
์ ํ์ฌํญ
timestream์ ํน์ํ๋ ์๊ณ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ผ์, ๋ช๊ฐ์ง ์ ํ์ฌํญ์ด ์กด์ฌํ๋ค.
๋จ์ผ ๋ ์ฝ๋, ๊ทธ๋ฌ๋๊น ํ๋์ ํ์๋ ํฌ๊ธฐ ์ ํ์ด ์กด์ฌํ๋ค. ํ์ฌ๋ 2kb๋ค.
๊ทธ๋์ ์์ฒญ ํฐ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ ์๊ฐ ์๋ค.
๊ทธ ์ธ์๋, ๋ฐ์ดํฐ๊ฐ ์๊ตฌ์ ์ด์ง ์์์ ์ธ์ ๊ฐ๋ ์ฆ๋ฐํ๋ค๊ฑฐ๋ ํ๋ ๋ถ๋ถ๋ค์ด ์กด์ฌํ๋ค.
๊ทธ๋์ ๊ฒฐ๊ตญ ๊ทธ ์ ์ ์์ง์์ ์ด๋๊ฐ ๋ค๋ฅธ ๊ณณ์ ๋ฃ์ด์ผ ํ๋ค. ๋ณดํต์ ๊ทธ๊ฒ S3๊ฐ ๋๋ค.
๋์คํฌ์ ๋ฉ๋ชจ๋ฆฌ
์์ ๋น์ฉ ํ์์ ๋ดค์ํ ์ง๋ง, timestream์ ๋ฉ๋ชจ๋ฆฌ์ ๋์คํฌ 2๊ฐ์ง ๋ ์ด์ด๋ก ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๊ณ , ์๊ธ๋ 2๊ฐ์ง๋ฅผ ํผํฉํด์ ๋ถ๊ณผํ๋ค.
๋ฐ์ดํฐ๊ฐ ๋ค์ด์ค๋ฉด, ์ผ๋จ timestream์ ๊ทธ๊ฑธ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ฆฐ๋ค.
๊ทธ๋ฆฌ๊ณ ๋ฉ๋ชจ๋ฆฌ ๋ณด์กด ๊ธฐ๊ฐ์ด ์ง๋๋ฉด ๋์คํฌ๋ก ์ฎ๊ธฐ๋ ๊ฒ์ด๋ค.
๊ทธ๋์ ์ด์ ๋ํ ๋ณด์กด ๊ธฐ๊ฐ ์ค์ ์ด ํ
์ด๋ธ ์ค์ ์ ๋ค์ด์๋ค.
์ด๋ฐ ์์ด๋ค.

๋ฉ๋ชจ๋ฆฌ ๋ ์ด์ด๋ ์กฐ๊ธ ํน์ํ ๋ชฉ์ ์ ์ํด ์กด์ฌํ๋ค. ์ฟผ๋ฆฌ ์ฑ๋ฅ์ ๋์ด๋ ค๊ณ ์๋๊ฒ ์๋๋ผ write ๋ถํ๋ฅผ ๊ฐ๋นํ๊ธฐ ์ํด ์กด์ฌํ๋ ๊ฒ์ด๋ค.
๊ทธ๋์ ํค๊ฐ์ด ๋๋ time ๊ฐ๋ ๋ฉ๋ชจ๋ฆฌ ์คํ ์ด์ ๋ณด์กด๊ธฐ๊ฐ์ ์์กด์ ์ด๋ค.
๋ญ ์๋ฆฌ๋๋ฉด, ์๋ฅผ ๋ค์ด ๋ฉ๋ชจ๋ฆฌ ๋ณด์กด ๊ธฐ๊ฐ์ด 24์ด๋ผ๋ฉด time ๊ฐ์ ํ์ฌ๋ฅผ ๊ธฐ์ค์ผ๋ก 24์๊ฐ ์ ๊น์ง์ ๊ฐ์ผ๋ก๋ง insertํ ์ ์๋ค๋ ๊ฒ์ด๋ค. ๊ทธ ์ด์ ๋ฒ์๋ก๋ time key ๊ฐ์ ๋ฃ์ ์ ์๋ค.
๋์คํฌ์ ์๋ ๋ฐ์ดํฐ๋ ์ธ์ ๋ ์ง ์ฟผ๋ฆฌ๋ก ์กฐํํ ์ ์๋ค.
DB ์์ฑ
ํ๋ฒ ์ง์ DB๋ฅผ ๋ง๋ค๊ณ ๋ฐ์ดํฐ๋ฅผ ์ฟผ๋ฆฌํด๋ณด์.

์์ฑ์๋ 2๊ฐ์ง ์ต์
์ด ์๋๋ฐ, ์ํ๋ก ์์ฑํ๋๋ผ๋ DB ํํ ์์ฒด๋ ๋์ผํ๋ค. ๊ทธ ์๋์ ์ํ ํ
์ด๋ธ์ด ํ๋ ์๊ธฐ๋ ๊ฒ์ผ ๋ฟ์ด๋ค.
๋๋ ์ผ๋จ IoT ์ํ ๋ฒ ์ด์ค๋ก ์์ฑํด๋ดค๋ค.

ํ๋ก๋น์ ๋ ์๊ฐ์ ๊ต์ฅํ ์งง์ ํธ์ด๋ค. ๊ฑฐ์ ๋ฐ๋ก ๋ง๋ค์ด์ง๋ค.
๊ทธ๋ฆฌ๊ณ ํ
์ด๋ธ ํญ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํ ํ
์ด๋ธ๋ค์ ์กฐํํ๊ฑฐ๋ ๊ด๋ฆฌํ ์ ์๋ค.
์ผ๋ฐ์ ์ธ DB๋ค๊ณผ ๋์ผํ๊ฒ, ํ๋์ DB์ ์ฌ๋ฌ๊ฐ์ ํ ์ด๋ธ์ด ๋ณ๋๋ก ์์ฑ๋ ์ ์๋ ๊ตฌ์กฐ๋ค.
์ํ ํ ์ด๋ธ ์ฌ์ฉํด๋ณด๊ธฐ
์ํ ํ ์ด๋ธ์ ๋ค์ด๊ฐ๋ณด๋ฉด ์ด๋ฐ ์์ผ๋ก ์์ฑ์ด ๋์ด์์ ๊ฒ์ด๋ค.
์ฌ๊ธฐ์ ๋ญ๊ฐ ๋ฐ๋ก ๋ณผ ์ ์๋๊ฑด ์๋ค.
๋ญ๊ฐ ๋ฐ์ดํฐ๋ฅผ ๊น๋ณด๋ ค๋ฉด, ์ฟผ๋ฆฌ ํธ์ง๊ธฐ๋ก ๊ฐ์ ์ง์ ์ฟผ๋ฆฌ๋ฅผ ๋ ๋ ค์ผ ํ๋ค.
์ฟผ๋ฆฌ๋ SQL ํํ๋ก ์ ๊ณตํ๊ธด ํ๋, ์ ํํ ์ธ๋ถ์ฌํญ๋ค์ ์๊ณ ์ถ๋ค๋ฉด ๋ฌธ์๋ฅผ ์ฐธ์กฐํ๋๊ฒ ์ข์ ๊ฒ์ด๋ค.
https://docs.aws.amazon.com/timestream/latest/developerguide/reference.html
์๋ฌดํผ ์ ๊ธฐ์ ์คํ์ ๋๋ฅด๋ฉด

์ด๋ฐ ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ธ์ด์ฌ ์ ์๋ค.
์ด ์์ ์ TCU ์๋ชจํ๋ฉด์ ๋น์ฉ์ ๋ถ๊ณผํ๋ ๊ฒ์ด๋ค.
๊ทธ๋์ ๋ฐ์ดํฐ ๊ท๋ชจ๊ฐ ํฌ๋ค๋ฉด ์ด๊ฑฐ ์ฟผ๋ฆฌ ๋ ๋ฆฌ๋ ํ๋ฒ ํ๋ฒ์ด ๋น์ฉ์ด ํฌ๊ฒ ํฐ์ง ์๋ ์๋ค.
๊ทธ๋ฆฌ๊ณ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ์ ๋ํด์ ์ ์ฅ์ ๋๋ฅด๋ฉด

์ ์ฅ๋ ์ฟผ๋ฆฌ์ ์ ์ฅ์ด ๋๊ณ
๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ถ๊ฐ ๋น์ฉ ์์ด ์ธ์ ๋ ์กฐํํ ์ ์๋ค.
์์ธ๋ก ์ด๊ฑฐ ์ ์ฅ์ ๋ํ ๋น์ฉ์ ๋ฐ๋ก ์๋ ๊ฒ ๊ฐ๋๋ผ
ํ ์ด๋ธ ๋ง๋ค์ด๋ณด๊ธฐ
์ด๋ฒ์๋ ์ง์ ํ
์ด๋ธ์ ๋ง๋ค์ด๋ณด์.
์ต์
์ด ๊ทธ๋ ๊ฒ ๋ง์ ๊ฒ๋ ์๋๋ผ์, ๊ทธ๋ค์ง ์ด๋ ค์ธ ๊ฒ์ ์๋ค.
์ผ๋ฐ์ ์ธ ์ฌ์ฉ์ฌ๋ก์์๋ ๊ทธ๋ฅ ๊ธฐ๋ณธ ํํฐ์
๋์
๋ฐ์ดํฐ ๋ณด์กด ์์ ๋ง ์กฐ์ ํด๋ ์ถฉ๋ถํ ๊ฒ์ด๋ค.
์ด๋ ๊ฒ ๋ง๋ค์ด์ง๋ฉด ์ ๋ ๊ฒ์ด๋ค.
๊ทธ๋ผ ์ด๊ฒ๋ ๋ง์ฐฌ๊ฐ์ง๋ก ์ฟผ๋ฆฌ ์๋ํฐ๋ก ์ฟผ๋ฆฌ๋ฅผ ๋ ๋ ค๋ณผ ์ ์๋๋ฐ
๋น์ฐํ ๋ฐ์ดํฐ๊ฐ ์์ผ๋ ์๋ฌด๊ฒ๋ ์๋์ฌ ๊ฒ์ด๋ค.
์ด์ ๋ฐ์ดํฐ๋ฅผ ํ๋ ๋ฐ์ด๋ฃ์ด๋ณด์
๋ฐ์ดํฐ Insertํ๊ธฐ (Node.js)
๋ฐ์ดํฐ๋ฅผ ๋ฐ์ด๋ฃ์ผ๋ ค๋ฉด ์ฝ์๋ก๋ ์๋๊ณ , aws-sdk๋ฅผ ์จ์ผ๋ง ํ๋ค.
์ฌ๊ธฐ์๋ nodejs ์ฝ๋๋ฅผ ์์๋ก ๋ค์ด๋ณด๊ฒ ๋ค.
๋จผ์ ์ข ์์ฑ์ ์ค์นํ๊ณ
npm i @aws-sdk/client-timestream-write

์ด๋ฐ ์์ผ๋ก ์ง๋ฉด ๋๋ค.

const {
TimestreamWriteClient,
WriteRecordsCommand,
} = require("@aws-sdk/client-timestream-write");
async function main() {
const client = new TimestreamWriteClient({ region: "ap-northeast-1" });
const currentTime = Date.now().toString();
const command = new WriteRecordsCommand({
DatabaseName: "sampleDB",
TableName: "foobar",
Records: [
{
Dimensions: [
{ Name: "region", Value: "us-east-1" },
{ Name: "az", Value: "az1" },
],
MeasureName: "temperature",
MeasureValue: "70",
MeasureValueType: "DOUBLE",
Time: currentTime,
TimeUnit: "MILLISECONDS",
},
],
});
try {
const response = await client.send(command);
console.log(response);
} catch (err) {
console.error(err);
}
}
main();
์ข ํ๋ผ๋ฏธํฐ ๊ตฌ์ฑ์ด ํน์ดํ ํธ์ด๋ค.
DatabaseName๊ณผ TableName์ ๋ฐ๋ก ์ ๊ฒ์ด๋ผ ๋ฏฟ๋๋ค.
Time๊ณผ TimeUnit์ ๊ธฐ๋ณธํค๊ฐ ๋๋ ์๊ฐ ๊ธฐ์ค๊ฐ์ ๋ํ ํ๋๋ค. ์ ๊ฑด ๋ฐ๋ฆฌ์ด ๋จ์๋ก ์ ์๋ฅผ ๋ฐ์์ ๊ทธ๊ฑธ ํค๋ก ์ด๋ค๋ ๋ง์ด๋ค.
MeasureName, MeasureValue, MeasureValueType์ ํด๋น row ์ธก์ ๊ฐ์ ๋ํ ๊ณ ์ ํ๋๋ค.
๊ทธ๋ฆฌ๊ณ Dimensions์ ๋ค์ด์๋ ๊ฐ ์์๋ค์ด ์ข ์์ ๋กญ๊ฒ ์ ๋ ฅํ ์ ์๋ ์ผ์ข ์ ๋ฉํ๋ฐ์ดํฐ์ ์ํ๋ค.
์ ๋๋ก ๋ฃ์ผ๋ฉด
๋ค์ด๊ฐ๊ณ
์กฐํ์๋ ๋ฐ์์ด ๋ ๊ฒ์ด๋ค.
์์คํ ์์ค์์ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ์กฐํํด์ ์ฌ์ฉํ ์ผ์ด ์๋ค๋ฉด, ๋น์ทํ๊ฒ aws-sdk๋ฅผ ์จ์ query๋ฅผ ๋ ๋ฆฌ๊ณ ์๋ต์ ๋ฐ์์ ์ฐ๋ฉด ๋๋ค.
์ฐธ์กฐ
https://docs.aws.amazon.com/timestream/latest/developerguide/tcu.html
https://docs.aws.amazon.com/ko_kr/timestream/latest/developerguide/ts-limits.html
https://www.reddit.com/r/aws/comments/q19yc5/configuring_aws_timestream/