Skip to main content

Amazon CodeGuru

Amazon CodeGuru คือบริการ AI-powered สำหรับตรวจสอบ code quality, security vulnerabilities และ application performance โดยอัตโนมัติ ประกอบด้วย 3 components หลักได้แก่ CodeGuru Reviewer (ตรวจสอบ code quality และ security), CodeGuru Profiler (วิเคราะห์ performance ของ application ที่รันอยู่จริง) และ CodeGuru Security (SAST scanning เต็มรูปแบบ) บริการนี้ฝึกจาก codebase ของ Amazon และ best practices จาก open source repositories กว่า 10,000 โปรเจกต์

Amazon CodeGuru ช่วยให้ทีมพัฒนา software สามารถตรวจจับปัญหาได้ตั้งแต่ development phase โดยไม่ต้องรอ manual code review ลด time-to-production และลดความเสี่ยงด้าน security ที่อาจเข้า production รองรับการ integrate กับ GitHub, GitHub Enterprise, GitLab, Bitbucket และ AWS CodeCommit

AWS Docs: https://docs.aws.amazon.com/codeguru/latest/reviewer-ug/welcome.html

สถาปัตยกรรม


ฟีเจอร์หลัก

CodeGuru Reviewer: Automated Code Review

ตรวจสอบ pull requests อัตโนมัติและให้ inline comments บน code ที่มีปัญหา วิเคราะห์ตั้งแต่ logic errors, resource leaks, concurrency issues ไปจนถึง AWS best practices ช่วย reviewer มนุษย์ประหยัดเวลาในส่วน boilerplate checks

CodeGuru Reviewer: Security Vulnerabilities

ตรวจจับ security vulnerabilities ในรูปแบบต่างๆ เช่น SQL injection, XSS, path traversal, hardcoded credentials, insecure cryptography, improper authentication และ OWASP Top 10 vulnerabilities ทั้งใน Java และ Python

CodeGuru Reviewer: AWS Best Practices

แนะนำการใช้ AWS SDK และ services อย่างถูกต้อง เช่น การใช้ pagination กับ AWS API, การ handle exceptions จาก AWS services, การ configure retry logic และการใช้ resource caching อย่างเหมาะสม

CodeGuru Reviewer: Resource Leak Detection

ตรวจจับ resource leaks เช่น database connections, file handles, network sockets หรือ memory ที่ไม่ถูก release อย่างถูกต้อง ป้องกันปัญหา memory leak และ connection pool exhaustion ใน production

CodeGuru Reviewer: Concurrency Issues

ตรวจจับ race conditions, deadlocks, thread safety issues และ improper synchronization ในโค้ดที่ใช้ multi-threading หรือ async/concurrent programming patterns

CodeGuru Reviewer: Input Validation

ตรวจสอบว่า user inputs ได้รับการ validate และ sanitize อย่างเหมาะสมก่อนใช้งาน ป้องกัน injection attacks และ data corruption

CodeGuru Profiler: CPU/Memory Profiling

วิเคราะห์ CPU utilization และ memory allocation ของ application ที่รันอยู่จริงใน production environment โดยมี overhead ต่ำมาก (< 5%) ทำให้ profile ได้แบบ continuous โดยไม่กระทบ performance

CodeGuru Profiler: Flame Graphs

แสดง flame graphs ที่ visualize call stacks และเวลาที่ใช้ใน functions ต่างๆ ทำให้ identify hotspots ได้ง่ายและรู้ว่า function ไหนกิน CPU/memory มากที่สุด

CodeGuru Profiler: Anomaly Detection

ตรวจจับเมื่อ application ใช้ resources ผิดปกติจาก baseline เช่น CPU spike หรือ memory leak ที่เพิ่งเกิดขึ้น แจ้งเตือนพร้อมระบุ function ที่เป็นสาเหตุ

CodeGuru Profiler: Cost Recommendations

คำนวณและแนะนำวิธีลดต้นทุน compute โดยระบุ inefficient code patterns ที่กิน CPU ไม่จำเป็น เช่น "ถ้าแก้ function X นี้จะประหยัดค่า EC2 ได้ประมาณ $200/เดือน"

CodeGuru Security: SAST Scanning

Static Application Security Testing เต็มรูปแบบ scan ทั้ง repository เพื่อหา vulnerabilities ไม่ใช่แค่ changed code ใน PR รองรับการ scan แบบ on-demand และแบบ scheduled

CodeGuru Security: Secret Detection

ตรวจจับ secrets ที่ commit เข้า repository โดยบังเอิญ เช่น AWS access keys, API tokens, database passwords, private keys และ OAuth tokens ก่อนที่จะ expose ออกสู่ภายนอก

