🏭 Vending Machine POC

Project Report | ✅ Account: 469749886325

1. วัตถุประสงค์โครงการProject Objectiveプロジェクト目的

โครงการนี้เป็น Proof of Concept (POC) สำหรับระบบตู้ขายสินค้าอัตโนมัติ (Vending Machine) ที่เชื่อมต่อกับ AWS Cloud Services เพื่อ:

  • บันทึกธุรกรรมการซื้อสินค้าแบบ Real-time ลง Amazon DynamoDB
  • สร้าง Data Pipeline อัตโนมัติ: DynamoDB → S3 → Glue Catalog → Athena → QuickSight
  • แสดง Dashboard วิเคราะห์ยอดขายแบบ Embedded ภายใน Web Application
  • รองรับการขยายตัวสำหรับตู้ขายสินค้าจำนวนมาก (100+ ตู้)
  • ประเมินค่าใช้จ่าย AWS สำหรับ Production deployment

ขอบเขตของ POC

  • สินค้า 7 รายการ: โคล่า 4 ชนิด, ขนม 2 ชนิด, ถั่ว 1 ชนิด
  • Web Application (Express.js + EJS + TypeScript) สำหรับจำลองการสั่งซื้อ
  • QuickSight Dashboard แบบ Embedded สำหรับดูยอดขาย
  • Property-Based Testing เพื่อพิสูจน์ความถูกต้องของระบบ

This project is a Proof of Concept (POC) for a Vending Machine system integrated with AWS Cloud Services to:

  • Record purchase transactions in real-time to Amazon DynamoDB
  • Build an automated Data Pipeline: DynamoDB → S3 → Glue Catalog → Athena → QuickSight
  • Display an embedded analytics Dashboard within the Web Application
  • Support scalability for large numbers of vending machines (100+)
  • Estimate AWS costs for Production deployment

POC Scope

  • 7 products: 4 cola variants, 2 snacks, 1 nuts
  • Web Application (Express.js + EJS + TypeScript) for simulating purchases
  • Embedded QuickSight Dashboard for sales analytics
  • Property-Based Testing to verify system correctness

本プロジェクトは、AWS Cloud Servicesと連携した自動販売機(Vending Machine)システムのProof of Concept(POC)です。目的:

  • 購入トランザクションをリアルタイムでAmazon DynamoDBに記録
  • 自動データパイプラインの構築:DynamoDB → S3 → Glue Catalog → Athena → QuickSight
  • Webアプリケーション内に埋め込み型分析ダッシュボードを表示
  • 大量の自動販売機(100台以上)へのスケーラビリティ対応
  • 本番デプロイメントのAWSコスト見積もり

POCの範囲

  • 商品7種類:コーラ4種、スナック2種、ナッツ1種
  • Webアプリケーション(Express.js + EJS + TypeScript)で購入をシミュレーション
  • 売上分析用の埋め込みQuickSightダッシュボード
  • システムの正確性を検証するProperty-Based Testing

2. สถาปัตยกรรมระบบและ AWS ServicesSystem Architecture & AWS ServicesシステムアーキテクチャとAWSサービス

Vending Machine POC — AWS Architecture 🏭 Web App Express + EJS TypeScript PutItem 📦 DynamoDB On-Demand Transactions Table Export 🪣 S3 Data Lake JSON Files Catalog 🔗 Glue Data Catalog Database + Table 🔍 Athena SQL Queries Serverless 📊 QuickSight Dashboard Embedded Embed SDK 🔐 IAM Users & Policies 🎫 STS Identity Check ☁️ AWS CloudFormation — Infrastructure as Code DynamoDB + S3 + Glue + Athena + QuickSight (DataSource → DataSet → Dashboard) Region: ap-southeast-1 (Singapore) | QuickSight Identity: us-east-1

AWS Services ที่ใช้

