📚 この記事は「AWS 完全攻略シリーズ」の Episode 23 です。
- OpenSearchはElasticsearch互換の全文検索・ログ分析サービスで、マネージドで運用負荷を大幅削減
- CloudWatch Logs・ALBログ・VPCフローログの集約分析基盤を30分で構築可能
- OpenSearch/Elasticsearch経験を持つSESエンジニアは月単価70〜95万円が相場
「アプリケーションのログが散在していて、障害時の原因調査に時間がかかる」「全文検索機能を実装したいが、RDBのLIKE検索では性能が出ない」「Elasticsearchを自前で運用しているが、バージョンアップやスケーリングの管理が大変」——SES案件でインフラ運用や検索機能の開発に携わるエンジニアなら、こうした課題を抱えたことがあるでしょう。
Amazon OpenSearch Serviceは、これらの課題をAWSのマネージドサービスとして解決します。本記事では、AWSの基礎知識を前提に、OpenSearchの構築・運用・活用法をSESエンジニア向けに実践的に解説します。
Amazon OpenSearchとは
ElasticsearchからOpenSearchへ
Amazon OpenSearch Serviceは、オープンソースのOpenSearch(Elasticsearchのフォーク)をベースにしたマネージドサービスです。
| 項目 | Elasticsearch(自前運用) | Amazon OpenSearch Service |
|---|---|---|
| 構築 | EC2にインストール・設定 | コンソールから数クリック |
| スケーリング | ノード追加・リバランス手動 | ワンクリックでノード追加 |
| バックアップ | スナップショット設定が必要 | 自動スナップショット |
| セキュリティ | X-Pack等のプラグイン管理 | IAM・VPC・暗号化が統合 |
| モニタリング | 自前でPrometheus等を構築 | CloudWatch連携が標準 |
| コスト | EC2+EBS+運用工数 | インスタンス+ストレージのみ |
OpenSearchの主要ユースケース
- 全文検索: ECサイトの商品検索、社内ドキュメント検索
- ログ分析: アプリケーションログ・アクセスログの集約・可視化
- セキュリティ分析(SIEM): VPCフローログ・CloudTrailの異常検知
- メトリクス可視化: ダッシュボードによるリアルタイム監視
OpenSearchクラスタの構築
基本アーキテクチャ
OpenSearchクラスタは以下のコンポーネントで構成されます:
[VPC]
├── [データノード] × 3(検索・インデックス処理)
├── [マスターノード] × 3(クラスタ管理 ※本番推奨)
└── [UltraWarm ノード](低コストの温データ保存)
[外部連携]
├── Kinesis Data Firehose → OpenSearch(ログ取り込み)
├── Lambda → OpenSearch(カスタムETL)
└── OpenSearch Dashboards(可視化・分析)
CloudFormationでのクラスタ構築
AWSTemplateFormatVersion: '2010-09-09'
Description: OpenSearch Domain
Resources:
OpenSearchDomain:
Type: AWS::OpenSearchService::Domain
Properties:
DomainName: my-search-domain
EngineVersion: OpenSearch_2.11
ClusterConfig:
InstanceType: r6g.large.search
InstanceCount: 3
DedicatedMasterEnabled: true
DedicatedMasterType: m6g.large.search
DedicatedMasterCount: 3
ZoneAwarenessEnabled: true
ZoneAwarenessConfig:
AvailabilityZoneCount: 3
EBSOptions:
EBSEnabled: true
VolumeType: gp3
VolumeSize: 100
Iops: 3000
Throughput: 125
EncryptionAtRestOptions:
Enabled: true
NodeToNodeEncryptionOptions:
Enabled: true
DomainEndpointOptions:
EnforceHTTPS: true
TLSSecurityPolicy: Policy-Min-TLS-1-2-PFS-2023-10
VPCOptions:
SubnetIds:
- !Ref PrivateSubnet1
- !Ref PrivateSubnet2
- !Ref PrivateSubnet3
SecurityGroupIds:
- !Ref OpenSearchSecurityGroup
AccessPolicies:
Version: '2012-10-17'
Statement:
- Effect: Allow
Principal:
AWS: !Sub 'arn:aws:iam::${AWS::AccountId}:root'
Action: 'es:*'
Resource: !Sub 'arn:aws:es:${AWS::Region}:${AWS::AccountId}:domain/my-search-domain/*'
セキュリティ設定のベストプラクティス
| 設定項目 | 推奨値 | 理由 |
|---|---|---|
| VPC配置 | 必須 | パブリックアクセスを遮断 |
| 転送中の暗号化 | 有効 | TLS 1.2以上でノード間通信を暗号化 |
| 保管時の暗号化 | 有効 | KMSでデータを暗号化 |
| 細かいアクセス制御 | 有効 | インデックス・ドキュメントレベルの認可 |
| 監査ログ | 有効 | アクセス履歴の記録 |
全文検索機能の実装
インデックス設計
全文検索で最も重要なのがインデックス設計です。適切なマッピングとアナライザーの設定が検索品質を左右します:
PUT /products
{
"settings": {
"number_of_shards": 3,
"number_of_replicas": 1,
"analysis": {
"analyzer": {
"japanese_analyzer": {
"type": "custom",
"tokenizer": "kuromoji_tokenizer",
"filter": [
"kuromoji_baseform",
"kuromoji_part_of_speech",
"ja_stop",
"kuromoji_stemmer",
"lowercase"
]
}
}
}
},
"mappings": {
"properties": {
"name": {
"type": "text",
"analyzer": "japanese_analyzer",
"fields": {
"keyword": { "type": "keyword" }
}
},
"description": {
"type": "text",
"analyzer": "japanese_analyzer"
},
"category": { "type": "keyword" },
"price": { "type": "integer" },
"tags": { "type": "keyword" },
"created_at": { "type": "date" }
}
}
}
検索クエリの実装
GET /products/_search
{
"query": {
"bool": {
"must": [
{
"multi_match": {
"query": "ワイヤレスイヤホン ノイズキャンセリング",
"fields": ["name^3", "description"],
"type": "cross_fields",
"analyzer": "japanese_analyzer"
}
}
],
"filter": [
{ "term": { "category": "オーディオ" } },
{ "range": { "price": { "gte": 5000, "lte": 30000 } } }
]
}
},
"highlight": {
"fields": {
"name": {},
"description": { "fragment_size": 150 }
}
},
"aggs": {
"price_ranges": {
"range": {
"field": "price",
"ranges": [
{ "to": 10000 },
{ "from": 10000, "to": 20000 },
{ "from": 20000 }
]
}
}
}
}
ログ分析基盤の構築
Kinesis Data Firehose でログを集約
複数のAWSサービスからOpenSearchにログを自動集約するパイプラインを構築します:
CloudWatch Logs → サブスクリプションフィルター → Kinesis Data Firehose → OpenSearch
ALBアクセスログ → S3 → Lambda → OpenSearch
VPCフローログ → CloudWatch Logs → Kinesis → OpenSearch
ログ分析ダッシュボードの構築
OpenSearch Dashboardsで以下のような可視化を構築します:
アプリケーション監視ダッシュボード:
- リクエスト数の時系列グラフ(5xxエラー率のオーバーレイ)
- レスポンスタイムのパーセンタイル(p50, p95, p99)
- エンドポイント別のリクエスト分布
- エラーログのリアルタイムストリーム
セキュリティダッシュボード:
- 不審なIPアドレスからのアクセスヒートマップ
- 認証失敗のトレンド
- VPCフローログの拒否パケット分析
アラート設定
OpenSearchのアラート機能で、異常を即座に検知します:
{
"name": "High Error Rate Alert",
"type": "monitor",
"schedule": {
"period": {
"interval": 5,
"unit": "MINUTES"
}
},
"inputs": [{
"search": {
"indices": ["app-logs-*"],
"query": {
"bool": {
"must": [
{ "range": { "@timestamp": { "gte": "now-5m" } } },
{ "term": { "level": "ERROR" } }
]
}
}
}
}],
"triggers": [{
"name": "error_spike",
"condition": {
"script": {
"source": "ctx.results[0].hits.total.value > 50"
}
},
"actions": [{
"name": "notify_slack",
"destination_id": "slack-webhook-id",
"message_template": {
"source": "🚨 エラー急増: 過去5分で {{ctx.results[0].hits.total.value}} 件のエラーを検出"
}
}]
}]
}
コスト最適化
ストレージ階層の活用
OpenSearchのUltraWarmとコールドストレージを活用して、コストを大幅に削減できます:
| ストレージ階層 | 用途 | コスト比 | アクセス速度 |
|---|---|---|---|
| ホット(通常ノード) | 直近7日のログ | 100% | 高速 |
| UltraWarm | 8〜30日のログ | 約30% | 中速 |
| コールドストレージ | 31日〜1年のログ | 約10% | 低速 |
{
"policy": {
"description": "Log lifecycle policy",
"states": [
{
"name": "hot",
"actions": [{ "rollover": { "min_size": "30gb", "min_index_age": "1d" } }],
"transitions": [{ "state_name": "warm", "conditions": { "min_index_age": "7d" } }]
},
{
"name": "warm",
"actions": [{ "warm_migration": {} }],
"transitions": [{ "state_name": "cold", "conditions": { "min_index_age": "30d" } }]
},
{
"name": "cold",
"actions": [{ "cold_migration": {} }],
"transitions": [{ "state_name": "delete", "conditions": { "min_index_age": "365d" } }]
},
{
"name": "delete",
"actions": [{ "delete": {} }]
}
]
}
}
Serverless(サーバーレス)オプション
小規模な検索ワークロードにはOpenSearch Serverlessが選択肢になります:
| 項目 | OpenSearch(プロビジョニング) | OpenSearch Serverless |
|---|---|---|
| 課金 | インスタンス時間課金 | OCU(実際の使用量)課金 |
| スケーリング | 手動(HPA可能) | 自動 |
| 最低コスト | 約$50/月〜 | 約$350/月〜 |
| 適性 | 大規模・安定ワークロード | 小規模・可変ワークロード |

