サーバーレス市場の現在地
グローバルサーバーレスコンピューティング市場は2025年に**$28.02B**に達し、2034年には$92.22Bに成長すると予測されています(CAGR 14.15%)。
AWS re:Invent 2025 の革新
Lambda Managed Instances
AWS Lambdaの最大のアップデート。EC2のコントロールとサーバーレスの簡便さを両立。
# Lambda Managed Instancesの設定
import boto3
lambda_client = boto3.client('lambda')
response = lambda_client.create_function(
FunctionName='high-performance-function',
Runtime='python3.12',
Handler='handler.main',
Code={'S3Bucket': 'my-bucket', 'S3Key': 'code.zip'},
# Managed Instancesの設定
ComputeConfig={
'Type': 'ManagedInstance',
'InstanceType': 'c6i.xlarge',
'MinInstances': 2, # 常時起動でコールドスタート排除
'MaxInstances': 10
}
)
特徴:
- コールドスタートの排除
- マルチコンカレンシー(1環境で複数リクエスト処理)
- 特殊なコンピュートオプションへのアクセス
- 定常ワークロードのコスト最適化
Lambda料金体系比較(2025年)
| 項目 | 従来のLambda | Managed Instances |
|---|---|---|
| リクエスト料金 | $0.20/100万リクエスト | $0.20/100万リクエスト |
| コンピュート | GB-秒単価 | EC2料金 + 15%プレミアム |
| コールドスタート | あり | なし(常時稼働) |
| マルチコンカレンシー | なし(1リクエスト/環境) | あり |
| 最適ユースケース | スパイク負荷 | 定常的なトラフィック |
# コスト比較シミュレーション
def compare_costs(requests_per_month: int, avg_duration_ms: int):
"""
Lambda vs Managed Instancesのコスト比較
"""
# 従来のLambda(1024MB)
lambda_compute = (requests_per_month * avg_duration_ms / 1000) * 0.0000166667
lambda_requests = requests_per_month * 0.0000002
traditional_cost = lambda_compute + lambda_requests
# Managed Instances(c6i.large相当)
# 月額約$62 + 15% = ~$71 + リクエスト料金
managed_base = 71 # 月額固定費
managed_requests = requests_per_month * 0.0000002
managed_cost = managed_base + managed_requests
return {
"traditional_lambda": traditional_cost,
"managed_instances": managed_cost,
"break_even_requests": 71 / 0.0000166667 # 約426万リクエスト/月
}
# 例:月1000万リクエスト、平均100ms
result = compare_costs(10_000_000, 100)
# Managed Instancesの方が約40%安い
Lambda Durable Functions
実行の一時停止と再開が可能に。アイドル時間の課金なし。
# Durable Functionsの例
from aws_lambda_durable import workflow, activity
@workflow
async def order_processing(order_id: str):
# ステップ1: 在庫確認
inventory = await activity.check_inventory(order_id)
# ステップ2: 支払い処理(外部APIを待機)
# この間、関数は一時停止し課金されない
payment = await activity.process_payment(
order_id,
timeout_hours=24
)
# ステップ3: 発送処理
shipping = await activity.ship_order(order_id)
return {
"order_id": order_id,
"status": "completed"
}
メリット:
- 長時間ワークフローのネイティブサポート
- 外部オーケストレーション不要
- コスト効率の大幅改善
主要ユースケース
Web/モバイルバックエンド
# API Gateway + Lambda
import json
def handler(event, context):
path = event['path']
method = event['httpMethod']
if method == 'GET' and path == '/users':
users = get_users()
return {
'statusCode': 200,
'headers': {'Content-Type': 'application/json'},
'body': json.dumps(users)
}
return {'statusCode': 404, 'body': 'Not Found'}
リアルタイムデータ処理
# S3イベント駆動処理
def process_upload(event, context):
for record in event['Records']:
bucket = record['s3']['bucket']['name']
key = record['s3']['object']['key']
# アップロードされたファイルを処理
process_file(bucket, key)
# 結果を別バケットに保存
save_result(f"processed-{key}")
AI/MLワークフロー
# Bedrockとの統合
import boto3
bedrock = boto3.client('bedrock-runtime')
def ai_handler(event, context):
prompt = event['prompt']
response = bedrock.invoke_model(
modelId='anthropic.claude-3-sonnet-20240229-v1:0',
body=json.dumps({
'anthropic_version': 'bedrock-2023-05-31',
'max_tokens': 1024,
'messages': [{'role': 'user', 'content': prompt}]
})
)
return json.loads(response['body'].read())
サーバーレスアーキテクチャパターン
イベント駆動アーキテクチャ
graph LR
A[API GW] --> B[Lambda]
B --> C[SQS]
C --> D[Lambda]
D --> E[Lambda]
E --> F[S3]
SAMテンプレート例
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Globals:
Function:
Timeout: 30
Runtime: python3.12
Architectures:
- arm64 # Graviton2でコスト削減
Resources:
ApiFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: src/
Handler: app.handler
MemorySize: 256
Events:
Api:
Type: Api
Properties:
Path: /{proxy+}
Method: ANY
Policies:
- DynamoDBCrudPolicy:
TableName: !Ref DataTable
DataTable:
Type: AWS::DynamoDB::Table
Properties:
BillingMode: PAY_PER_REQUEST
AttributeDefinitions:
- AttributeName: pk
AttributeType: S
KeySchema:
- AttributeName: pk
KeyType: HASH
課題と対策
コールドスタート
# Provisioned Concurrencyで対策
# または Lambda Managed Instances
# ウォームアップ関数
def keep_warm(event, context):
"""
CloudWatch Eventsで5分ごとに実行
"""
if event.get('source') == 'aws.events':
return {'statusCode': 200, 'body': 'Warm'}
# 通常の処理
return main_handler(event, context)
デバッグの複雑さ
# 構造化ログでデバッグ改善
import structlog
logger = structlog.get_logger()
def handler(event, context):
logger.info(
"function_invoked",
request_id=context.aws_request_id,
event_source=event.get('source')
)
try:
result = process(event)
logger.info("processing_complete", result=result)
return result
except Exception as e:
logger.error("processing_failed", error=str(e))
raise
ベンダーロックイン
# Serverless Framework(マルチクラウド対応)
service: my-service
provider:
name: aws # または azure, google
runtime: python3.12
functions:
api:
handler: handler.main
events:
- http:
path: /
method: get
AIエージェントの課題
2025年の注目点として、AIエージェントとサーバーレスの相性問題が浮上。
AIエージェントの特性:
・ステップの連続実行
・過去のコンテキスト参照
・中間ファイルの作成
・複数ツールの呼び出し
・長時間の実行
→ ステートレスなFaaSとの不整合
→ 永続的なクラウドワークステーションへの移行
コスト最適化
# メモリとCPUの最適化
# Lambda Power Tuning を使用
optimizations = {
"memory_size": 1024, # パフォーマンスとコストのバランス
"architecture": "arm64", # 20%コスト削減
"provisioned_concurrency": 5, # 予測可能なトラフィック用
"reserved_concurrency": 100, # 過剰スケール防止
}
まとめ
2025年のサーバーレスは、Lambda Managed InstancesとDurable Functionsにより従来の制限を突破しています。コールドスタートの排除、長時間ワークフローのサポート、AIワークロードへの対応など、より幅広いユースケースに適用可能になりました。一方で、AIエージェントのような新しいワークロードパターンへの対応は今後の課題です。
← 一覧に戻る