Serviceหน้าที่รายละเอียด
DynamoDBTransaction StoreOn-Demand mode, Partition Key: machine_id, Sort Key: timestamp
S3Data Lakeเก็บ JSON export จาก DynamoDB + Athena query results
GlueData CatalogDatabase + Table definition สำหรับ Athena
AthenaSQL AnalyticsServerless SQL query engine, scan data จาก S3
QuickSightDashboardEnterprise edition, Embedded mode, DataSource → DataSet → Dashboard
IAMAccess ControlIAM User + Policy สำหรับ vending machine access
STSIdentityGetCallerIdentity สำหรับแสดง account info
CloudFormationIaCDeploy ทุก resource ด้วย template เดียว

AWS Services Used

ServiceRoleDetails
DynamoDBTransaction StoreOn-Demand mode, Partition Key: machine_id, Sort Key: timestamp
S3Data LakeStores JSON exports from DynamoDB + Athena query results
GlueData CatalogDatabase + Table definition for Athena
AthenaSQL AnalyticsServerless SQL query engine, scans data from S3
QuickSightDashboardEnterprise edition, Embedded mode, DataSource → DataSet → Dashboard
IAMAccess ControlIAM User + Policy for vending machine access
STSIdentityGetCallerIdentity for displaying account info
CloudFormationIaCDeploy all resources with a single template

使用AWSサービス

サービス役割詳細
DynamoDBトランザクション保存On-Demandモード、Partition Key: machine_id、Sort Key: timestamp
S3データレイクDynamoDBからのJSONエクスポート + Athenaクエリ結果を保存
GlueデータカタログAthena用のDatabase + Table定義
AthenaSQL分析サーバーレスSQLクエリエンジン、S3からデータをスキャン
QuickSightダッシュボードEnterprise版、埋め込みモード、DataSource → DataSet → Dashboard
IAMアクセス制御自動販売機アクセス用のIAM User + Policy
STSID確認アカウント情報表示用のGetCallerIdentity
CloudFormationIaC単一テンプレートで全リソースをデプロイ

3. ประมาณการค่าใช้จ่ายCost Estimationコスト見積もり

