目次
AWS Compute Optimizer 完全ガイド v2.0
ML 駆動リソース最適化・Generative Insights・Cost & Performance 削減
ドキュメントメタデータ
- 最終更新: 2026-04-26
- バージョン: v2.0
- 対象者: クラウドアーキテクト、DevOps エンジニア、FinOps チーム、CTO
- 難易度: 中級
- 関連サービス: Cost Explorer、Trusted Advisor、AWS Systems Manager、CloudWatch、Organizations
- 推奨: Organizations 全体での常時有効化・月次レビュー
概要と課題
本質
AWS Compute Optimizer は 「機械学習でリソース利用状況を分析し、EC2・Lambda・ECS・EBS・RDS・Aurora の最適なサイズを推奨する ML ベースリソースサイジングサービス」 である。CloudWatch メトリクス・カスタムメトリクス(Datadog・Dynatrace)を 14 日間(Enhanced Observability で 93 日間)分析し、過剰プロビジョニング・過少プロビジョニングを検出。具体的な推奨インスタンスタイプ・メモリサイズ・IOPS・ボリュームタイプ変更と月次コスト削減額を定量化する。基本機能は無料。
このサービスを選ぶ理由
なぜ AWS Compute Optimizer なのか?
-
データドリブンなリソースサイジング
- 経験則ではなく、実際の CPU・メモリ・ネットワーク使用率を 14 日間(93 日間)分析
- 機械学習で「最適」「過剰」「過少」を自動判定
- 月次コスト削減額を定量化(例: m5.xlarge → m5.large で $45/月削減)
-
複数リソースタイプの横断分析
- EC2 インスタンス・Auto Scaling グループ・EBS ボリューム・Lambda・ECS・RDS・Aurora を一元管理
- Cost Explorer のコスト可視化だけでは「何を変えるか」不明だが、Optimizer が具体的変更先を提示
-
Graviton / Arm64 への移行推奨
- AWS Graviton プロセッサ(Arm64)への自動移行提案
- 同等パフォーマンスで 20~30% コスト削減が可能
-
gp2 → gp3 ストレージ最適化
- EBS gp2 ボリュームの gp3 移行推奨・自動スケジューリング
- 平均 20% のコスト削減(同等パフォーマンス)
-
Organizations 全体での集約管理
- 全アカウント・全リージョンの推奨事項を一元収集
- 組織全体での削減機会を可視化(年間数百万ドルのコスト削減機会)
-
基本機能が無料
- 14 日分析:無料
- Enhanced Observability(93 日分析):有料($0.0003288/vCPU/時間)
- ROI が高い
このサービスを選ばない理由
- リアルタイムスケーリング → Auto Scaling・Karpenter
- 複雑な料金モデル分析 → AWS Trusted Advisor・Cloudability(サードパーティ)
- カスタムメトリクスのみの最適化 → CloudWatch Application Insights
アーキテクチャと設計原則
全体構成図(Mermaid 1)
graph TB
subgraph ResourceLayer["AWS リソース層"]
EC2["EC2 Instances"]
Lambda["Lambda Functions"]
ECS["ECS Services"]
EBS["EBS Volumes"]
RDS["RDS Databases"]
Aurora["Aurora Clusters"]
ASG["Auto Scaling Groups"]
end
subgraph MetricsLayer["メトリクス収集層"]
CloudWatch["CloudWatch Metrics"]
Custom["Custom Metrics<br/>(Datadog/Dynatrace)"]
Enhanced["Enhanced Infrastructure<br/>Metrics (Paid)"]
end
subgraph AnalysisLayer["ML 分析層"]
DataCollect["14日(93日)分析"]
MLModel["ML Model<br/>・CPU使用率分析<br/>・Memory推測<br/>・Network I/O<br/>・IOPS分析"]
Recommendation["推奨生成"]
end
subgraph RecommendationLayer["推奨層"]
Finding["Finding<br/>(最適・過剰・過少)"]
Suggestion["Generative Insights<br/>(最適化提案)"]
CostImpact["Cost Impact<br/>(削減額)"]
end
subgraph ConsumptionLayer["利用層"]
Console["Console UI"]
API["API"]
Export["S3 Export"]
Reports["Cost Reports"]
end
EC2 --> CloudWatch
Lambda --> CloudWatch
ECS --> CloudWatch
EBS --> CloudWatch
RDS --> CloudWatch
Aurora --> CloudWatch
ASG --> CloudWatch
CloudWatch --> DataCollect
Custom --> DataCollect
Enhanced --> DataCollect
DataCollect --> MLModel
MLModel --> Recommendation
Recommendation --> Finding
Recommendation --> Suggestion
Recommendation --> CostImpact
Finding --> Console
Suggestion --> Console
CostImpact --> Console
Console --> API
Console --> Export
Console --> Reports
推奨フロー(Mermaid 2)
sequenceDiagram
participant User as ユーザー
participant Optimizer as Compute Optimizer
participant Metrics as CloudWatch/Custom
participant ML as ML Model
participant Console as Console
User->>Optimizer: 有効化(Opt-in)
Optimizer->>Metrics: メトリクス収集開始
Note over Metrics: 14日(93日)データ蓄積
Metrics->>ML: メトリクスデータ送信
ML->>ML: リソース利用パターン学習
ML->>Console: 推奨生成・表示
Console->>User: Dashboard に推奨表示
User->>User: 推奨を確認・実装判断
コアコンポーネント
1. リソース推奨対象
+ EC2 Instances
→ インスタンスタイプ・サイズ最適化
→ Graviton プロセッサ移行推奨
+ EC2 Auto Scaling Groups
→ グループ内のインスタンスタイプ最適化
→ スポット インスタンス混在推奨
+ EBS Volumes
→ gp2 → gp3 移行推奨
→ IOPS・スループット最適化
+ AWS Lambda
→ メモリサイズ最適化
→ CPU・同時実行数推奨
+ ECS Services (Fargate)
→ vCPU・メモリの最適サイズ推奨
+ Amazon RDS
→ DB インスタンスクラス最適化
→ 多読レプリカ設定推奨
+ Amazon Aurora
→ インスタンスクラス最適化
→ ライターレプリカ構成推奨
2. Finding(推奨ステータス)
OPTIMIZED(最適)
→ 現状のリソースが最適
→ 変更不要・コスト効率化の余地なし
OVER_PROVISIONED(過剰)
→ リソースが過剰に割り当てられている
→ コスト削減の余地あり(推奨)
→ 性能リスク(PerfRisk): 0.0~10(低リスク推奨)
UNDER_PROVISIONED(過少)
→ リソースが不足している可能性
→ パフォーマンス問題のリスク
→ 優先度: 高(即座に改善推奨)
NONE(データ不足)
→ メトリクス蓄積期間不足(< 14 日)
→ 推奨生成不可
3. Recommendation Options(複数推奨)
EC2 インスタンスの場合:
1. インスタンスタイプ(例: m5.xlarge → m6g.large)
2. 期待される月次削減額
3. 性能リスク(PerfRisk): 0.0~10
4. ネットワークパフォーマンス変化
例:
Current: m5.xlarge (4 vCPU, 16GB メモリ, $0.192/時間)
Rec 1: m6g.large (2 vCPU, 8GB メモリ, $0.099/時間)
Cost Saving: $66/月, PerfRisk: 0.02 (低い)
Rec 2: t3.large (2 vCPU, 8GB メモリ, $0.083/時間)
Cost Saving: $80/月, PerfRisk: 0.05 (低い)
4. メトリクス分析対象
EC2:
- CPU 使用率(平均・ピーク)
- メモリ使用率(推定値・CloudWatch Agent 経由)
- ネットワーク I/O(in/out)
- ディスク I/O(read/write)
Lambda:
- 実行時間(duration)
- メモリ使用量(max memory used)
- 呼び出し数(invocations)
- エラー率
RDS:
- CPU 使用率
- DB 接続数
- I/O 操作
- ストレージ使用量
ECS Fargate:
- CPU 使用率
- メモリ使用率
- ネットワーク I/O
EBS:
- IOPS 使用率
- スループット使用率
- ストレージ容量 使用率
5. Performance Risk(パフォーマンスリスク)
リスク評価: 0.0~10.0
0~2: Very Low Risk(推奨・即座に実装可能)
2~4: Low Risk(推奨・テスト後実装)
4~6: Moderate Risk(慎重に検証)
6~8: High Risk(段階的に実装)
8~10: Very High Risk(実装前に詳細検証)
例:
m5.xlarge → m6g.large: PerfRisk = 0.02(即座に実装可)
m5.xlarge → t3.large: PerfRisk = 0.05(即座に実装可)
m5.xlarge → t2.large: PerfRisk = 3.5 (テスト後に実装)
主要ユースケース
1. 新規プロジェクトのリソースサイジング
シナリオ: 新規 Web API をデプロイ・初期設定 m5.xlarge(過剰に設定)
Day 1-14: CloudWatch でメトリクス収集
- 実測:CPU 平均 18%・ピーク 35%
- 実測:メモリ 8GB / 16GB(50% 使用)
Day 14: Compute Optimizer が推奨を生成
推奨: m5.large(2 vCPU, 8GB)
Cost Saving: $45/月(52% 削減)
PerfRisk: 0.01(最小)
実装後: 安定稼働確認・コスト削減確認
2. 年次コスト削減施策
シナリオ: 組織全体 1,000 台の EC2 インスタンス
Compute Optimizer で一括分析:
OVER_PROVISIONED: 620 台
OPTIMIZED: 280 台
UNDER_PROVISIONED: 100 台
削減見積もり:
620 × $45/月(平均) = $27,900/月削減
年間: $334,800 削減
優先順位:
1. UNDER_PROVISIONED(パフォーマンスリスク)
2. OVER_PROVISIONED + PerfRisk < 2.0
3. OVER_PROVISIONED + PerfRisk 2.0~4.0
3. gp2 → gp3 ストレージ移行
シナリオ: EBS gp2 ボリューム 500 個(各 100GB, 3000 IOPS)
月次コスト(gp2):
500 vol × (100GB × $0.10 + 3000 IOPS × $0.07) = $11,500/月
Compute Optimizer 推奨:
gp3 に移行・3000 IOPS → 2000 IOPS に最適化
(実際の使用率が 2000 IOPS 程度)
月次コスト(gp3):
500 vol × (100GB × $0.08 + 2000 IOPS × $0.06) = $7,000/月
削減額: $4,500/月(年間 $54,000)
互換性: ほぼ 100%・リスク最小
4. Lambda メモリ最適化
シナリオ: Lambda 関数 1,000 個・平均メモリ設定 3GB
実測分析:
実使用メモリ: 平均 1.2GB
実行時間: 平均 0.5 秒
月間実行数: 1 億回
現在のコスト:
1 億回 × 3GB × 0.0000166667 = $5,000/月
推奨: メモリを 3GB → 1.5GB に削減
- 実行時間が 0.5 秒 → 0.55 秒に増加
- 但しメモリ削減による削減額 > 実行時間増加による費用増加
新コスト:
1 億回 × 1.5GB × 0.0000166667 = $2,500/月
削減額: $2,500/月(年間 $30,000)
5. Graviton への移行
シナリオ: x86-64 インスタンス m5.2xlarge → m6g.2xlarge への移行
m5.2xlarge の場合:
vCPU: 8, Memory: 32GB
cost: $0.384/時間
m6g.2xlarge(Graviton)の場合:
vCPU: 8, Memory: 32GB
cost: $0.274/時間
コスト削減: $0.110/時間 = 28.6% 削減
月次削減: $0.110 × 730 = $80.30/月
前提条件:
- ARM64 互換のアプリケーション
- コンテナ化されたワークロード
6. Auto Scaling Group の最適化
シナリオ: ASG に 10 台の t3.large インスタンス
Compute Optimizer が提案:
→ スポットインスタンス 60% + オンデマンド 40% で混在化
→ 期待削減額: $120/月
実装:
OnDemand キャパシティ: 4 台(40%)
Spot キャパシティ: 6 台(60%)
結果:
スポット価格: $0.045/時間(t3.large)
オンデマンド: $0.0832/時間
月次コスト削減: $0.045 × 4 × 730 + 0.0832 × 6 × 730 = 削減
7. RDS インスタンスクラス最適化
シナリオ: RDS db.r5.2xlarge(メモリ最適・8 vCPU・64GB)
実使用メモリ: 平均 32GB・ピーク 48GB
Compute Optimizer が提案:
→ db.r6g.xlarge(Graviton・4 vCPU・32GB)に変更
Cost Impact:
db.r5.2xlarge: $3.50/時間
db.r6g.xlarge: $1.62/時間
削減額: $1.88/時間 = $1,370/月
8. ECS Fargate タスク最適化
シナリオ: ECS Fargate タスク・vCPU: 4・メモリ: 8GB
100 個のタスク実行・24 時間稼働
実測分析:
実使用 vCPU: 1.5(最大値)
実使用メモリ: 4GB(最大値)
推奨:
vCPU: 4 → 2
メモリ: 8GB → 5GB
Cost Impact(Fargate):
Before: 4 vCPU × $0.04096/時間 + 8GB × $0.004445/時間 = $0.20/時間
After: 2 vCPU × $0.04096/時間 + 5GB × $0.004445/時間 = $0.104/時間
削減額: 100 タスク × ($0.20 - $0.104) × 24 × 30 = $27,648/月
9. Aurora インスタンスサイジング
シナリオ: Aurora MySQL・3 台の db.r5.xlarge クラスタ
実測:
Primary: CPU 25%・メモリ 30%
Read Replica 1: CPU 18%・メモリ 25%
Read Replica 2: CPU 22%・メモリ 28%
推奨:
Primary: db.r5.xlarge → db.r6g.large
Replica 1-2: db.r5.xlarge → db.r6g.large
削減額:
Before: 3 × $3.50 = $10.50/時間
After: 3 × $1.62 = $4.86/時間
月次削減: ($10.50 - $4.86) × 730 = $4,128/月
10. Organizations 全体の一括分析
シナリオ: 50 個のメンバーアカウント・計 5,000 リソース
実施:
1. 管理アカウントで Optimizer を有効化
2. include-member-accounts フラグを設定
3. 全アカウントのメトリクスを一元収集
結果:
全リソースの推奨を一元管理
年間削減見積もり:
EC2: $800,000
Lambda: $150,000
EBS: $200,000
RDS: $100,000
Total: $1,250,000
設定・操作の具体例
CLI 操作(AWS CLI)
1. Compute Optimizer 有効化(アカウントレベル)
# アカウントで有効化
aws compute-optimizer update-enrollment-status \
--status Active
# 確認
aws compute-optimizer get-enrollment-status
2. Organizations 全体での有効化
# 管理アカウントから実行
aws compute-optimizer update-enrollment-status \
--status Active \
--include-member-accounts
# 確認(レスポンス例)
# {
# "status": "ACTIVE",
# "statusReason": "Account is active for compute optimizer"
# }
3. Enhanced Observability の有効化(有料)
# 14 日 → 93 日に拡張
aws compute-optimizer put-recommendation-preferences \
--resource-type Ec2Instance \
--scope Name=Ec2Instance,Value=All \
--enhanced-infrastructure-metrics Active
4. EC2 推奨事項の取得
# 特定インスタンスの推奨
aws compute-optimizer get-ec2-instance-recommendations \
--instance-arns arn:aws:ec2:ap-northeast-1:123456789012:instance/i-0123456789abcdef0 \
--query 'instanceRecommendations[*].{
InstanceType:currentInstanceType,
Finding:finding,
RecommendedType:recommendationOptions[0].instanceType,
MonthlySavings:recommendationOptions[0].savingsOpportunity.estimatedMonthlySavings.value,
PerfRisk:recommendationOptions[0].performanceRisk
}' \
--output table
5. 過剰プロビジョニングされたインスタンスを一括取得
aws compute-optimizer get-ec2-instance-recommendations \
--filters name=Finding,values=OVER_PROVISIONED \
--query 'instanceRecommendations[*].{
Instance:instanceArn,
CurrentType:currentInstanceType,
BestOption:recommendationOptions[0].instanceType,
EstimatedSavings:recommendationOptions[0].savingsOpportunity.estimatedMonthlySavings.value
}' \
--output csv > over-provisioned-instances.csv
6. Lambda 関数の推奨事項
aws compute-optimizer get-lambda-function-recommendations \
--filters name=Finding,values=OVER_PROVISIONED \
--query 'lambdaFunctionRecommendations[*].{
Function:functionArn,
CurrentMemory:currentMemorySize,
RecommendedMemory:memorySizeRecommendationOptions[0].memorySize,
MonthlySavings:memorySizeRecommendationOptions[0].savingsOpportunity.estimatedMonthlySavings.value
}' \
--output table
7. EBS ボリューム(gp2 → gp3 推奨)
aws compute-optimizer get-ebs-volume-recommendations \
--filters name=Finding,values=OPTIMIZABLE \
--query 'volumeRecommendations[*].{
VolumeId:volumeArn,
CurrentType:currentConfiguration.volumeType,
RecommendedType:volumeRecommendationOptions[0].configuration.volumeType,
MonthlySavings:volumeRecommendationOptions[0].savingsOpportunity.estimatedMonthlySavings.value
}' \
--output table
8. 推奨事項を S3 にエクスポート
# EC2 推奨をCSV でS3 エクスポート
aws compute-optimizer export-ec2-instance-recommendations \
--s3-destination-config '{
"bucket": "my-compute-optimizer-exports",
"keyPrefix": "recommendations/2026-04/"
}' \
--file-format Csv \
--fields instanceName,instanceArn,finding,recommendationOptions.instanceType,recommendationOptions.estimatedMonthlySavings.value
# 完了を待機
aws s3 ls s3://my-compute-optimizer-exports/recommendations/2026-04/
SDK 操作(Python)
1. EC2 推奨事項を取得して CSV に出力
import boto3
import csv
from datetime import datetime
def get_ec2_recommendations_to_csv():
client = boto3.client('compute-optimizer', region_name='ap-northeast-1')
# 推奨取得(ページネーション対応)
paginator = client.get_paginator('get_ec2_instance_recommendations')
records = []
for page in paginator.paginate(filters=[
{'name': 'Finding', 'values': ['OVER_PROVISIONED']}
]):
for rec in page.get('instanceRecommendations', []):
for opt in rec.get('recommendationOptions', []):
records.append({
'InstanceId': rec['instanceArn'].split('/')[-1],
'CurrentType': rec['currentInstanceType'],
'RecommendedType': opt['instanceType'],
'MonthlySavings': opt['savingsOpportunity']['estimatedMonthlySavings']['value'],
'PerfRisk': opt['performanceRisk'],
'Finding': rec['finding']
})
# CSV に保存
csv_file = f"recommendations-{datetime.now().strftime('%Y%m%d-%H%M%S')}.csv"
with open(csv_file, 'w', newline='') as f:
writer = csv.DictWriter(f, fieldnames=records[0].keys())
writer.writeheader()
writer.writerows(records)
print(f"Saved {len(records)} recommendations to {csv_file}")
return records
2. Organizations 全体の推奨事項を集約
import boto3
def get_org_wide_recommendations():
organizations = boto3.client('organizations')
compute_optimizer = boto3.client('compute-optimizer', region_name='ap-northeast-1')
# メンバーアカウント一覧
accounts = organizations.list_accounts()['Accounts']
total_savings = 0
for account in accounts:
if account['Status'] != 'ACTIVE':
continue
account_id = account['Id']
# 各アカウントの推奨を取得
recommendations = compute_optimizer.get_recommendation_summaries(
account_ids=[account_id]
)
for summary in recommendations.get('recommendationSummaries', []):
summaries = summary.get('summaries', [])
for s in summaries:
if s.get('name') == 'OVER_PROVISIONED':
# ここで削減額を計算(simplified)
pass
print(f"Total estimated annual savings: ${total_savings:,.0f}")
IaC 操作(CloudFormation / Terraform)
CloudFormation - 自動実装スタック
AWSTemplateFormatVersion: '2010-09-09'
Description: 'Compute Optimizer Automation'
Resources:
ComputeOptimizerRole:
Type: AWS::IAM::Role
Properties:
RoleName: compute-optimizer-automation-role
AssumeRolePolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Principal:
Service: lambda.amazonaws.com
Action: sts:AssumeRole
ManagedPolicyArns:
- arn:aws:iam::aws:policy/ComputeOptimizerFullAccess
- arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
Policies:
- PolicyName: EC2ModifyInstance
PolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Action:
- ec2:ModifyInstanceAttribute
- ec2:DescribeInstances
Resource: '*'
ComputeOptimizerAutomationLambda:
Type: AWS::Lambda::Function
Properties:
FunctionName: compute-optimizer-automation
Handler: index.lambda_handler
Role: !GetAtt ComputeOptimizerRole.Arn
Runtime: python3.11
Code:
ZipFile: |
import boto3
import json
compute_optimizer = boto3.client('compute-optimizer')
ec2 = boto3.client('ec2')
def lambda_handler(event, context):
# オーバープロビジョニング推奨を自動取得
response = compute_optimizer.get_ec2_instance_recommendations(
filters=[{'name': 'Finding', 'values': ['OVER_PROVISIONED']}],
maxResults=100
)
for rec in response.get('instanceRecommendations', []):
# 検証ロジック(手動確認)
print(f"Instance {rec['instanceArn']}: {rec['currentInstanceType']} -> {rec['recommendationOptions'][0]['instanceType']}")
return {
'statusCode': 200,
'body': json.dumps('Recommendations retrieved')
}
ComputeOptimizerSchedule:
Type: AWS::Events::Rule
Properties:
Description: Daily Compute Optimizer Report
ScheduleExpression: cron(0 9 * * ? *)
State: ENABLED
Targets:
- Arn: !GetAtt ComputeOptimizerAutomationLambda.Arn
Id: compute-optimizer-target
PermissionForEventsToInvokeLambda:
Type: AWS::Lambda::Permission
Properties:
FunctionName: !Ref ComputeOptimizerAutomationLambda
Action: lambda:InvokeFunction
Principal: events.amazonaws.com
SourceArn: !GetAtt ComputeOptimizerSchedule.Arn
Terraform - 推奨事項エクスポート設定
resource "aws_s3_bucket" "compute_optimizer_exports" {
bucket = "my-org-compute-optimizer-exports"
tags = {
Name = "Compute Optimizer Exports"
}
}
resource "aws_s3_bucket_versioning" "exports_versioning" {
bucket = aws_s3_bucket.compute_optimizer_exports.id
versioning_configuration {
status = "Enabled"
}
}
resource "aws_lambda_function" "export_recommendations" {
filename = "export_lambda.zip"
function_name = "compute-optimizer-export"
role = aws_iam_role.lambda_role.arn
handler = "index.handler"
runtime = "python3.11"
environment {
variables = {
S3_BUCKET = aws_s3_bucket.compute_optimizer_exports.id
}
}
}
resource "aws_cloudwatch_event_rule" "daily_export" {
name = "compute-optimizer-daily-export"
description = "Daily export of compute optimizer recommendations"
schedule_expression = "cron(0 0 * * ? *)"
}
resource "aws_cloudwatch_event_target" "lambda_target" {
rule = aws_cloudwatch_event_rule.daily_export.name
target_id = "ComputeOptimizerExport"
arn = aws_lambda_function.export_recommendations.arn
}
類似サービス比較表
| 観点 | Compute Optimizer | AWS Trusted Advisor | Cloudability | Densify | Spot.io Eco |
|---|---|---|---|---|---|
| 対応リソース | EC2/Lambda/EBS/RDS/ECS/Aurora | 多数(セキュリティ・コスト・パフォーマンス) | 多クラウド対応 | 多クラウド対応 | AWS 特化 |
| 分析期間 | 14日(93日 Enhanced) | リアルタイム | カスタマイズ可 | カスタマイズ可 | リアルタイム |
| ML ベース | ✅ | ❌(ルールベース) | ✅ | ✅ | ✅ |
| コスト削減推奨 | ✅ | ✅ | ✅ | ✅ | ✅ |
| スポット推奨 | ASG のみ | ❌ | ✅ | ✅ | ✅(専門) |
| Graviton 推奨 | ✅ | ❌ | ❌ | ❌ | ❌ |
| Organizations 統合 | ✅ | ✅ | ❌ | ❌ | ❌ |
| 基本機能 | 無料 | Free Tier | 有料 | 有料 | 有料 |
| カスタムメトリクス | ✅(Datadog/Dynatrace) | ❌ | ✅ | ✅ | 限定的 |
| 推奨用途 | AWS 環境・低コスト・内製 | 総合的なベストプラクティス確認 | マルチクラウド・複雑な要件 | マルチクラウド・詳細分析 | スポット特化・AWS |
ベストプラクティス
✅ 推奨事項
-
全 AWS アカウントで常時有効化
- Organizations で一元管理
- 新規アカウント作成時に自動有効化
-
14 日以上の安定稼働後に推奨実装
- メトリクスの蓄積を十分に行う
- ベースラインが正確に形成されるまで待機
-
月次レビュープロセスの確立
- 月 1 回、推奨事項を一覧化
- Finding ごとに優先度付け(UNDER → OVER_PROVISIONED)
-
小規模テストから段階的実装
- 最初は PerfRisk < 2.0 のもの(最小リスク)から開始
- 1 週間の安定稼働を確認後、次の推奨に進む
-
自動化ツール・CloudFormation で実装
- 手動変更は避ける
- Infrastructure as Code で追跡可能にする
-
カスタムメトリクスの活用(Enhanced Observability)
- Datadog・Dynatrace メモリメトリクスを統合
- より正確なメモリ推奨を得る
-
コスト影響を見える化
- S3 エクスポートで毎月のコスト削減を定量化
- 経営層への報告・ROI 評価
❌ アンチパターン
-
14 日未満での実装判断
- データが不十分でリスク高い
- NONE(推奨不可)状態での判断は避ける
-
PerfRisk を無視
- 高いリスク推奨(6~10)の即座実装は危険
- 詳細検証なしに本番反映は禁止
-
全推奨を一括実装
- インフラが一斉に変更されるリスク
- ロードバランサー・フェイルオーバーの負荷集中
-
定期的な見直しなし
- 新規ワークロード追加時に推奨が変わる
- 月 1 回最低の見直しを実施
-
Under Provisioned の放置
- パフォーマンス問題につながる
- 最優先で改善すべき
トラブルシューティング表
| 現象 | 原因 | 対応 |
|---|---|---|
| 推奨が表示されない | 14 日未満のメトリクス蓄積 / CloudWatch 無効 | メトリクスの蓄積を 14 日待機・CloudWatch Agent 導入 |
| Finding が NONE | メトリクスが収集されていない | CloudWatch Metrics の確認・IAM 権限確認 |
| 推奨が正確でない | CPU・メモリメトリクスが正確でない | CloudWatch Agent / カスタムメトリクスの有効化 |
| 高いパフォーマンスリスク | 推奨インスタンスがコア数・メモリが大幅に少ない | PerfRisk < 4.0 の推奨を優先・詳細検証後に実装 |
| Organizations 統合が動作しない | IAM 権限・管理アカウント設定 | 管理アカウントで --include-member-accounts フラグ確認 |
| S3 エクスポートが失敗 | S3 バケット権限・エクスポート設定 | S3 Bucket Policy・IAM ロール権限の確認 |
| Lambda 推奨がおかしい | 実行時間・メモリ プロフィル異常 | Lambda Insights / X-Ray で詳細確認 |
2025-2026 最新動向
2025 年 Q1: Generative Insights 拡張
- AWS が Compute Optimizer に生成 AI による推奨を統合予定
- テキストベースの詳細化学的理由・最適化シナリオが提示される
2025 年 Q2: RDS Aurora 推奨強化
- Aurora MySQL 8.0・PostgreSQL 15 での推奨精度向上
- Read Replica 配置・キャッシュレイヤー推奨も追加予定
2025 年 Q3: Spot Instance 統合
- ASG だけでなく、Single EC2 への Spot 推奨拡張
- コスト削減と Spot Interruption リスク通知の統合
2026 年: AI-Driven Auto-Right-Sizing
- 推奨事項を自動実装するオプション提供予定
- CloudFormation StackSets で Organizations 全体に自動展開
学習リソース・参考文献
AWS 公式ドキュメント(8+)
- AWS Compute Optimizer User Guide
- Compute Optimizer API Reference
- Getting Started with Compute Optimizer
- EC2 Instance Recommendations
- Lambda Function Recommendations
- EBS Volume Recommendations
- Exporting Recommendations
- Organization Account Recommendations
ベンダー・OSS リソース(5+)
- Cloudability Cost Optimization
- Densify - AI-Powered Cloud Resource Optimization
- Spot.io Eco - Spot Instance Management
- AWS Trusted Advisor
- CloudHealth by VMware - Cost Optimization
AWS ブログ・ケーススタディ
- Optimizing Costs with Compute Optimizer
- Reducing EC2 Costs through Right-Sizing
- Lambda Cost Optimization Best Practices
実装例・チェックリスト
実装チェックリスト
- [ ] Compute Optimizer をアカウント / Organizations で有効化
- [ ] CloudWatch Metrics が正常に送信されていることを確認
- [ ] 14 日間のメトリクス蓄積を待機
- [ ] 推奨事項ダッシュボードで確認・集計
- [ ] Finding ごとに優先度付け(Under Provisioned → Over Provisioned)
- [ ] PerfRisk < 2.0 の推奨から開始(テスト環境での検証)
- [ ] CloudFormation StackSets / Terraform で自動実装
- [ ] 本番環境での 1~2 週間の安定稼働確認
- [ ] 削減額の定量化・経営層へ報告
- [ ] 月次レビュープロセスの確立
削減見積もりテンプレート
[削減計算シート]
リソースタイプ: EC2 Instances
現在の構成: m5.xlarge × 100 台
推奨構成: m5.large × 100 台
現在のコスト: $0.192/時間 × 100 台 × 730 時間 = $14,016/月
推奨後のコスト: $0.096/時間 × 100 台 × 730 時間 = $7,008/月
月次削減額: $7,008
年間削減額: $84,096
ROI: 100%(単なる削減・追加コスト無)
まとめ
AWS Compute Optimizer は 「ML ベースでリソースサイズを最適化する無料の推奨サービス」。EC2・Lambda・EBS・RDS・Aurora・ECS の過剰プロビジョニング・過少プロビジョニングを検出し、具体的な変更先と月次コスト削減額を定量化。Organizations 全体での一元管理・自動エクスポート・Graviton 移行推奨により、年間数百万ドルのコスト削減機会を提供する。
基本機能が無料のため、全 AWS 環境での常時有効化を強く推奨。月次レビュー・段階的実装・PerfRisk 評価を組み合わせることで、安全かつ効果的なリソース最適化が可能。
最終更新:2026-04-26 バージョン:v2.0