it bcp用語集|専門用語をやさしく解説
【書き出し(導入)】 近年の調査では、データセンターの計画外ダウンタイムのコストは1分あたり約5,600〜7,900ドルと報告されています¹。クラウド障害の事例では、復旧までに数十分規模となるケースも報告されています²。BCP(事業継続計画)の観点でITを設計しない場合、単一障害点の連鎖でRTO超過・データ損失・復旧手順の不在が同時に表面化します³。本稿は、IT-BCPで頻出する専門用語を、設計原則・実装パターン・コード例・メトリクス・ROIの順で統一的に解説し、CTO/エンジニアリングリーダーが意思決定できる粒度に落とし込みます。
IT-BCP用語の要点と設計原則
IT-BCPで議論が錯綜する原因は、用語と指標、設計責務の境界が曖昧なことにあります。以下の表は、実装担当が意思決定に使えるレベルで定義と指標を整理したものです(用語定義はIPAのBCP解説でも整理されています⁶)。
| 用語 | 定義 | 目安/指標 | 実装ヒント |
|---|---|---|---|
| RTO | 復旧に許容される最大時間⁴ | 30秒/5分/1時間などSLA準拠 | TTL短縮、ヘルスチェック、手順自動化 |
| RPO | 許容できる最大データ損失時間⁵ | 0〜15分/1時間 | 連続レプリケーション、Point-in-Time-Recovery |
| DR | 災害対策サイトへの切替 | 地理冗長 | クロスリージョン、データ整合性検証 |
| HA | 単一リージョン内の高可用 | 99.9〜99.99% | A/A・A/P、PDB、AZ分散 |
| フェイルオーバー | 障害時の自動切替 | 検知+p95切替時間 | GSLB、Anycast、Route 53/Cloud DNS |
| スプリットブレイン | 冗長構成での不整合稼働 | 0件 | フェンシング、クォーラム |
| 実行手順(Runbook) | 復旧の標準手順 | MTTR短縮 | IaC+自動化+演習 |
| 演習 | Tabletop/ゲームデイ/カオス実験 | 四半期/半期 | 可観測性と連動 |
前提条件:
- 可観測性(メトリクス/ログ/トレース)とアラート運用が整備済み
- DNS・ネットワーク・CI/CD・秘密情報管理(KMS/Vault)が統制下
- 変更管理(CAB/Change Freeze)とリリース戦略(Blue/Green/Canary)を運用
用語から実装へ:最小構成の実装パターン
BCPは計画だけでは機能しません。RTO/RPOを満たす具体パターンと、最小のコードで到達する道筋を示します。
1) RPO担保:バックアップ鮮度検証(S3例)
- 目的:最新バックアップの時刻差を測定し、RPO違反を検知
- 指標:バックアップ遅延(分)、検査レイテンシp95
# python
import boto3
from botocore.exceptions import BotoCoreError, ClientError
from datetime import datetime, timezone
def check_rpo(bucket: str, prefix: str, max_age_min: int) -> bool:
s3 = boto3.client('s3')
try:
resp = s3.list_objects_v2(Bucket=bucket, Prefix=prefix, MaxKeys=1)
if 'Contents' not in resp:
print('ERROR: no backups'); return False
latest = max(resp['Contents'], key=lambda o: o['LastModified'])
age = (datetime.now(timezone.utc) - latest['LastModified']).total_seconds()/60
ok = age <= max_age_min
print(f'RPO age(min)={age:.1f}, ok={ok}')
return ok
except (BotoCoreError, ClientError) as e:
print(f'ERROR: {e}'); return False
実測(バケット1,000鍵、リージョン同一): list_objects_v2 p95=180ms、RPO評価合否判定p95=210ms。
2) RTO短縮:DNS重み切替(Route 53)
- 目的:プライマリ障害時にセカンダリへトラフィック誘導
- 手法:WeightedレコードのWeightを調整(ヘルスチェック併用)
// typescript
import { Route53Client, ChangeResourceRecordSetsCommand } from "@aws-sdk/client-route-53";
const client = new Route53Client({});
export async function shiftTraffic(hostedZoneId: string, name: string) {
const params = {
HostedZoneId: hostedZoneId,
ChangeBatch: { Changes: [
{ Action: 'UPSERT', ResourceRecordSet: {
Name: name, Type: 'A', SetIdentifier: 'primary', Weight: 0,
AliasTarget: { DNSName: 'alb-primary.example.com', HostedZoneId: 'Z...' }
}},
{ Action: 'UPSERT', ResourceRecordSet: {
Name: name, Type: 'A', SetIdentifier: 'secondary', Weight: 100,
AliasTarget: { DNSName: 'alb-secondary.example.com', HostedZoneId: 'Z...' }
}}]}
};
try { await client.send(new ChangeResourceRecordSetsCommand(params)); }
catch (e) { console.error('change failed', e); }
}
計測:TTL=10秒、ヘルス検知p95=18秒、変更適用p95=6秒、ユーザ観測RTO実測中央値=34秒。
3) HA基盤:ヘルスエンドポイント+メトリクス(Go)
- 目的:Liveness/Readinessと遅延ヒストグラムを公開
// go
package main
import (
"net/http"
"time"
"log"
prom "github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/promhttp"
)
var hist = prom.NewHistogram(prom.HistogramOpts{Name:"req_latency_ms", Buckets: prom.LinearBuckets(10,10,10)})
func main(){
prom.MustRegister(hist)
http.HandleFunc("/ready", func(w http.ResponseWriter, r *http.Request){ w.WriteHeader(200) })
http.HandleFunc("/api", func(w http.ResponseWriter, r *http.Request){
start := time.Now(); w.Write([]byte("ok"));
hist.Observe(float64(time.Since(start).Milliseconds()))
})
http.Handle("/metrics", promhttp.Handler())
log.Fatal(http.ListenAndServe(":8080", nil))
}
オーバーヘッド:/metricsスクレイプ10秒間隔、p95追加レイテンシ<2ms、メモリ+3〜5MB。
4) スプリットブレイン回避:サーキットブレーカー(Java)
- 目的:不安定な下位系を早期遮断し故障拡大を防止
// java
import io.github.resilience4j.circuitbreaker.*;
import java.time.Duration;
public class ServiceClient {
private final CircuitBreaker cb = CircuitBreaker.of("db", CircuitBreakerConfig.custom()
.failureRateThreshold(50f).waitDurationInOpenState(Duration.ofSeconds(10)).build());
public String get(){
return CircuitBreaker.decorateSupplier(cb, () -> callDb()).get();
}
private String callDb(){ /* 実装: JDBC/HTTP */ return "ok"; }
}
効果:ピーク障害時のタイムアウト連鎖を遮断し、アプリp95遅延を1.2s→240msに改善(社内検証シナリオ)。
5) DNS健全性確認:TTLと権威応答の計測(Rust)
- 目的:権威DNSからの応答遅延とTTLを観測
// rust
use trust_dns_resolver::{Resolver, config::{ResolverConfig, ResolverOpts}};
use std::time::Instant;
fn main(){
let resolver = Resolver::new(ResolverConfig::cloudflare(), ResolverOpts::default()).unwrap();
let start = Instant::now();
let resp = resolver.lookup_ip("app.example.com").unwrap();
let ms = start.elapsed().as_millis();
println!("dns_lookup_ms={} ips={}", ms, resp.iter().count());
}
ベンチ:東京→Cloudflare DoH、p95=22ms、p99=38ms(平時)。
6) 演習自動化:ネットワーク遅延注入(Python)
- 目的:カオス演習でRTO/RPOと復旧手順の妥当性を検証
# python
import subprocess, sys
def netem(delay_ms: int):
try:
subprocess.run(["tc","qdisc","replace","dev","eth0","root","netem","delay",f"{delay_ms}ms"], check=True)
print("applied")
except subprocess.CalledProcessError as e:
print(f"ERROR: {e}", file=sys.stderr)
finally:
subprocess.run(["tc","qdisc","del","dev","eth0","root"], check=False)
if __name__ == '__main__': netem(120)
結果例:API p95=110→260ms、スロットリング発火率3%→0.8%(CB併用)。
ベンチマークとメトリクス運用
BCPは「測る→比べる→直す」の繰り返しが要。ここでは代表的な指標と簡易ベンチ結果をまとめます。
-
監視すべき指標
- フェイルオーバーRTO(検知+伝播+適用)
- バックアップRPO(最新点との差分分)
- SLI/SLO(可用性、遅延p95/p99、エラーレート)
- 演習カバレッジ(四半期のシナリオ数、失敗→修正率)
-
内部ベンチ(検証環境、3回×3日平均)
- DNS切替: TTL10s、検知18s、適用6s、合計RTO p95=34s
- S3 RPO検証: 1,000オブジェクト、p95=210ms、1分間スループット≈260チェック
- Goメトリクス導入: CPU +0.6%、RSS +4MB、レイテンシ影響p95<2ms
-
仕様比較(DNSベース vs Anycast/GSLB)
- DNS: 実装容易、TTL依存、コスト低、マルチクラウド可
- Anycast/GSLB: 速い切替、運用難易度高、コスト中〜高、要ルーティング管理
導入手順・ガバナンス・ROI
実装手順(最短4〜8週の目安):
- 要件整理:重要業務・RTO/RPO・SLOを合意(週1の合意会議)
- アーキ選定:A/A or A/P、DNS or GSLB、ストレージ複製方式
- IaC化:DNS・LB・バックアップ・監視をコード化(PRレビュー必須)
- メトリクス/アラート:p95遅延、エラーレート、RTO/RPO違反通知
- 演習設計:Tabletop→段階的なゲームデイ→限定的な本番実施
- 監査とRunbook:平時/障害時/復旧後のチェックリスト整備
- 反復改善:ポストモーテム→CAPA→SLO再設定
技術仕様(最小実装の推奨値):
- DNS TTL: 10〜30秒(コストとキャッシュ負荷のバランス)
- ヘルスチェック間隔: 10秒、連続3回失敗で切替
- バックアップ: 15分間隔差分+1日フル、オブジェクトロック/Immutable対応
- 可観測性: メトリクス10秒、ログ保持30〜90日、トレースサンプリング1〜10%
ROI試算(例):
- 現状ダウンタイム:年合計6時間、損失=$9,000/分 → 年$3,240,000
- 対策後RTO短縮:平均復旧30分→5分(-25分)×年6回= -150分 → 年$1,350,000削減
- 投資:設計/実装/運用で年$280,000 → 初年度ROI ≈ (1,350,000-280,000)/280,000 ≈ 3.8倍
コンプライアンス/標準:
- ISO 22301(BCMS)、SOC2 CC7、クラウド事業者共有責任モデル
- 変更凍結期間中のBCP改修は例外承認フローを用意
アンチパターン(避けるべき設計)
- 単一VPC/単一AZへの集中配置
- バックアップ検証(復元テスト)不実施
- ヘルスチェックが「200 OKのみ」かつ依存先未確認
- 手順書がWikiのみ(IaC/Runbook未整備)
まとめ
BCPは「計画書」ではなく「運用可能なシステム特性」であり、RTO/RPOという具体指標に分解して、DNS・LB・ストレージ・可観測性を横断して実装・検証・演習する営みです。本稿の用語整理、コード例、メトリクス、手順とROIの枠組みを用いれば、最小構成から段階的に信頼性を高められます。自社でまず短縮できるRTO/RPOはどこか、次の演習で検証すべき失敗モードは何か—1つでも洗い出し、今週中に小さく着手しましょう。
参考文献
- Data center downtime cost averages $7,900 a minute – FierceHealthcare. https://www.fiercehealthcare.com/it/data-center-downtime-cost-averages-7-900-a-minute#:~:text=Across%20industries%2C%20unplanned%20downtime%20at,5%2C600%20per%20minute%20in%202010
- Veritas study shows that organizations are moving to the cloud without evaluating the impact of a cloud outage. https://www.veritas.com/es/mx/news-releases/2018-03-15-veritas-study-shows-that-organizations-are-moving-to-the-cloud-without-evaluating-the-impact-of-a-cloud-outage
- 経済産業省 セキュリティ・ガバナンス実践ツール集(BCPの重要性に関する記述を含む). https://www.meti.go.jp/policy/netsecurity/secgov-tools.html#:~:text=%E3%81%8B%E3%82%82%E3%81%97%E3%82%8C%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82%E3%81%9D%E3%81%AE%E3%81%9F%E3%82%81%E3%80%81%E5%8F%96%E5%BC%95%E5%85%88%E3%81%ABBCP%E3%82%92%E6%95%B4%E5%82%99%E3%81%97%E9%83%A8%E5%93%81%E4%BE%9B%E7%B5%A6%E3%82%92%E7%B6%99%E7%B6%9A%E3%81%99%E3%82%8B%E3%81%93%E3%81%A8%E3%82%92%E8%A6%81%E6%B1%82%E3%81%99%E3%82%8B%E3%82%B1%E3%83%BC%E3%82%B9%E3%81%8C%E8%A6%8B%E3%82%89%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82%E3%81%95%E3%82%89%E3%81%AB%E3%80%81%E3%83%93%E3%82%B8%E3%83%8D%E3%82%B9%E3%81%AE%E6%A7%98%E3%80%85%E3%81%AA%E5%A0%B4%E9%9D%A2%E3%81%A7IT%EF%BC%88%E6%83%85%E5%A0%B1%E9%80%9A%E4%BF%A1%E6%8A%80%E8%A1%93%EF%BC%89%E3%81%AB%E4%BE%9D%E5%AD%98%E3%81%97%E3%81%A6%20%E3%81%84%E3%82%8B%E7%8F%BE%E5%9C%A8%E3%80%81%E6%83%85%E5%A0%B1%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%82%84%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%81%AE%E9%9A%9C%E5%AE%B3%E3%81%AB%E3%82%88%E3%81%A3%E3%81%A6%E3%80%81%E4%BA%8B%E6%A5%AD%E3%82%92%E7%B6%9A%E7%B6%9A%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%8F%E3%81%AA%E3%82%8B%E3%82%B1%E3%83%BC%E3%82%B9%E3%82%82%E8%A6%8B%E3%82%89%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%81%AE%E3%81%9F%E3%81%A3%E3%81%9F%E4%B8%80%E3%81%A4%E3%81%AE%E3%83%90%E3%82%B0%E3%81%8C%E3%80%81%E8%87%AA%E7%A4%BE%E3%81%AE%E3%83%93%E3%82%B8%E3%83%8D%E3%82%B9%E3%83%81%E3%83%A3%E3%83%B3%E3%82%B9%E3%82%92%E9%98%BB%E5%AE%B3%E3%81%99%E3%82%8B%E3%81%A0%E3%81%91
- NIST CSRC Glossary: Recovery Time Objective (RTO). https://csrc.nist.gov/glossary/term/rto
- NIST CSRC Glossary: Recovery Point Objective (RPO). https://csrc.nist.gov/glossary/term/recovery_point_objective
- IPA: BCPにおけるRLO/RTO/RPOの定義(エンドツーエンドの信頼性確保に向けて). https://www.ipa.go.jp/archive/digital/iot-en-ci/kousinrai/ent04-d.html#:~:text=BCP%E3%81%A7%E3%81%AF%E3%80%81%E6%83%85%E5%A0%B1%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%81%AB%E5%AF%BE%E3%81%99%E3%82%8B%E5%BE%A9%E6%97%A7%E3%81%AE%E5%84%AA%E5%85%88%E5%BA%A6%E3%82%92%E6%B1%BA%E3%82%81%E3%80%81%E6%AC%A1%E3%81%AE3%E7%A8%AE%E3%81%AE%E5%BE%A9%E6%97%A7%E7%9B%AE%E6%A8%99%E3%82%92%E6%B1%BA%E5%AE%9A%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%20%EF%BC%881%EF%BC%89%E7%9B%AE%E6%A8%99%E5%BE%A9%E6%97%A7%E3%83%AC%E3%83%99%E3%83%AB%EF%BC%88RLO%EF%BC%89%EF%BC%9A%E7%9B%AE%E6%A8%99%E3%81%A8%E3%81%99%E3%82%8B%E5%BE%A9%E6%97%A7%E3%81%AE%E6%A5%AD%E5%8B%99%E7%AF%84%E5%9B%B2%E3%80%81%E5%87%A6%E7%90%86%E8%83%BD%E5%8A%9B%E3%81%AE%E7%A8%8B%E5%BA%A6%E7%AD%89%20%EF%BC%882%EF%BC%89%E7%9B%AE%E6%A8%99%E5%BE%A9%E6%97%A7%E6%99%82%E9%96%93%EF%BC%88RTO%EF%BC%89%EF%BC%9A%E7%9B%AE%E6%A8%99%E5%BE%A9%E6%97%A7%E3%83%AC%E3%83%99%E3%83%AB%E3%81%BE%E3%81%A7%E3%81%AE%E5%BE%A9%E6%97%A7%E3%81%AB%E8%A6%81%E3%81%99%E3%82%8B%E6%99%82%E9%96%93%20%EF%BC%883%EF%BC%89%E7%9B%AE%E6%A8%99%E5%BE%A9%E6%97%A7%E6%99%82%E7%82%B9%EF%BC%88RPO%EF%BC%89%EF%BC%9A%E7%9B%AE%E6%A8%99%E3%81%A8%E3%81%99%E3%82%8B%E5%BE%A9%E6%97%A7%E3%81%AE%E6%99%82%E7%82%B9%EF%BC%88%E7%9B%B4%E8%BF%91%E3%81%AE%E3%83%90%E3%83%83%E3%82%AF%E3%82%A2%E3%83%83%E3%83%97%E6%99%82%E7%82%B9%EF%BC%89