สมมติฐาน: 100 ตู้ × 1,000 ธุรกรรม/วัน/ตู้ = 3,000,000 ธุรกรรม/เดือน | 1 QuickSight Dashboard Viewport (5 readers) | Region: ap-southeast-1 | อัตราแลกเปลี่ยน: 1 USD = 35 THB
Assumptions: 100 machines × 1,000 txn/day/machine = 3,000,000 txn/month | 1 QuickSight Dashboard Viewport (5 readers) | Region: ap-southeast-1 | Exchange rate: 1 USD = 35 THB
前提条件: 100台 × 1,000取引/日/台 = 3,000,000取引/月 | QuickSightダッシュボード1ビューポート(5リーダー) | リージョン: ap-southeast-1 | 為替レート: 1 USD = 35 THB
ServiceรายการปริมาณUSD/เดือนTHB/เดือนหมายเหตุ
DynamoDBWrite Request Units (WRU)3,000,000 WRU$2.38฿83.44$0.7946/ล้าน WRU
Read Request Units (RRU)3,000,000 RRU$0.48฿16.69$0.1589/ล้าน RRU
Storage (หลัง 12 เดือน)~18 GB$5.13฿179.5536M items × 0.5KB; 25GB แรกฟรี
รวม DynamoDB$7.99฿279.68
S3Storage~18 GB$0.45฿15.75JSON export
PUT/GET/LIST~10,000 req$0.05฿1.75Sync + Athena results
รวม S3$0.50฿17.50
GlueData Catalog2 objects$0.00฿0.00ฟรี (1M objects แรก)
AthenaSQL Queries~10 GB scanned$0.50฿17.50$5/TB scanned
รวม Athena$0.50฿17.50
QuickSightAuthor License1 user$24.00฿840.00สร้าง/จัดการ Dashboard
Reader Sessions (5 users)5 readers$25.00฿875.00$0.30/session สูงสุด $5/reader
SPICE Storage1 GB$0.00฿0.00ฟรี 1GB/author
รวม QuickSight$49.00฿1,715.00
IAMUsers & PoliciesN/A$0.00฿0.00ฟรีเสมอ
💰 รวมทั้งหมด (ต่อเดือน)$57.99฿2,029.68
ServiceItemQuantityUSD/moTHB/moNotes
DynamoDBWrite Request Units (WRU)3,000,000 WRU$2.38฿83.44$0.7946/million WRU
Read Request Units (RRU)3,000,000 RRU$0.48฿16.69$0.1589/million RRU
Storage (after 12 months)~18 GB$5.13฿179.5536M items × 0.5KB; first 25GB free
DynamoDB Subtotal$7.99฿279.68
S3Storage~18 GB$0.45฿15.75JSON export
PUT/GET/LIST~10,000 req$0.05฿1.75Sync + Athena results
S3 Subtotal$0.50฿17.50
GlueData Catalog2 objects$0.00฿0.00Free (first 1M objects)
AthenaSQL Queries~10 GB scanned$0.50฿17.50$5/TB scanned
Athena Subtotal$0.50฿17.50
QuickSightAuthor License1 user$24.00฿840.00Create/manage Dashboard
Reader Sessions (5 users)5 readers$25.00฿875.00$0.30/session max $5/reader
SPICE Storage1 GB$0.00฿0.00Free 1GB/author
QuickSight Subtotal$49.00฿1,715.00
IAMUsers & PoliciesN/A$0.00฿0.00Always free
💰 Total (per month)$57.99฿2,029.68
サービス項目数量USD/月THB/月備考
DynamoDBWrite Request Units (WRU)3,000,000 WRU$2.38฿83.44$0.7946/百万WRU
Read Request Units (RRU)3,000,000 RRU$0.48฿16.69$0.1589/百万RRU
ストレージ(12ヶ月後)~18 GB$5.13฿179.5536M items × 0.5KB; 最初の25GB無料
DynamoDB 小計$7.99฿279.68
S3ストレージ~18 GB$0.45฿15.75JSONエクスポート
PUT/GET/LIST~10,000 req$0.05฿1.75同期 + Athena結果
S3 小計$0.50฿17.50
Glueデータカタログ2 objects$0.00฿0.00無料(最初の1Mオブジェクト)
AthenaSQLクエリ~10 GB scanned$0.50฿17.50$5/TBスキャン
Athena 小計$0.50฿17.50
QuickSight著者ライセンス1 user$24.00฿840.00ダッシュボード作成/管理
リーダーセッション(5ユーザー)5 readers$25.00฿875.00$0.30/セッション 最大$5/リーダー
SPICEストレージ1 GB$0.00฿0.00著者1人あたり1GB無料
QuickSight 小計$49.00฿1,715.00
IAMユーザー & ポリシーN/A$0.00฿0.00常に無料
💰 合計(月額)$57.99฿2,029.68
📌 หมายเหตุ: ค่าใช้จ่ายหลัก (~84%) มาจาก QuickSight — DynamoDB, S3, Glue, Athena รวมกันไม่ถึง $9/เดือน แม้จะมี 3 ล้านธุรกรรม/เดือน ราคาอ้างอิงจาก AWS ap-southeast-1 ณ มีนาคม 2026
📌 Note: The primary cost (~84%) comes from QuickSight — DynamoDB, S3, Glue, and Athena combined cost less than $9/month even with 3 million transactions/month. Prices referenced from AWS ap-southeast-1 as of March 2026.
📌 注記: 主要コスト(約84%)はQuickSightによるもの — DynamoDB、S3、Glue、Athenaの合計は月300万トランザクションでも$9/月未満です。価格はAWS ap-southeast-1の2026年3月時点の参考値です。

3.1 กราฟวิเคราะห์ค่าใช้จ่ายCost Analysis Chartsコスト分析チャート

$0.019
ต่อ 1,000 ธุรกรรม
per 1,000 transactions
1,000取引あたり
฿0.67
ต่อ 1,000 ธุรกรรม
per 1,000 transactions
1,000取引あたり
84%
QuickSight (Fixed Cost)
QuickSight (Fixed Cost)
QuickSight(固定費)
<$9
Infra ทั้งหมด (ไม่รวม QS)
All Infra (excl. QS)
全インフラ(QS除く)

📈 ค่าใช้จ่ายรวมต่อเดือน vs จำนวนธุรกรรม (0 - 10 ล้าน)📈 Total Monthly Cost vs Transactions (0 - 10M)📈 月額総コスト vs 取引数(0〜1,000万)

