Day5: オブジェクトストレージ:AWS S3 vs Azure Blob Storage
皆さん、こんにちは。エンジニアのAkrです。
「徹底比較! AWS vs Azure」シリーズ、Day5へようこそ。
今回は、ウェブサイトの静的コンテンツやバックアップデータ、ビッグデータなど、非構造化データを保存するのに最適なサービス、オブジェクトストレージを比較します。AWSのAmazon S3(Simple Storage Service)と、AzureのAzure Blob Storageです。
オブジェクトストレージの基本
オブジェクトストレージは、ファイルやデータ(オブジェクト)を「バケット」や「コンテナ」と呼ばれる論理的な空間に保存するサービスです。従来のファイルシステムとは異なり、階層構造に縛られず、オブジェクトをメタデータと共に一意のキー(URL)で管理します。これにより、データは実質的に無制限にスケーラブルとなり、どこからでもHTTP/HTTPSアクセスが可能になります。
オブジェクトストレージの主な特徴
-
無制限スケーラビリティ: 容量制限なし(実質的に)
-
REST API: HTTP/HTTPSベースの標準的なアクセス
-
メタデータ管理: オブジェクトごとにカスタムメタデータを付与
-
高い耐久性: 複数の物理的な場所でデータを複製
-
従量課金: 使った分だけの支払い
基本仕様の比較
項目 |
AWS S3 |
Azure Blob Storage |
最大オブジェクトサイズ |
5TB |
4.77TB(5,000GB) |
コンテナあたりのオブジェクト数 |
無制限 |
無制限 |
データ耐久性 |
99.999999999%(11個の9) |
99.999999999%(11個の9) |
可用性SLA |
99.9%(Standard) |
99.9%(Hot tier) |
リージョン数 |
30+リージョン |
60+リージョン |
論理コンテナ |
バケット |
コンテナ |
ストレージクラス・ティアの詳細比較
AWS S3のストレージクラス(2024年版)
クラス名 |
用途 |
最小保存期間 |
取得料金 |
S3 Standard |
頻繁にアクセス |
なし |
なし |
S3 Intelligent-Tiering |
自動最適化 |
30日 |
なし |
S3 Standard-IA |
低頻度アクセス |
30日 |
あり |
S3 One Zone-IA |
低頻度、単一AZ |
30日 |
あり |
S3 Glacier Instant Retrieval |
アーカイブ(即座) |
90日 |
あり |
S3 Glacier Flexible Retrieval |
アーカイブ(分〜時間) |
90日 |
あり |
S3 Glacier Deep Archive |
長期アーカイブ(12時間) |
180日 |
あり |
Azure Blob Storageのアクセスティア
ティア名 |
用途 |
最小保存期間 |
取得料金 |
Hot |
頻繁にアクセス |
なし |
なし |
Cool |
低頻度アクセス |
30日 |
あり |
Cold |
より低頻度 |
90日 |
あり |
Archive |
長期保存 |
180日 |
あり(15時間で復元) |
料金比較(東京・東日本リージョン、2024年概算)
ストレージ料金(1GBあたり/月)
ティア |
AWS S3 |
Azure Blob Storage |
標準 |
$0.025 |
$0.024(Hot) |
低頻度 |
$0.0138 |
$0.019(Cool) |
アーカイブ |
$0.0045(Glacier FR) |
$0.002(Archive) |
リクエスト料金(1,000回あたり)
操作 |
AWS S3 |
Azure Blob Storage |
PUT/POST |
$0.0055 |
$0.055 |
GET |
$0.00044 |
$0.0044 |
セキュリティ・アクセス制御の比較
AWS S3のセキュリティ機能
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {"AWS": "arn:aws:iam::ACCOUNT:user/USERNAME"},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::bucket-name/*",
"Condition": {
"DateGreaterThan": {
"aws:CurrentTime": "2024-01-01T00:00:00Z"
}
}
}
]
}
主要機能:
-
IAM統合: 細かい権限制御
-
バケットポリシー: リソースベースの制御
-
Access Control Lists(ACL): オブジェクト単位の制御
-
KMS暗号化: 保存時・転送時暗号化
-
VPC Endpoints: プライベートアクセス
Azure Blob Storageのセキュリティ機能
// SASトークンの生成例
var sasToken = containerClient.GenerateSasUri(
BlobContainerSasPermissions.Read | BlobContainerSasPermissions.List,
DateTimeOffset.UtcNow.AddHours(1)
);
主要機能:
-
Azure RBAC: ロールベースアクセス制御
-
SAS(Shared Access Signature): 限定的アクセス権付与
-
Azure Key Vault: 暗号化キー管理
-
Private Endpoints: VNet統合
-
Azure AD統合: シングルサインオン
API・SDK比較
AWS S3 API例(Python)
import boto3
# S3クライアントの作成
s3 = boto3.client('s3')
# ファイルのアップロード
s3.upload_file('local_file.txt', 'my-bucket', 'remote_file.txt')
# プリサインドURLの生成(一時的なアクセスURL)
presigned_url = s3.generate_presigned_url(
'get_object',
Params={'Bucket': 'my-bucket', 'Key': 'remote_file.txt'},
ExpiresIn=3600
)
# ライフサイクルポリシーの設定
lifecycle_config = {
'Rules': [{
'ID': 'Move to IA',
'Status': 'Enabled',
'Transitions': [{
'Days': 30,
'StorageClass': 'STANDARD_IA'
}]
}]
}
s3.put_bucket_lifecycle_configuration(
Bucket='my-bucket',
LifecycleConfiguration=lifecycle_config
)
Azure Blob Storage API例(Python)
from azure.storage.blob import BlobServiceClient
# Blob サービスクライアントの作成
blob_service_client = BlobServiceClient.from_connection_string(connection_string)
# ファイルのアップロード
blob_client = blob_service_client.get_blob_client(
container="my-container",
blob="remote_file.txt"
)
with open("local_file.txt", "rb") as data:
blob_client.upload_blob(data, overwrite=True)
# アクセスティアの変更
blob_client.set_standard_blob_tier("Cool")
# コンテナのメタデータ設定
container_client = blob_service_client.get_container_client("my-container")
metadata = {'department': 'finance', 'project': 'quarterly-reports'}
container_client.set_container_metadata(metadata=metadata)
パフォーマンス比較
スループット・レイテンシ
項目 |
AWS S3 |
Azure Blob Storage |
最大スループット |
3,500 PUT/5,500 GET per second per prefix |
20,000 requests per second per account |
典型的なレイテンシ |
100-200ms |
100-200ms |
マルチパート最小サイズ |
5MB |
4MB |
最大マルチパート数 |
10,000 |
50,000 |
実際のユースケース別パフォーマンス
大容量ファイル転送
# AWS CLI での高速アップロード
aws configure set default.s3.max_concurrent_requests 20
aws configure set default.s3.multipart_threshold 64MB
aws s3 cp large_file.zip s3://my-bucket/ --storage-class INTELLIGENT_TIERING
# Azure CLI での高速アップロード
az storage blob upload \
--file large_file.zip \
--container-name my-container \
--name large_file.zip \
--max-connections 10 \
--tier Hot
高度な機能比較
AWS S3の高度な機能
-
S3 Select: SQLクエリでオブジェクト内データ抽出
-
CloudFront統合: グローバルCDN連携
-
Lambda統合: イベント駆動処理
-
Cross-Region Replication: 自動レプリケーション
-
Object Lock: WORM(Write Once, Read Many)
Azure Blob Storageの高度な機能
-
Azure Data Lake Storage Gen2: ビッグデータ分析最適化
-
Azure CDN統合: コンテンツ配信ネットワーク
-
Event Grid統合: イベント駆動アーキテクチャ
-
Geo-redundant storage: 地理的冗長化
-
Immutable storage: 法的要件対応
実際のユースケース比較
静的ウェブサイトホスティング
AWS S3
# 静的ウェブサイト有効化
aws s3 website s3://my-website-bucket --index-document index.html --error-document error.html
Azure Blob Storage
# 静的ウェブサイト有効化(Azure CLI)
az storage blob service-properties update \
--account-name mystorageaccount \
--static-website \
--index-document index.html \
--404-document error.html
データレイク構築
AWS S3 + Analytics Services
-
Amazon Athena: S3データの直接クエリ
-
AWS Glue: ETLサービス
-
Amazon Redshift Spectrum: データウェアハウス拡張
Azure Blob Storage + Analytics Services
-
Azure Synapse Analytics: 統合分析プラットフォーム
-
Azure Data Factory: データ統合サービス
-
Azure Databricks: Apache Spark分析
データ移行戦略
AWS S3 ↔ Azure Blob Storage 間の移行
ツール比較
ツール |
特徴 |
適用場面 |
AWS DataSync |
AWS管理、高速転送 |
AWS → Azure(一方向) |
Azure Data Factory |
Azure管理、スケジューリング |
Azure → AWS、双方向 |
AzCopy |
Azure CLI、高パフォーマンス |
一回限りの移行 |
rclone |
オープンソース、柔軟性 |
複数クラウド対応 |
実践的な移行例
# rcloneを使った移行
rclone sync s3:my-s3-bucket azure:my-container --progress --transfers=10
# 大容量データの段階的移行
rclone copy s3:my-s3-bucket azure:my-container \
--include="*.jpg" \
--max-size 100M \
--bandwidth 50M
選択基準・意思決定フレームワーク
AWS S3を選ぶべきケース
要件 |
重要度 |
理由 |
多様なストレージクラス |
高 |
コスト最適化の柔軟性 |
豊富なエコシステム |
高 |
サードパーティツール・統合 |
Intelligent-Tiering |
中 |
自動コスト最適化 |
既存AWSインフラ |
高 |
既存投資の活用 |
Azure Blob Storageを選ぶべきケース
要件 |
重要度 |
理由 |
Microsoft製品統合 |
高 |
Office 365、Teams等との連携 |
ビッグデータ分析 |
高 |
Azure Synapse等との統合 |
階層構造管理 |
中 |
ファイルシステム的な管理 |
Azure AD統合 |
高 |
エンタープライズセキュリティ |
コスト最適化のベストプラクティス
AWS S3のコスト最適化
# S3 Intelligent-Tieringの設定
import boto3
s3 = boto3.client('s3')
# インテリジェント階層化の有効化
s3.put_bucket_intelligent_tiering_configuration(
Bucket='my-bucket',
Id='entire-bucket-config',
IntelligentTieringConfiguration={
'Id': 'entire-bucket-config',
'Status': 'Enabled',
'Filter': {'Prefix': ''},
'Tierings': [
{
'Days': 1,
'AccessTier': 'ARCHIVE_ACCESS'
},
{
'Days': 90,
'AccessTier': 'DEEP_ARCHIVE_ACCESS'
}
]
}
)
Azure Blob Storageのコスト最適化
# ライフサイクル管理ポリシーの設定
from azure.mgmt.storage import StorageManagementClient
lifecycle_policy = {
"policy": {
"rules": [
{
"enabled": True,
"name": "move-to-cool",
"type": "Lifecycle",
"definition": {
"actions": {
"baseBlob": {
"tierToCool": {
"daysAfterModificationGreaterThan": 30
},
"tierToArchive": {
"daysAfterModificationGreaterThan": 90
}
}
},
"filters": {
"blobTypes": ["blockBlob"]
}
}
}
]
}
}
監視・運用比較
AWS S3の監視
-
CloudWatch Metrics: リクエスト数、エラー率、レイテンシ
-
CloudTrail: API呼び出しログ
-
S3 Access Logging: 詳細アクセスログ
-
Cost Explorer: 詳細なコスト分析
Azure Blob Storageの監視
-
Azure Monitor: メトリクスとアラート
-
Activity Log: 管理操作ログ
-
Storage Analytics: 詳細な使用量データ
-
Cost Management: コスト分析と予算管理
まとめ:2024年時点での選択指針
機能別優位性
機能 |
AWS S3 |
Azure Blob Storage |
備考 |
ストレージクラスの多様性 |
⭐⭐⭐⭐⭐ |
⭐⭐⭐ |
S3が圧倒的 |
Microsoft統合 |
⭐⭐ |
⭐⭐⭐⭐⭐ |
Azure が圧倒的 |
ビッグデータ分析 |
⭐⭐⭐⭐ |
⭐⭐⭐⭐⭐ |
Azure がやや優位 |
グローバル展開 |
⭐⭐⭐⭐⭐ |
⭐⭐⭐⭐ |
S3がやや優位 |
コスト効率 |
⭐⭐⭐⭐⭐ |
⭐⭐⭐⭐ |
S3がやや優位 |
総合的な推奨指針
AWS S3を選ぶべき組織:
- スタートアップ〜中規模企業で柔軟性を重視
- 多様なデータアクセスパターンを持つ
- コスト最適化を細かく制御したい
- AWSエコシステムを活用している
Azure Blob Storageを選ぶべき組織:
- Microsoft 365を組織全体で利用
- エンタープライズレベルのセキュリティが必要
- ビッグデータ分析が主目的
- .NET開発チームが中心
結論として、技術的多様性とコスト効率を重視するなら AWS S3、Microsoft エコシステムとの統合と分析機能を重視するなら Azure Blob Storage が最適な選択となります。
どちらも非常に成熟したサービスであり、基本的な要件は満たすため、既存のインフラ、チームのスキル、将来の拡張計画を総合的に考慮して選択することが重要です。
次回は、リレーショナルデータベースに焦点を当て、AWS RDSとAzure Database Servicesを比較します。お楽しみに!
参考リンク