SES現場でのOpenSearch案件
求められるスキルと単価相場
| スキルレベル | 月単価相場 | 求められるスキル |
|---|---|---|
| 初級 | 65〜75万円 | インデックス設計、基本的なクエリ |
| 中級 | 75〜90万円 | パフォーマンスチューニング、ログ基盤構築 |
| 上級 | 90〜110万円 | 大規模クラスタ設計、SIEM構築、マルチテナント |
よくある案件パターン
- ECサイトの検索機能構築: 日本語全文検索(kuromoji)、ファセット検索、オートコンプリート
- ログ分析基盤の構築: マイクロサービスの集約ログ分析、ダッシュボード構築
- セキュリティ監視: CloudTrail/VPCフローログの異常検知、SIEM構築
- レガシー移行: 自前Elasticsearchクラスタからマネージドへの移行
まとめ:OpenSearchでSESエンジニアのスキルを広げる
Amazon OpenSearch Serviceは、全文検索とログ分析という2つの重要なユースケースをマネージドで提供するサービスです。
OpenSearchの3つのポイント:
- 全文検索: kuromoji日本語アナライザーで高精度な検索を簡単に実装
- ログ分析: Kinesis連携で複数ソースのログを集約し、ダッシュボードで可視化
- コスト最適化: UltraWarm/コールドストレージの階層管理でストレージコストを最大90%削減
OpenSearch/Elasticsearchスキルは、SES案件での幅広いポジションで求められています。本記事で紹介した実践テクニックを活用して、市場価値を高めましょう。
関連記事
- AWS入門ガイド|SESエンジニアのための基礎知識 - AWSの基礎
- AWS CloudWatch監視ガイド - モニタリングの基礎
- AWS Lambda サーバーレス入門 - サーバーレスアーキテクチャ
- AWS FinOps コスト最適化ガイド - コスト管理の実践