🍩 สัดส่วนค่าใช้จ่าย (3M txn/mo)🍩 Cost Breakdown (3M txn/mo)🍩 コスト内訳(300万取引/月)

📊 Fixed vs Variable Cost📊 Fixed vs Variable Cost📊 固定費 vs 変動費

📉 ต้นทุนต่อธุรกรรม (Economy of Scale)📉 Cost per Transaction (Economy of Scale)📉 取引あたりコスト(規模の経済)

⚡ AWS vs On-Premise (ต่อเดือน)⚡ AWS vs On-Premise (per month)⚡ AWS vs オンプレミス(月額)

📅 ประมาณการค่าใช้จ่าย 12 เดือน (100 ตู้, เพิ่ม 10 ตู้/เดือน)📅 12-Month Cost Projection (100 machines, +10/month growth)📅 12ヶ月コスト予測(100台、月+10台増加)

💡 สรุป: ค่าใช้จ่าย AWS เพิ่มขึ้นแบบ Linear ตามจำนวนธุรกรรม แต่ต้นทุนต่อธุรกรรมลดลงเรื่อยๆ เพราะ Fixed Cost (QuickSight) ถูกเฉลี่ยออก — ยิ่งใช้มากยิ่งคุ้ม เทียบกับ On-Premise ที่ต้องลงทุน Server, Database License, BI Tool ล่วงหน้า AWS ไม่มี Upfront Cost และ Scale ได้ทันที
💡 Summary: AWS costs scale linearly with transactions, but cost-per-transaction decreases due to fixed costs (QuickSight) being amortized — the more you use, the cheaper per unit. Compared to On-Premise requiring upfront Server, Database License, and BI Tool investment, AWS has zero upfront cost and scales instantly.
💡 まとめ: AWSコストはトランザクション数に比例して増加しますが、固定費(QuickSight)が分散されるため、取引あたりのコストは減少します — 使えば使うほどお得です。サーバー、データベースライセンス、BIツールの初期投資が必要なオンプレミスと比較して、AWSは初期費用ゼロで即座にスケールできます。

4. ผลการทดสอบและคู่มือการใช้งานTest Results & Usage Guideテスト結果と使用ガイド

4.1 ผลการทดสอบ — 11/11 ผ่านทั้งหมด ✅

ระบบผ่านการทดสอบทั้งหมด 11 test cases: 5 Property-Based Tests (PBT) + 6 Unit Tests

#Test Nameประเภทตรวจสอบผลลัพธ์
1test_product_data_completenessPBT ×100ข้อมูลสินค้าครบถ้วนทุกฟิลด์PASS
2test_cola_price_in_valid_rangePBT ×100ราคาโคล่าอยู่ในช่วง 10-20 บาทPASS
3test_format_price_thb_contains_baht_symbolPBT ×100แสดงราคาเป็นสกุลเงินบาท (฿)PASS
4test_transaction_record_roundtripPBT ×100เขียน/อ่าน DynamoDB ข้อมูลตรงกันPASS
5test_transaction_record_completenessPBT ×100ธุรกรรมครบถ้วน UUID/timestamp ถูกต้องPASS
6test_product_catalog_has_7_itemsUnitCatalog มี 7 สินค้าPASS
7test_product_catalog_category_breakdownUnit4 cola, 2 snack, 1 nutsPASS
8test_write_transaction_to_dynamodbUnitPutItem + GetItem สำเร็จPASS
9test_write_transaction_dynamodb_failureUnitจัดการ DynamoDB error ได้PASS
10test_transaction_id_is_valid_uuidUnittransaction_id เป็น UUID v4PASS
11test_timestamp_is_iso8601Unittimestamp เป็น ISO 8601PASS

4.2 คู่มือการใช้งาน App

  1. หน้าสั่งซื้อสินค้า — เลือกสินค้าจาก 7 รายการ กดปุ่ม "สั่งซื้อ" ระบบจะบันทึกธุรกรรมลง DynamoDB ทันที
  2. หน้า Dashboard — แสดง QuickSight Dashboard แบบ Embedded พร้อมกราฟยอดขายรายวัน, ตามหมวดหมู่, ตามสินค้า
  3. หน้า Report — รายงานโครงการฉบับนี้