CodeGuru Security: CWE/CVE Mapping

Map vulnerabilities ที่พบกับ CWE (Common Weakness Enumeration) และ CVE (Common Vulnerabilities and Exposures) standards เพื่อให้ทีม security เข้าใจ risk level และ prioritize การแก้ไข


การติดตั้งและการตั้งค่า

เชื่อมต่อ Repository (Reviewer)

  1. เข้า AWS Console > Amazon CodeGuru > Reviewer
  2. Associate repository (GitHub, GitLab, Bitbucket หรือ CodeCommit)
  3. ให้สิทธิ์ OAuth สำหรับ GitHub/Bitbucket
  4. CodeGuru จะ analyze repositoryอัตโนมัติและ review PRs ใหม่

ติดตั้ง Profiler Agent (Java)

<!-- เพิ่มใน pom.xml -->
<dependency>
<groupId>software.amazon.codeguruprofiler</groupId>
<artifactId>codeguru-profiler-java-agent-standalone</artifactId>
<version>1.2.4</version>
</dependency>

ติดตั้ง Profiler Agent (Python)

pip install codeguru_profiler_agent

IAM Permissions ที่จำเป็น

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"codeguru-reviewer:*",
"codeguru-profiler:*",
"codeguru-security:*",
"codecommit:*",
"s3:GetObject",
"s3:PutObject"
],
"Resource": "*"
}
]
}

วิธีใช้งาน

Associate Repository และ Request Code Review

import boto3

codeguru_reviewer = boto3.client('codeguru-reviewer', region_name='us-east-1')

# Associate GitHub repository
response = codeguru_reviewer.associate_repository(
Repository={
'GitHubEnterpriseServer': {
'ConnectionArn': 'arn:aws:codestar-connections:us-east-1:123456789:connection/abc',
'Name': 'my-company/my-app',
'Owner': 'my-company'
}
}
)
association_arn = response['RepositoryAssociation']['AssociationArn']

# Request on-demand code review
review_response = codeguru_reviewer.create_code_review(
Name='security-review-2024-01',
RepositoryAssociationArn=association_arn,
Type={
'RepositoryAnalysis': {
'RepositoryHead': {
'BranchName': 'main'
}
}
}
)
code_review_arn = review_response['CodeReview']['CodeReviewArn']

# ดู recommendations
recommendations = codeguru_reviewer.list_recommendations(
CodeReviewArn=code_review_arn
)

for rec in recommendations['RecommendationSummaries']:
print(f"\nFile: {rec['FilePath']}")
print(f"Line: {rec['StartLine']}-{rec['EndLine']}")
print(f"Type: {rec['Type']}")
print(f"Severity: {rec.get('Severity', 'N/A')}")
print(f"Recommendation: {rec['Description'][:200]}...")

ใช้งาน CodeGuru Profiler (Python)

from codeguru_profiler_agent import Profiler
import time

# เริ่ม profiling
profiler = Profiler(
profiling_group_name='my-python-app',
region_name='ap-southeast-1'
)
profiler.start()

# Code ของ application ปกติ
def process_orders(orders):
"""ฟังก์ชันที่ต้องการ profile"""
results = []
for order in orders:
# Simulate processing
result = calculate_shipping_cost(order)
result = apply_discounts(order, result)
results.append(result)
return results

def calculate_shipping_cost(order):
"""ฟังก์ชันที่อาจเป็น hotspot"""
# Expensive calculation
import hashlib
for _ in range(1000): # unnecessary loop - Profiler จะตรวจพบ
hashlib.sha256(str(order).encode()).hexdigest()
return order.get('weight', 0) * 15.0

# หยุด profiling เมื่อ application จะหยุดทำงาน
# profiler.stop() # optional - agent จัดการให้อัตโนมัติ

CodeGuru Profiler สำหรับ Java (Spring Boot)

// เพิ่มใน application startup
import software.amazon.codeguruprofiler.java.agent.Profiler;

@SpringBootApplication
public class MyApplication {
public static void main(String[] args) {
Profiler.builder()
.profilingGroupName("my-spring-boot-app")
.build()
.start();

SpringApplication.run(MyApplication.class, args);
}
}

CodeGuru Security Scan

# Scan โดยใช้ AWS CLI
aws codeguru-security create-scan \
--resource-id '{"codeArtifacts": {"sourceCodeArtifactsObjectKey": "my-code.zip"}}' \
--scan-name "security-scan-2024-01" \
--scan-type "Standard"

# ดู findings
aws codeguru-security get-findings \
--scan-name "security-scan-2024-01" \
--status "Open"

สร้าง CI/CD Pipeline Integration

# .github/workflows/codeguru.yml
name: CodeGuru Security Scan