ข้อมูล AWS Identity (Account ID, User) จะแสดงที่ header ของทุกหน้า

4.1 Test Results — 11/11 All Passed ✅

The system passed all 11 test cases: 5 Property-Based Tests (PBT) + 6 Unit Tests

#Test NameTypeValidatesResult
1test_product_data_completenessPBT ×100All product fields are non-emptyPASS
2test_cola_price_in_valid_rangePBT ×100Cola price between 10-20 THBPASS
3test_format_price_thb_contains_baht_symbolPBT ×100Price formatted with ฿ symbolPASS
4test_transaction_record_roundtripPBT ×100DynamoDB write/read data matchesPASS
5test_transaction_record_completenessPBT ×100Transaction complete, UUID/timestamp validPASS
6test_product_catalog_has_7_itemsUnitCatalog has 7 productsPASS
7test_product_catalog_category_breakdownUnit4 cola, 2 snack, 1 nutsPASS
8test_write_transaction_to_dynamodbUnitPutItem + GetItem succeedsPASS
9test_write_transaction_dynamodb_failureUnitHandles DynamoDB errorsPASS
10test_transaction_id_is_valid_uuidUnittransaction_id is UUID v4PASS
11test_timestamp_is_iso8601Unittimestamp is ISO 8601PASS

4.2 App Usage Guide

  1. Order Page — Select from 7 products, click "Order" to record a transaction to DynamoDB instantly
  2. Dashboard Page — Displays an embedded QuickSight Dashboard with daily sales, category breakdown, and product charts
  3. Report Page — This project report

AWS Identity (Account ID, User) is displayed in the header of every page.

4.1 テスト結果 — 11/11 全て合格 ✅

システムは全11テストケースに合格:5つのProperty-Based Tests(PBT)+ 6つのUnit Tests

#テスト名種類検証内容結果
1test_product_data_completenessPBT ×100全商品フィールドが空でないことPASS
2test_cola_price_in_valid_rangePBT ×100コーラ価格が10〜20バーツの範囲内PASS
3test_format_price_thb_contains_baht_symbolPBT ×100価格に฿記号が含まれることPASS
4test_transaction_record_roundtripPBT ×100DynamoDB書き込み/読み取りデータの一致PASS
5test_transaction_record_completenessPBT ×100トランザクション完全性、UUID/タイムスタンプ有効PASS
6test_product_catalog_has_7_itemsUnitカタログに7商品あることPASS
7test_product_catalog_category_breakdownUnitコーラ4、スナック2、ナッツ1PASS
8test_write_transaction_to_dynamodbUnitPutItem + GetItem成功PASS
9test_write_transaction_dynamodb_failureUnitDynamoDBエラー処理PASS
10test_transaction_id_is_valid_uuidUnittransaction_idがUUID v4であることPASS
11test_timestamp_is_iso8601UnitタイムスタンプがISO 8601であることPASS

4.2 アプリ使用ガイド

  1. 注文ページ — 7商品から選択し、「注文」をクリックするとDynamoDBにトランザクションが即座に記録されます
  2. ダッシュボードページ — 日次売上、カテゴリ別、商品別チャートを含む埋め込みQuickSightダッシュボードを表示
  3. レポートページ — 本プロジェクトレポート

AWS Identity(アカウントID、ユーザー)は全ページのヘッダーに表示されます。

5. คู่มือการ DeployImplementation Guideデプロイガイド

5.1 Prerequisites

  • Node.js 18+ และ npm
  • Python 3.10+ (สำหรับ tests)
  • AWS Account พร้อม IAM credentials
  • AWS CLI (สำหรับ deploy CloudFormation)

5.2 Deploy Infrastructure (CloudFormation)

# Deploy stack พร้อม QuickSight
aws cloudformation deploy \
  --template-file infra/template.yaml \
  --stack-name vending-machine-dev \
  --parameter-overrides \
    Environment=dev \
    QuickSightUserArn=arn:aws:quicksight:us-east-1:ACCOUNT_ID:user/default/YOUR_USER \
  --capabilities CAPABILITY_NAMED_IAM \
  --region ap-southeast-1

# Sync ข้อมูลจาก DynamoDB ไป S3
bash infra/sync-dynamodb-to-s3.sh dev

5.3 ตั้งค่า Web Application

# ติดตั้ง dependencies
cd web-app
npm install

# ตั้งค่า .env (copy จาก .env.example)
cp .env.example .env
# แก้ไข AWS credentials และ QuickSight settings

# รัน development server
npx tsx watch src/server.ts

# หรือ build แล้วรัน production
npm run build
npm start

5.4 รัน Tests

# ติดตั้ง Python dependencies
pip install pytest hypothesis boto3 moto

# รัน tests ทั้งหมด
pytest tests/ -v

# หรือใช้ script
bash run-tests.sh

5.5 ตั้งค่า QuickSight Embedding

  1. สมัคร QuickSight Enterprise ใน AWS Console
  2. หา User ARN: aws quicksight list-users --aws-account-id ACCOUNT_ID --namespace default --region us-east-1
  3. ตั้งค่าใน .env: QUICKSIGHT_USER_ARN, QUICKSIGHT_DASHBOARD_ID, QUICKSIGHT_REGION
  4. ตั้งค่า Allowed Domains ใน QuickSight Console (เช่น http://localhost:3000)
  5. Restart app

5.1 Prerequisites

  • Node.js 18+ and npm
  • Python 3.10+ (for tests)
  • AWS Account with IAM credentials
  • AWS CLI (for CloudFormation deployment)

5.2 Deploy Infrastructure (CloudFormation)

# Deploy stack with QuickSight
aws cloudformation deploy \
  --template-file infra/template.yaml \
  --stack-name vending-machine-dev \
  --parameter-overrides \
    Environment=dev \
    QuickSightUserArn=arn:aws:quicksight:us-east-1:ACCOUNT_ID:user/default/YOUR_USER \
  --capabilities CAPABILITY_NAMED_IAM \
  --region ap-southeast-1

# Sync data from DynamoDB to S3
bash infra/sync-dynamodb-to-s3.sh dev

5.3 Configure Web Application

# Install dependencies
cd web-app
npm install

# Configure .env (copy from .env.example)
cp .env.example .env
# Edit AWS credentials and QuickSight settings

# Run development server
npx tsx watch src/server.ts

# Or build and run production
npm run build
npm start

5.4 Run Tests

# Install Python dependencies
pip install pytest hypothesis boto3 moto

# Run all tests
pytest tests/ -v

# Or use the script
bash run-tests.sh

5.5 Configure QuickSight Embedding

  1. Subscribe to QuickSight Enterprise in AWS Console
  2. Find User ARN: aws quicksight list-users --aws-account-id ACCOUNT_ID --namespace default --region us-east-1
  3. Configure in .env: QUICKSIGHT_USER_ARN, QUICKSIGHT_DASHBOARD_ID, QUICKSIGHT_REGION
  4. Set Allowed Domains in QuickSight Console (e.g., http://localhost:3000)
  5. Restart app

5.1 前提条件

  • Node.js 18+ および npm
  • Python 3.10+(テスト用)
  • IAM認証情報付きAWSアカウント
  • AWS CLI(CloudFormationデプロイ用)

5.2 インフラデプロイ(CloudFormation)

# QuickSight付きスタックをデプロイ
aws cloudformation deploy \
  --template-file infra/template.yaml \
  --stack-name vending-machine-dev \
  --parameter-overrides \
    Environment=dev \
    QuickSightUserArn=arn:aws:quicksight:us-east-1:ACCOUNT_ID:user/default/YOUR_USER \
  --capabilities CAPABILITY_NAMED_IAM \
  --region ap-southeast-1

# DynamoDBからS3へデータ同期
bash infra/sync-dynamodb-to-s3.sh dev

5.3 Webアプリケーション設定

# 依存関係インストール
cd web-app
npm install

# .env設定(.env.exampleからコピー)
cp .env.example .env
# AWS認証情報とQuickSight設定を編集

# 開発サーバー起動
npx tsx watch src/server.ts

# またはビルドして本番実行
npm run build
npm start

5.4 テスト実行

# Python依存関係インストール
pip install pytest hypothesis boto3 moto

# 全テスト実行
pytest tests/ -v

# またはスクリプト使用
bash run-tests.sh

5.5 QuickSight埋め込み設定

  1. AWS ConsoleでQuickSight Enterpriseに登録
  2. User ARNを取得: aws quicksight list-users --aws-account-id ACCOUNT_ID --namespace default --region us-east-1
  3. .envで設定: QUICKSIGHT_USER_ARN、QUICKSIGHT_DASHBOARD_ID、QUICKSIGHT_REGION
  4. QuickSight ConsoleでAllowed Domainsを設定(例: http://localhost:3000)
  5. アプリを再起動

6. ลิขสิทธิ์และข้อเสนอแนะด้านความปลอดภัยCopyright & Security Recommendations著作権とセキュリティ推奨事項

6.1 ลิขสิทธิ์

© 2026 Dakok — สงวนลิขสิทธิ์ทั้งหมด

โครงการนี้เป็น Proof of Concept ที่พัฒนาโดย Dakok สำหรับลูกค้า ห้ามนำไปใช้ในเชิงพาณิชย์โดยไม่ได้รับอนุญาต

6.2 ข้อเสนอแนะด้านความปลอดภัยสำหรับ Production

⚠️ สำคัญ: POC นี้ออกแบบมาเพื่อสาธิตเท่านั้น — ต้องปรับปรุงก่อนใช้งานจริง
  • 🔐 ห้ามเก็บ AWS Credentials ใน .env หรือ source code — ใช้ IAM Roles, Instance Profiles, หรือ AWS Secrets Manager แทน
  • 🔐 เปิดใช้ HTTPS — ใช้ SSL/TLS certificate (ACM + ALB หรือ CloudFront) สำหรับ production
  • 🔐 เพิ่ม Authentication — ใช้ Amazon Cognito หรือ OAuth 2.0 สำหรับ user login
  • 🔐 เปิด DynamoDB Encryption — เปิด encryption at rest (AWS managed key หรือ CMK)
  • 🔐 เปิด S3 Bucket Encryption — ใช้ SSE-S3 หรือ SSE-KMS
  • 🔐 ปิด S3 Public Access — ตรวจสอบว่า Block Public Access เปิดอยู่
  • 🔐 ใช้ VPC Endpoints — สำหรับ DynamoDB และ S3 เพื่อไม่ให้ traffic ออก internet
  • 🔐 เปิด CloudTrail — บันทึก API calls ทั้งหมดสำหรับ audit
  • 🔐 ใช้ Least Privilege IAM — จำกัด permissions ให้น้อยที่สุดที่จำเป็น
  • 🔐 เปิด WAF — ป้องกัน web attacks (SQL injection, XSS) ด้วย AWS WAF
  • 🔐 Rate Limiting — จำกัดจำนวน requests ต่อ IP เพื่อป้องกัน DDoS
  • 🔐 Input Validation — ตรวจสอบ input ทุกตัวที่ server-side
  • 🔐 Logging & Monitoring — ใช้ CloudWatch Logs + Alarms สำหรับ monitoring
  • 🔐 Backup Strategy — เปิด DynamoDB Point-in-Time Recovery (PITR) และ S3 Versioning
  • 🔐 Environment Separation — แยก dev/staging/prod ด้วย AWS Organizations + separate accounts

6.3 Tech Stack

LayerTechnologyVersion
RuntimeNode.js + TypeScript18+ / 5.7+
Web FrameworkExpress.js + EJS4.21 / 3.1
AWS SDKAWS SDK v33.700+
Testingpytest + Hypothesis (PBT)Python 3.12
Mockmoto (AWS mock)Latest
IaCAWS CloudFormation2010-09-09
DashboardAmazon QuickSightEnterprise

6.1 Copyright

© 2026 Dakok — All rights reserved

This project is a Proof of Concept developed by Dakok for a client. Commercial use without permission is prohibited.

6.2 Security Recommendations for Production

⚠️ Important: This POC is designed for demonstration only — improvements are required before production use.
  • 🔐 Never store AWS Credentials in .env or source code — Use IAM Roles, Instance Profiles, or AWS Secrets Manager instead
  • 🔐 Enable HTTPS — Use SSL/TLS certificates (ACM + ALB or CloudFront) for production
  • 🔐 Add Authentication — Use Amazon Cognito or OAuth 2.0 for user login
  • 🔐 Enable DynamoDB Encryption — Enable encryption at rest (AWS managed key or CMK)
  • 🔐 Enable S3 Bucket Encryption — Use SSE-S3 or SSE-KMS
  • 🔐 Block S3 Public Access — Verify Block Public Access is enabled
  • 🔐 Use VPC Endpoints — For DynamoDB and S3 to keep traffic off the internet
  • 🔐 Enable CloudTrail — Log all API calls for auditing
  • 🔐 Apply Least Privilege IAM — Restrict permissions to the minimum required
  • 🔐 Enable WAF — Protect against web attacks (SQL injection, XSS) with AWS WAF
  • 🔐 Rate Limiting — Limit requests per IP to prevent DDoS
  • 🔐 Input Validation — Validate all inputs server-side
  • 🔐 Logging & Monitoring — Use CloudWatch Logs + Alarms for monitoring
  • 🔐 Backup Strategy — Enable DynamoDB Point-in-Time Recovery (PITR) and S3 Versioning
  • 🔐 Environment Separation — Separate dev/staging/prod with AWS Organizations + separate accounts

6.3 Tech Stack

LayerTechnologyVersion
RuntimeNode.js + TypeScript18+ / 5.7+
Web FrameworkExpress.js + EJS4.21 / 3.1
AWS SDKAWS SDK v33.700+
Testingpytest + Hypothesis (PBT)Python 3.12
Mockmoto (AWS mock)Latest
IaCAWS CloudFormation2010-09-09
DashboardAmazon QuickSightEnterprise

6.1 著作権

© 2026 Dakok — 全著作権所有

本プロジェクトはDakokがクライアント向けに開発したProof of Conceptです。許可なく商用利用することは禁止されています。

6.2 本番環境向けセキュリティ推奨事項

⚠️ 重要: このPOCはデモンストレーション専用です — 本番使用前に改善が必要です。
  • 🔐 AWS認証情報を.envやソースコードに保存しない — IAM Roles、Instance Profiles、またはAWS Secrets Managerを使用
  • 🔐 HTTPSを有効化 — 本番環境ではSSL/TLS証明書(ACM + ALBまたはCloudFront)を使用
  • 🔐 認証を追加 — Amazon CognitoまたはOAuth 2.0でユーザーログインを実装
  • 🔐 DynamoDB暗号化を有効化 — 保存時の暗号化(AWSマネージドキーまたはCMK)を有効化
  • 🔐 S3バケット暗号化を有効化 — SSE-S3またはSSE-KMSを使用
  • 🔐 S3パブリックアクセスをブロック — Block Public Accessが有効であることを確認
  • 🔐 VPCエンドポイントを使用 — DynamoDBとS3のトラフィックをインターネット経由にしない
  • 🔐 CloudTrailを有効化 — 監査用に全APIコールを記録
  • 🔐 最小権限IAMを適用 — 必要最小限の権限に制限
  • 🔐 WAFを有効化 — AWS WAFでWebアタック(SQLインジェクション、XSS)を防御
  • 🔐 レート制限 — DDoS防止のためIPあたりのリクエスト数を制限
  • 🔐 入力検証 — サーバーサイドで全入力を検証
  • 🔐 ログ & モニタリング — CloudWatch Logs + Alarmsでモニタリング
  • 🔐 バックアップ戦略 — DynamoDB Point-in-Time Recovery(PITR)とS3 Versioningを有効化
  • 🔐 環境分離 — AWS Organizations + 別アカウントでdev/staging/prodを分離

6.3 技術スタック

レイヤー技術バージョン
ランタイムNode.js + TypeScript18+ / 5.7+
WebフレームワークExpress.js + EJS4.21 / 3.1
AWS SDKAWS SDK v33.700+
テストpytest + Hypothesis (PBT)Python 3.12
モックmoto (AWS mock)Latest
IaCAWS CloudFormation2010-09-09
ダッシュボードAmazon QuickSightEnterprise