on:
pull_request:
branches: [main, develop]

jobs:
security-scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3

- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v2
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: us-east-1

- name: CodeGuru Security Scan
uses: aws-actions/codeguru-reviewer@v1
with:
s3_bucket: codeguru-reviewer-my-bucket

- name: Upload results to GitHub Security Tab
uses: github/codeql-action/upload-sarif@v2
with:
sarif_file: codeguru-results.sarif.gz

ราคา (ประมาณการในบาท)

รายการราคา USDราคา THB (1 USD = 35 บาท)
CodeGuru Reviewer$10/100 lines of code/เดือน~350 บาท/100 lines/เดือน
CodeGuru Profiler$5/host/เดือน~175 บาท/host/เดือน
CodeGuru Security$0.50/10K lines/เดือน~17.50 บาท/10K lines/เดือน

Free Tier:

  • Reviewer: ฟรี 90 วันแรก สูงสุด 100,000 lines of code
  • Profiler: ฟรี 1 compute instance แรก

ตัวอย่างค่าใช้จ่าย: ทีม 10 คน มี codebase 500,000 lines, run บน 5 servers

  • Reviewer: 5,000 x $10 = $50/เดือน (~1,750 บาท)
  • Profiler: 5 hosts x $5 = $25/เดือน (~875 บาท)
  • Security: 50 x $0.50 = $25/เดือน (~875 บาท)
  • รวม ~3,500 บาท/เดือน

เหมาะสำหรับ

  • ทีม development ที่ต้องการ automated code quality gate ใน CI/CD pipeline
  • องค์กรที่ต้องการลดเวลา manual code review และ detect security issues ก่อน production
  • แอปพลิเคชัน Java/Python ที่มี performance issues และต้องการหา root cause
  • ทีม security ที่ต้องการ continuous application security testing
  • บริษัทที่มี compliance requirements เช่น PCI DSS, SOC 2, ISO 27001
  • ทีมที่ต้องการ enforce coding standards และ best practices อย่างสม่ำเสมอ

ใช้ร่วมกับ AWS Services

  • AWS CodeCommit - integrate Reviewer สำหรับ PR reviews อัตโนมัติ
  • AWS CodePipeline - เพิ่ม security scanning ใน deployment pipeline
  • Amazon CloudWatch - monitor profiler metrics และ performance trends
  • AWS Security Hub - รวม CodeGuru Security findings กับ security posture ภาพรวม
  • Amazon EventBridge - trigger actions เมื่อพบ critical vulnerabilities
  • AWS Lambda - deploy Python functions พร้อม Profiler agent
  • Amazon EC2/ECS/EKS - attach Profiler agent ให้ Java/Python applications

Use Case ตัวอย่าง

1. Fintech Startup ปิด Security Gaps ก่อน Production

ทีม backend ของ startup fintech integrate CodeGuru Reviewer กับ GitHub โดย CodeGuru ตรวจ PR ทุกรายการอัตโนมัติ ในเดือนแรก CodeGuru ตรวจพบ hardcoded API key ใน configuration file, SQL injection vulnerability ใน user search function และ resource leak ใน database connection pool ทีมแก้ไขได้ทั้งหมดก่อน merge เข้า main branch ลดเวลา manual security review ได้ 70% และไม่มี security incident ในปีแรก

2. E-Commerce Platform แก้ Performance Bottleneck

แพลตฟอร์ม e-commerce ขนาดใหญ่ใช้ CodeGuru Profiler บน Java application servers 20 ตัว ระบบตรวจพบว่า product search function ใช้เวลา 35% ของ CPU ทั้งหมด เนื่องจากมีการ serialize/deserialize JSON ซ้ำซ้อน หลังจาก optimize caching strategy ตามที่ Profiler แนะนำ response time ลดลงจาก 800ms เป็น 120ms และสามารถลด server count จาก 20 เหลือ 12 ประหยัดค่า EC2 ได้กว่า 400,000 บาท/ปี

3. Healthcare SaaS ตรวจสอบ HIPAA Compliance

บริษัทพัฒนา healthcare SaaS ใช้ CodeGuru Security scan codebase ทั้งหมดก่อน launch เพื่อหา vulnerabilities ที่อาจกระทบ HIPAA compliance ระบบตรวจพบการ log ข้อมูล PHI (Protected Health Information) โดยไม่ได้ตั้งใจ, การ encrypt ข้อมูลที่ไม่ถูกต้อง และ path traversal vulnerability ที่อาจให้ attacker เข้าถึงไฟล์ทางการแพทย์ได้ แก้ไขได้ทั้งหมดก่อน go-live ป้องกันความเสียหายทางกฎหมายและ reputation