In Silico

クラウド

AWS CDKとは:CloudFormationとの違いと安全なデプロイ

2026/10/18 シリーズ「AWS 入門」 第10回 / 全10回

シリーズAWS 入門全10回
  1. 第1回AWSとは?できることと仕組み、主要サービスをわかりやすく解説
  2. 第2回AWSマルチアカウントとは?分ける理由とOrganizationsの設計
  3. 第3回AWS IAMロールとポリシーの違いとは?使い分けと許可の決まり方
  4. 第4回AWS VPC設計入門:CIDRの決め方とサブネットの分け方
  5. 第5回Amazon EC2とは?インスタンスの起動・料金・タイプの選び方
  6. 第6回AWS Lambdaとは?サーバーレスの仕組みと動かし方の基本
  7. 第7回Amazon S3とは?バケットとオブジェクトの仕組み、料金と公開設定
  8. 第8回AWSデータベースの選び方:RDSとAuroraとDynamoDBの使い分け
  9. 第9回AWSの障害対策:マルチAZ・再試行・バックアップの基本
  10. 第10回AWS CDKとは:CloudFormationとの違いと安全なデプロイ

このシリーズの紹介へシリーズ一覧へ

  • AWS CDK
  • CloudFormation
  • デプロイ
  • AWS
  • クラウド
  • コンストラクト
  • スタック
  • テンプレート
  • cdk synth
  • cdk diff
  • cdk deploy
  • 変更セット
  • ロールバック
  • カナリアリリース
  • CloudWatch
  • CloudTrail
  • CodeDeploy
  • ブートストラップ
  • 置換
  • アラーム
  • 運用上の優秀性
  • Infrastructure as Code
  • Amazon Builders' Library
  • Well-Architected
目次
背景・問い・要点
背景

AWS の上の仕組みは、表やデータベース、関数、ネットワーク、権限といった資源(リソース)の組み合わせでできている。どの資源を、どの設定で持つかを構成という。構成を画面の操作で作る代わりに、コードで書いてバージョン管理する考え方を IaC(Infrastructure as Code)という。デプロイは、書いたコードや構成を、実際に動いている環境に反映することである。反映がうまくいかなかったときに、前の状態へ戻すことをロールバック(巻き戻し)という。

AWS 自身の IaC の仕組みが AWS CloudFormation である。CloudFormation では、資源と設定を YAML か JSON のテキストで書く。これをテンプレートという。CloudFormation は、テンプレートから作った資源のまとまりを、スタックという一つの単位で作り、更新し、削除する1。AWS CDK(AWS Cloud Development Kit)は、TypeScript や Python などのプログラミング言語で構成を書き、それを CloudFormation のテンプレートに変換して配備する、オープンソースの開発フレームワークである2。

AWS の Well-Architected フレームワークは、運用上の優秀性の柱の設計原則に「小規模かつ可逆的な変更を頻繁に行う」を挙げ、デプロイの自動化と小さな変更が、失敗したときの影響の範囲を小さくし、早く元に戻せるようにすると書く3。AWS が自社のサービスの作り方を書いた Amazon Builders’ Library には、人の手を介さずに安全にデプロイする仕組みの記事がある4。本稿は、CDK と CloudFormation の仕組みを実際のコードと出力で説明し、変更を安全に出すための AWS の考え方と、その限界までを見る。

問い

AWS CDK とは何で、CloudFormation とどう違うのか。正しく作った構成を変えるとき、何が壊れる可能性があり、どう防ぐのか。

要点

AWS CDK は、プログラミング言語で書いた構成を、CloudFormation のテンプレートに変換して配備する道具である。資源を作り、変え、失敗したときに巻き戻すのは CloudFormation で、CDK はその前の、テンプレートを書く段を受け持つ。変更で壊れやすいのは、資源の作り直し(置換)が起きるときである。名前を一つ変えただけで、表が新しい空の表に入れ替わることがある。だから、配備の前に cdk diff と変更セットで、置換や削除が起きないかを確かめる。本番へは、一部の要求から段階的に出し、CloudWatch のアラームが鳴れば自動的に巻き戻す。 ただし、巻き戻せるのはコードと設定で、新しい版が書いたデータは戻らない。段階的に出しても、まれな条件でしか起きない欠陥は見つけきれない。

モデル・例示

図書館の予約の仕組みを CDK で作り、変える

※ この節の例は、説明のために作った架空のものです。

ある市の図書館が、本の予約を受け付ける仕組みを、AWS CDK で作るとする。予約は Amazon DynamoDB の表に一件ずつ書く。表のパーティションキーは本の番号(book_id)、ソートキーは予約した日時(reserved_at)である。予約を受け付ける処理は、AWS Lambda の関数で動かす。言語は TypeScript を使う。

コードを書く

担当者は、LibraryStack というスタックに、表と関数を一つずつ書いた。最後の行は、関数に表を読み書きする権限を与えている。

const table = new dynamodb.Table(this, 'Reservations', {
  partitionKey: { name: 'book_id', type: dynamodb.AttributeType.STRING },
  sortKey: { name: 'reserved_at', type: dynamodb.AttributeType.STRING },
  billingMode: dynamodb.BillingMode.PAY_PER_REQUEST,
});

const reserve = new lambda.Function(this, 'Reserve', {
  runtime: lambda.Runtime.NODEJS_22_X,
  handler: 'index.handler',
  code: lambda.Code.fromAsset('lambda'),
  environment: { TABLE_NAME: table.tableName },
});

table.grantReadWriteData(reserve);

new dynamodb.Table(...) の二つ目の引数 'Reservations' は、コンストラクト(CDK で資源を表す部品)の ID である。lambda.Code.fromAsset('lambda') は、手元の lambda というフォルダーにある関数のコードを使う、という意味である。

テンプレートに変換する:cdk synth

cdk synth を実行すると、CDK はこのコードから CloudFormation のテンプレートを作る5。CDK のバージョン 2.273.0 で実際に作ると、テンプレートには四つの資源が入った。

テンプレートの資源何か
AWS::DynamoDB::Table予約の表
AWS::Lambda::Function予約を受け付ける関数
AWS::IAM::Role関数が使うロール
AWS::IAM::Policy表を読み書きする許可

コードには、ロールもポリシーも書いていない。最後の一行 grantReadWriteData から、CDK が、表の読み書きに要る操作を並べた許可のポリシーを書き出した。表の部分は、次のようになった。

Reservations25D4BAC6:
  Type: AWS::DynamoDB::Table
  Properties:
    BillingMode: PAY_PER_REQUEST
    KeySchema:
      - AttributeName: book_id
        KeyType: HASH
      - AttributeName: reserved_at
        KeyType: RANGE
  UpdateReplacePolicy: Retain
  DeletionPolicy: Retain

一行目の Reservations25D4BAC6 は、テンプレートの中で資源を見分ける名前で、論理 ID という。CDK は、コンストラクトの ID の後ろに、8 文字のハッシュを付けて論理 ID を作る。ハッシュは、コンストラクトのパスから作る。パスは、スタックの中でどこにあるかを、名前を並べて表したもので、ここでは LibraryStack/Reservations である6。最後の二行は、スタックから表を外すときも、作り直すときも、元の表を消さずに残す、という指定である。データを持つ資源の多くについて、CDK は既定で残す側を選ぶ7。

配備する:cdk deploy

配備の前に一度だけ、この AWS アカウントとリージョンで、ブートストラップという準備をする。CDK は CDKToolkit という名前のスタックを作り、関数のコードなどを置く S3 のバケットと、配備に使う IAM のロールを用意する8。

担当者が cdk deploy を実行すると、CDK はテンプレートを作り直し、関数のコードを固めたファイルをバケットに上げ、テンプレートを CloudFormation に渡す9。このとき、CDK は変更セット(これから行う変更の一覧)を作り、それから実行する。新しい IAM の許可が加わるので、CDK は実行の前に担当者の承認を求める10。承認すると、CloudFormation が四つの資源を作る。

名前を一つ変えただけで、表が入れ替わる

半年後、別の担当者が、分かりやすくしようとコンストラクトの ID を 'Reservations' から 'BookReservations' に変えた。表の中身にも、関数にも、手を加えていない。手元で、最初の版のテンプレートと比べると、cdk diff は次のように示した(資源の行だけを抜き出した)。動いているスタックに対して実行すると、cdk diff は既定で変更セットを使い、より正確に比べる11。

[-] AWS::DynamoDB::Table Reservations Reservations25D4BAC6 orphan
[+] AWS::DynamoDB::Table BookReservations BookReservations2E349B66
[~] AWS::IAM::Policy Reserve/ServiceRole/DefaultPolicy ReserveServiceRoleDefaultPolicyB7E9687B
[~] AWS::Lambda::Function Reserve Reserve3206C117

[-] は消える資源、[+] は加わる資源、[~] は変わる資源を表す11。ID が変わると論理 ID が変わり、CloudFormation は、それを別の資源とみなす6。このまま配備すると、空の表が新しく作られ、関数は新しい表に予約を書き、新しい表から予約を読むようになる。これまでの予約は、利用者からは消えたように見える。古い表は、Retain の指定のおかげで消されない。ただし、スタックの管理から外れ(orphan)、料金だけがかかり続ける。

ソートキーの名前を reserved_at から requested_at に変えたときも、cdk diff は表の行に replace、キーの設定の行に (requires replacement) と示した。キーの設定は、変えると表の作り直し(置換)になる設定である。

担当者は、この差分を見て、ID を元に戻した。CDK の文書は、デプロイの後にコンストラクトの ID を変えると資源が置き換わるので、配備の前に cdk diff で確かめるよう書いている6。

新しい版を、一部の要求から出す

次に、関数のコードを直した新しい版を出す。Lambda の関数は、コードと設定を固定した版(バージョン)を持てる12。担当者は、いきなりすべての要求を新しい版に回さないように、CDK に次の三つを書き足した。

const live = new lambda.Alias(this, 'Live', {
  aliasName: 'live',
  version: reserve.currentVersion,
});

const errors = new cloudwatch.Alarm(this, 'LiveErrors', {
  metric: live.metricErrors({ period: Duration.minutes(1) }),
  threshold: 1,
  evaluationPeriods: 1,
  comparisonOperator: cloudwatch.ComparisonOperator.GREATER_THAN_THRESHOLD,
});

new codedeploy.LambdaDeploymentGroup(this, 'Deploy', {
  alias: live,
  deploymentConfig: codedeploy.LambdaDeploymentConfig.CANARY_10PERCENT_5MINUTES,
  alarms: [errors],
});

一つ目は、関数の版を指す別名(エイリアス)live である。利用者の要求は、この別名を通して関数に届く。二つ目は、Amazon CloudWatch のアラームである。別名を通した呼び出しのエラーの数が、1 分間で 1 回を超えると、アラームの状態が ALARM になる。このエラーの数は、新しい版と元の版の両方への呼び出しを合わせたものである。三つ目は、AWS CodeDeploy に、10% の要求を新しい版に回し、5 分後に残りの 90% を回すよう指定する13。このアラームが鳴れば、CodeDeploy は配備を巻き戻す14。CloudFormation は、別名の指す版が変わると、CodeDeploy の配備を行う15。

新しい版には、ある条件で失敗する誤りがあった。配備は、次のように進んだ。

  1. 担当者CloudFormation1. cdk deploy で、新しい版を含む変更を出す
  2. CloudFormationCodeDeploy2. 別名を新しい版へ移す配備を頼む
  3. CodeDeploy3. 要求の 10% を新しい版に回す
  4. CloudWatch4. 別名を通したエラーが 1 分間で 1 回を超え、アラームが ALARM になる
  5. CodeDeployCloudWatch5. アラームの状態を確かめる
  6. CloudWatchCodeDeploy6. ALARM を返す
  7. CodeDeploy7. 配備を止め、すべての要求を元の版に戻す

アラームが 5 分のうちに鳴ったので、残りの要求を新しい版へ移す前に、配備を巻き戻せた。誤りに当たった要求は、新しい版に回った一部だけで済んだ。ただし、その間に新しい版が表に書いた予約は、表に残る。新しい版が、古い版の読めない形で予約を書いていたら、元の版に戻した後に、その予約を読むところで失敗する。巻き戻しで戻るのは、関数のコードと設定だけである。

AWS CDK とは:プログラミング言語で書き、CloudFormation で配備する

AWS CDK は、クラウドの構成をコードで定義し、AWS CloudFormation を通して配備する、オープンソースの開発フレームワークである2。使える言語は TypeScript、JavaScript、Python、Java、C#、Go の六つである2。CDK 自体は TypeScript で作られ、ほかの言語からは、JSII という道具で作った対応の部品を通して使う16。

CDK を使うこと自体は無料である。払うのは、CDK で作った資源の料金で、画面から作ったときと変わらない17。今使うのはバージョン 2 で、バージョン 1 のサポートは 2023 年 6 月 1 日に終わった2。コマンドの道具(CDK CLI)と、資源を書くための部品の集まり(AWS Construct Library)は、別々に版を重ねる。部品の集まりの各版は、それが出た時点の CLI と組み合わせて使える。サポートが続いている部品の集まりを使っている限り、CLI の版を上げるのは常に安全だと、AWS は書く18。

アプリ、スタック、コンストラクト

CDK のプロジェクトの中に、CDK のアプリを一つ作る。アプリの中にスタックを書き、スタックの中に、資源と設定をコンストラクトで書く。CDK のスタックは、CloudFormation のスタックにそのまま当たる19。スタックは、配備の単位である。一つのスタックの中のものは、まとめて配備される20。

コンストラクトは、抽象の度合いで三つの段に分かれる21。

コンストラクトの段何を書くか
L1(CFN リソース)CloudFormation の資源の一つを、そのまま書く
L2(キュレーションされたコンストラクト)一つの資源を、既定の設定や権限の付け方と一緒に書く
L3(パターン)複数の資源を組み合わせた、ひとまとまりの構成を書く

L1 は、CloudFormation の資源と一対一に対応し、抽象化をしない。たとえば CfnBucket は、AWS::S3::Bucket に当たる21。L2 は CDK の開発チームが作り、よく使われる。安全な既定の設定や、権限の書き方を含む21。DynamoDB の表を表す dynamodb.Table は L2 で、その grantReadWriteData は、表を読み書きする許可を与える。CloudFormation に新しく加わった資源や設定が L1 として使えるようになるまでに、最大で一週間ほどかかることがある21。L3 は、システムの大きな部分をまとめて作るためのもので、使い方を想定して選んだ既定の設定を持つ21。AWS の CDK の紹介のページに載っている、短い L3 のコードからは、500 行を超えるテンプレートと、50 を超える資源ができる2。

cdk synth、cdk diff、cdk deploy

CDK の主なコマンドは三つである。

コマンドすること
cdk synthアプリからテンプレートを作り、cdk.out に置く
cdk diff今のスタックとの違いを示す
cdk deployテンプレートを作り、CloudFormation で配備する

cdk synth が作るものを、クラウドアセンブリという。スタックごとのテンプレートと、関数のコードやコンテナのイメージなどのファイル(アセット)の写しを含む5。cdk diff は、既定では CloudFormation の変更セットを作って、置換が起きるかどうかまで正しく示す。変更セットを作れないときは、テンプレートどうしの比較に切り替える。こちらは速いが、正確さは劣る11。[~] が付いても、作り直しになるとは限らない。関数のコードを変えても関数は更新されるだけだが、関数の名前を変えると作り直しになることがある11。

cdk deploy は、既定で変更セットを作ってから配備する。変更セットを作るだけで配備しない方法もあり、別の道具や人の承認を挟むときに使う10。許可の範囲を広げる変更(IAM の許可やセキュリティグループの規則)があれば、既定で承認を求める10。ほかに、CloudFormation を通さずに関数のコードなどを直接差し替える --hotswap がある。これは、テンプレートと実際の資源とのずれ(ドリフト)をわざと生むので、開発の環境だけで使い、本番では使わないよう、AWS は書いている10。

ブートストラップ

アセットを含むスタックを配備するには、アカウントとリージョンの組ごとに、一度ブートストラップをする。CDK は CDKToolkit というスタックで、ファイルを置く S3 のバケット、コンテナのイメージを置く ECR のリポジトリ、配備に使う IAM のロールを作る8。このロールのうち一つは、CloudFormation が配備を行うためのロールで、既定では、そのアカウントのどの資源も読み書きできる22。誰がこのロールを使えるかは、ブートストラップのときに決める。

CloudFormation とは:テンプレートからスタックを作り、変える

CloudFormation は、テンプレートに書いた資源を作り、設定する23。資源は、スタックという単位でまとめて作り、更新し、削除する1。CDK を使うときも、資源を実際に作り、変え、失敗したときに戻すのは CloudFormation である。CDK のベストプラクティスでは、CloudFormation は、CDK が確実な配備のために使う実装の詳細として扱う20。それでも、変更が何を起こすかは、CloudFormation の規則に従う。

変更セットと、三つの更新のしかた

変更セットは、スタックへの変更が、動いている資源にどう影響するかを、前もって示す一覧である。作った時点では、スタックは何も変わらない24。CloudFormation が資源を更新するしかたは、変える設定によって三つに分かれる25。

更新のしかた何が起きるか
中断を伴わない更新資源を止めずに設定を変える
一時的な中断を伴う更新資源が一時的に止まる
置換新しい資源を作り、古い資源を消す

置換では、CloudFormation は、たいてい新しい資源を先に作り、ほかの資源からの参照を付け替え、古い資源を消す25。たとえば RDS のデータベースのポート番号を変えると、新しいデータベースが作られ、古いデータベースは消される25。バックアップを取っていなければ、古いデータベースのデータは失われる1。どの設定が置換になるかは、資源の種類ごとの文書に書いてある。

変更セットを作るとき、CloudFormation は、設定の書き方の誤り、名前のぶつかり、上限などの、よくある失敗の原因を前もって調べる。文書には、六種類の検査が載っている(2026 年 10 月の時点)26。それでも、変更セットは更新の成功を保証しない24。

失敗すると、既定では巻き戻す

スタックの作成や更新が途中で失敗すると、CloudFormation は、既定では、それまでの変更を戻して前の安定した状態に戻す10。巻き戻しの途中で、戻せない変更に当たることもある。たとえば、CloudFormation の外で消されたデータベースに戻ろうとしたときである。このとき、スタックは UPDATE_ROLLBACK_FAILED という状態になり、そのままでは更新できない。原因を取り除いて巻き戻しを続けるか、スタックを消すしかない27。

2026 年 6 月 30 日には、資源が安定するのを待たずに完了とする「エクスプレスモード」が加わった。このモードでは、既定で巻き戻しをしない28。CDK の文書は、本番の配備には勧めないと書く10。一方、AWS のブログの発表は、本番の場面も使い道に挙げている29。

消さない、変えさせないための指定

テンプレートでは、DeletionPolicy と UpdateReplacePolicy に Retain を書くと、元の資源を消さずに残せる。DeletionPolicy は、スタックを消したときや、資源がスタックから外れたときに30、UpdateReplacePolicy は、置換のときに31、元の資源をどうするかを決める。何も書かなければ、CloudFormation は資源を消す。スタックから外すときの RDS のデータベースの多くは例外で、既定でスナップショットを取ってから消す30。置換のときは、RDS でも既定で消す31。CDK では、RemovalPolicy を一つ書けば、この二つが書き出される。データを持つ多くの L2 は、既定で残す(RETAIN)7。

スタックポリシーを付けると、指定した資源への更新を止められる。CloudFormation の文書は、これを誤った更新を防ぐための安全装置とし、誰に何を許すかは IAM で決めるよう書いている32。

データベースのように状態を持つ資源は、状態を持たない資源とは別のスタックに置き、そのスタックに削除の保護を付ける。CDK のベストプラクティスが、そう勧めている。そうすれば、状態を持たないスタックは、データを失う心配なく消したり作り直したりできる。状態を持つ資源は、コンストラクトの名前を変えると置換になることにも、注意を促している20。名前を変えても資源を作り直さずに動かす cdk refactor は、2026 年 10 月の時点でプレビューである33。

CDK と CloudFormation の違いと、どちらで書くか

CloudFormation のテンプレートは宣言型で、望む状態をそのまま書く。CDK では、汎用のプログラミング言語で、手続きとして構成を組み立てられる19。繰り返しや条件、部品の再利用を、ふつうのプログラムと同じように書ける。DynamoDB の表を読み書きする許可を関数に与える grantReadWriteData のように、一行から許可のポリシーを作らせることもできる。

この違いには、実務者からの異論もある。2022 年の記事で、iRobot の研究者で AWS Serverless Hero と紹介されている Ben Kehoe は、cdk synth はコンパイラではなく、資源の定義をある言語から別の言語へ、情報を落としながら変える変換器だと書いた34。Kehoe は、同じコードから毎回違う構成ができうる書き方を許すことにも、開発者の意図が手元のコードの中に留まり、AWS の側には変換した後のテンプレートしか渡らないことにも反対している34。サーバーレスの開発者 Yan Cui は、2023 年の記事で、汎用の言語で構成を書けることは「恵みでもあり、呪いでもある」とし、決まった構造がないので、人ごとに作りがばらばらになると書いた。そのうえで、CDK を勧められる場面もあると述べている35。CDK の開発チームの Adam Ruka は、2021 年 12 月、ポッドキャストでの CDK への批判に答えたブログで、CDK は、同じコードからいつも同じテンプレートができるように書くことを強く勧めていると書いた36。

CloudFormation で直接書くか、CDK で書くかは、チームが読み書きしやすい方で選んでよい。ただ、CDK を使っても、変更が置換になるか、巻き戻しがどう進むかは、CloudFormation の規則に従う。CDK で書くチームも、変更セットと CloudFormation の資源の文書を読めるようにしておく必要がある。

変更を安全に出す:小さく、一部から、自動で戻す

AWS の考え方:運用上の優秀性の柱

Well-Architected フレームワークの運用上の優秀性の柱は、設計原則の一つに「可能な場合は安全に自動化する」を挙げ、アプリケーション、インフラ、設定、手順をコードで定義し、速度の制御、エラーのしきい値、承認といった歯止めを組み込むよう書く3。デプロイのリスクを減らすための四つのベストプラクティスは、次のとおりである37。

ベストプラクティス中身
変更の失敗に備える元の状態に戻す手順を用意する
デプロイをテストする本番と同じ手順で事前に試す
安全なデプロイ戦略を使う影響を限る出し方を選ぶ
テストとロールバックを自動化条件を満たさなければ自動で戻す

三つ目は、すべての本番にいっぺんに失敗する変更を出して、すべての利用者に同時に影響が出ることを、避けるべき例に挙げる38。四つ目は、期待した結果が得られないときや自動のテストに失敗したときに、ロールバックが自動で始まるようにする39。

Amazon の配備のしかた:段階を踏み、待ち、鳴れば戻す

AWS の技術者 Clare Liguori は、Amazon Builders’ Library の記事で、Amazon の典型的な配備の流れを説明している4。変更は、ソース、ビルド、テスト、本番の四つの段を通る。本番の前に、alpha、beta、gamma といった本番前の環境で試す。本番でも、まず一台の仮想マシンや一つのコンテナ、Lambda の呼び出しのわずかな割合といった、最小の単位にだけ出す「ワンボックス」の段を置く4。ワンボックスに回る要求はわずかなので、サービス全体のアラームは鳴らないことがある。そこで、ワンボックスが受けた要求だけのメトリクスでも巻き戻す4。Lambda でも、別名を通した呼び出しのメトリクスを、実際に動いた版ごとに分けて見られる12。

本番へは、大きさを段々に増やす「波」に分けて出す。最初の波は、要求の少ないリージョンに出す4。各段の後には待ち時間(ベイクタイム)を置く。典型的な流れでは、ワンボックスの後に 1 時間以上、最初の波の後に 12 時間以上、残りの波のそれぞれの後に 2〜4 時間以上待つ。すべてのリージョンに出るまでに、営業日で 4〜5 日かかる4。待ち時間には、「作成の API に 100 回以上の要求が来るまで待つ」のように、データの数の条件も付ける4。待っている間に、チームの重大度の高いアラームが鳴れば、配備は自動で巻き戻る4。

Amazon でソフトウェア開発の管理職だった Mark Mansour は、かつてコードを入れてから本番に出るまで平均 16 日かかり、そのうち 14 日近くは、人が次の作業を始めるのを待つ時間だったと書いている40。自動化は、配備を遅くするためではなく、待ち時間を減らして速く出すためのものである。

外部にも、同じ方向の考え方がある。Google の SRE の本は、カナリアを、変更をサービスの一部にだけ、期間を限って出して評価することと定義し、欠陥をできるだけ早く、サービスへの影響をできるだけ小さく見つけられるとする41。カナリアリリースという名前は、炭鉱にカナリアを連れて入り、安全を確かめた習慣から来ている41。Danilo Sato も、カナリアリリースでは、問題が見つかれば利用者を古い版へ回し直すだけで戻せると書く42。

時間で止めるか、いつでも出すか

Liguori は、多くのチームが金曜日と夕方の遅い時間を配備の時間帯から外していると書く。配備の後に、夜や週末に当番の技術者を呼び出すリスクを減らすためである4。Liguori の記事より前の 2019 年に、Charity Majors はブログで逆の立場を取っていた。Majors のチームは、いつも一定の速さで出しているときの方がシステムが安定すると分かったので、金曜日や休日にも配備を止めないことにした。Majors は、問題は金曜日ではなく、速いフィードバックの循環だとした43。どちらも、変更を小さく頻繁に出すことには賛成している。分かれているのは、時間帯で止めることが、リスクを減らすのか、変更をためて大きくするのかという点である。Liguori 自身も、時間帯を狭くしすぎると、閉じている間に変更がたまると書いている4。

AWS で段階的に出す仕組み

AWS では、段階的なデプロイを、サービスごとの仕組みで組む。Lambda では、別名に二つの版を重みを付けて結び付け、要求を分けられる12。CodeDeploy は、Lambda と Amazon ECS のための、決まった配分を用意している13。

CodeDeploy の配分の例要求の移し方
LambdaCanary10Percent5Minutes10% を移し、5 分後に残りを移す
LambdaLinear10PercentEvery1Minute1 分ごとに 10% ずつ移す
LambdaAllAtOnceすべてを一度に移す

CodeDeploy は、配備に失敗したときや、指定したアラームが鳴ったときに、前の版を新しい配備として出し直して巻き戻す44。Amazon ECS には、失敗した配備を、前に完了した配備へ自動で戻すデプロイサーキットブレーカーがある45。2025 年には、ECS の中だけでブルー/グリーンのデプロイ(7 月)と、線形とカナリアのデプロイ(10 月)ができるようになり、CloudWatch のアラームで失敗を見つけて巻き戻せる4647。

CloudFormation にも、ロールバックトリガーがある。スタックの作成や更新の間と、その後の最大 180 分の監視の時間に、指定した CloudWatch のアラームが ALARM になれば、操作を巻き戻す48。付けられるアラームは五つまでで、既定では、データが足りない状態(INSUFFICIENT_DATA)では巻き戻さない48。

一部から出す方式は、要求が少ないと効きにくい。Lambda の文書は、要求が少ないと、設定した割合と実際の割合が大きくずれうると書く12。SRE の本も、わずかな要求を受けただけでカナリアを終えても、さまざまな要求を受けるシステムでは役に立つ判断材料にならないと書く41。

巻き戻せない変更:データの形と二段階のデプロイ

自動の巻き戻しで戻るのは、コードと設定である。Amazon の技術者 Sandeep Pokkunuri は、Amazon Builders’ Library の記事で、新しい版に上げるときにも、古い版に戻すときにも、ソフトウェアがうまく動かないことがあると書く49。状態を持つソフトウェアでは、新しい版は古い版が書いたデータを読めなければならず、古い版も新しい版が書いたデータを読めなければならない49。

そのために使うのが、二段階のデプロイである。Pokkunuri は、データの形を XML から JSON に変える場合を説明している。一段目では、すべてのサーバーが JSON も読めるようにするが、書くのは XML のままにする。二段目で、JSON で書き始める49。二段目を巻き戻しても、一段目の版は JSON を読めるので、壊れない。Amazon は、配備のたびに、進める向きにも戻す向きにも安全かを確かめている49。Sato も、カナリアリリースでは、データベースが新旧の両方の版を支えられるように変更を管理する必要があると書く42。

CloudWatch と CloudTrail:変化を見る、誰が変えたかを見る

CloudWatch:メトリクスとアラーム

自動で巻き戻すには、何が「失敗」かを、機械が読める数で決めておく必要がある。Amazon CloudWatch は、AWS の資源と、その上で動くアプリケーションを監視するサービスである50。CloudWatch は、メトリクス(時間とともに記録する数値)を集める。メトリクスは名前空間ごとにまとまり、次元(名前と値の組)で見分ける51。Lambda は、呼び出しの回数(Invocations)やエラーの数(Errors)などのメトリクスを CloudWatch に送る52。

アラームは、一つのメトリクスか、メトリクスの式を見張る53。状態は、しきい値の内側にある OK、外側にある ALARM、データが足りず判断できない INSUFFICIENT_DATA の三つである54。アラームは、期間(一つのデータ点を作る時間の長さ)、評価期間(直近のいくつのデータ点を見るか)、アラームを実行するデータポイント(そのうちいくつがしきい値を超えたら ALARM にするか)で決まる54。データが届かないときの扱いも決められる。CloudWatch の文書は、いつもデータを出すメトリクスで巻き戻しのためのアラームを作るなら、データが届かないことを異常とみなす設定を考えるよう書く55。CloudWatch には、アプリケーションのログを集める CloudWatch Logs もある56。

資源の数値に加えて事業の数値も記録し、ロールバックなどの判断の自動化に使う。これも CDK のベストプラクティスにある勧めである20。

CloudTrail:誰が、いつ、何をしたか

AWS CloudTrail は、利用者、ロール、AWS のサービスが行った操作を、イベントとして記録する57。資源を作る、設定を変えるといった管理の操作は管理イベント、資源の中のデータへの操作はデータイベントとして分けて記録する58。過去 90 日の管理イベントは、イベント履歴として、リージョンごとに料金なしで見られる57。それより長く残すには、証跡(トレイル)を作り、S3 のバケットに送る57。

CloudFormation の API の呼び出しは、すべて CloudTrail に記録される59。2024 年に、自分たちの道具を CDK の上に作るのをやめた SST のブログは、CloudFormation の失敗の知らせが大まかすぎるときは、CloudTrail で元のイベントとエラーの文を見るとよいと書いている60。同じブログは、巻き戻しの途中で失敗してスタックを更新できなくなる状態を「ロールバック地獄」と呼び、本番へ大きな更新を出したチームから、多くの相談を受けたと書いている60。

段階的に出しても防げない障害:2021 年の東京の Direct Connect

段階的なデプロイは、影響の範囲を小さくし、見つけるための時間を稼ぐ。ただし、すべての欠陥を見つけられるわけではない。2021 年 9 月 2 日、東京リージョンで、自社のネットワークと AWS を専用線でつなぐ AWS Direct Connect に障害が起きた。日本時間の午前 7 時 30 分から、つながったり切れたりし、パケットの消失が増えた。午後 1 時 42 分に解消した61。

原因は、新しいプロトコルを有効にした、ネットワークの機器の OS に潜んでいた欠陥だった。AWS は、ネットワークの機器の OS への変更を、ゆっくりと管理された形で本番に出している。この OS は 2021 年 1 月に初めて本番に出て、8 か月かけてすべてのリージョンに広げられ、その間は問題が出ていなかった61。AWS は、実験の環境では、すべての通信と、パケットの組み合わせは試せないと書いている61。技術者は、新しいプロトコルを、まず一つのアベイラビリティーゾーンで止めて回復を確かめ、並行して東京リージョン全体に広げる準備を進めた61。止める操作も、一部から出している。

費用

CDK には料金がかからない17。CloudFormation も、AWS:: で始まる AWS の資源の操作には料金を取らない。レジストリーに登録した拡張の資源(自分で作ったものも含む)を使うと、操作 1 回ごとに 0.0009 USD と、30 秒を超えた時間の分の料金がかかる。操作は 1 か月に 1,000 回までは無料である62。失敗して巻き戻した作成でも、その間にできた資源の料金はかかる63。CodeDeploy で EC2、Lambda、ECS に出す分には、追加の料金がかからない64。

CloudWatch には無料の枠があり、標準のアラームを 10 個のメトリクスの分まで、ログを 5 GB まで使える65。それを超えると、標準のアラームは 1 メトリクスあたり月 0.10 USD、ログの取り込みは東京で 1 GB あたり 0.76 USD である(2026 年 10 月 7 日付けの AWS の価格表)66。CDK の既定では、ログは無期限に残る。本番では、要らないデータが積み上がり、料金も増えるので、保存の期間を決めるよう、CDK の文書は書いている20。CloudTrail のイベント履歴は料金がかからず、管理イベントの最初の一つの写しを S3 に送る証跡も無料である67。

変更は壊しうる前提で、確かめ、小さく出し、戻せるようにする

AWS CDK は、プログラミング言語で書いた構成を、CloudFormation のテンプレートに変換して配備する道具である。資源を作り、変え、失敗したときに戻すのは CloudFormation である。名前の変更やキーの変更は、資源の置換になり、データを持つ資源では、中身を失うことがある。配備の前に cdk diff と変更セットで置換と削除を確かめ、データを持つ資源には残す指定を付ける。

本番へは、一部の要求から段階的に出し、CloudWatch のアラームが鳴れば自動で巻き戻す。巻き戻しで戻るのはコードと設定で、データの形の変更は、二段階に分けて、どちらの向きにも戻せるようにしておく。それでも、まれな条件でしか表れない欠陥は、段階的に出しても見つけきれない。問題が起きた変更を止めるときも、一部から止めて確かめる。

出典67件
  1. AWS「How CloudFormation works」(AWS CloudFormation ユーザーガイド)2026年10月18日取得. https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cloudformation-overview.html ↩ ↩2 ↩3

  2. AWS「What is the AWS CDK?」(AWS CDK v2 Developer Guide)2026年10月18日取得. https://docs.aws.amazon.com/cdk/v2/guide/home.html ↩ ↩2 ↩3 ↩4 ↩5

  3. AWS「Operational excellence」(Operational Excellence Pillar、AWS Well-Architected Framework)2026年10月18日取得. https://docs.aws.amazon.com/wellarchitected/latest/operational-excellence-pillar/operational-excellence.html ↩ ↩2

  4. Clare Liguori「Automating safe, hands-off deployments」Amazon Builders’ Library、2020年6月18日、2026年10月18日取得. https://builder.aws.com/content/3ErTKQOTKc5NIw031UePBPxTQ6I/automating-safe-hands-off-deployments ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8 ↩9 ↩10

  5. AWS「cdk synthesize」(AWS CDK v2 Developer Guide)2026年10月18日取得. https://docs.aws.amazon.com/cdk/v2/guide/ref-cli-cmd-synth.html ↩ ↩2

  6. AWS「Identifiers and the AWS CDK」(AWS CDK v2 Developer Guide)2026年10月18日取得. https://docs.aws.amazon.com/cdk/v2/guide/identifiers.html ↩ ↩2 ↩3

  7. AWS「class RemovalPolicy」(AWS CDK API Reference 2.273.0)2026年10月18日取得. https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.RemovalPolicy.html ↩ ↩2

  8. AWS「AWS CDK bootstrapping」(AWS CDK v2 Developer Guide)2026年10月18日取得. https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping.html ↩ ↩2

  9. AWS「Deploy AWS CDK applications」(AWS CDK v2 Developer Guide)2026年10月18日取得. https://docs.aws.amazon.com/cdk/v2/guide/deploy.html ↩

  10. AWS「cdk deploy」(AWS CDK v2 Developer Guide)2026年10月18日取得. https://docs.aws.amazon.com/cdk/v2/guide/ref-cli-cmd-deploy.html ↩ ↩2 ↩3 ↩4 ↩5 ↩6

  11. AWS「cdk diff」(AWS CDK v2 Developer Guide)2026年10月18日取得. https://docs.aws.amazon.com/cdk/v2/guide/ref-cli-cmd-diff.html ↩ ↩2 ↩3 ↩4

  12. AWS「Implement Lambda canary deployments using a weighted alias」(AWS Lambda 開発者ガイド)2026年10月18日取得. https://docs.aws.amazon.com/lambda/latest/dg/configuring-alias-routing.html ↩ ↩2 ↩3 ↩4

  13. AWS「Working with deployment configurations in CodeDeploy」(AWS CodeDeploy ユーザーガイド)2026年10月18日取得. https://docs.aws.amazon.com/codedeploy/latest/userguide/deployment-configurations.html ↩ ↩2

  14. AWS「aws-cdk-lib.aws_codedeploy module」(AWS CDK API Reference)2026年10月18日取得. https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_codedeploy-readme.html ↩

  15. AWS「UpdatePolicy attribute」(AWS CloudFormation Template Reference)2026年10月18日取得. https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-attribute-updatepolicy.html ↩

  16. AWS「Supported programming languages for the AWS CDK」(AWS CDK v2 Developer Guide)2026年10月18日取得. https://docs.aws.amazon.com/cdk/v2/guide/languages.html ↩

  17. AWS「AWS Cloud Development Kit FAQs」2026年10月18日取得. https://aws.amazon.com/cdk/faqs/ ↩ ↩2

  18. AWS「AWS CDK versioning」(AWS CDK v2 Developer Guide)2026年10月18日取得. https://docs.aws.amazon.com/cdk/v2/guide/versioning.html ↩

  19. AWS「Learn AWS CDK core concepts」(AWS CDK v2 Developer Guide)2026年10月18日取得. https://docs.aws.amazon.com/cdk/v2/guide/core-concepts.html ↩ ↩2

  20. AWS「Best practices for developing and deploying cloud infrastructure with the AWS CDK」(AWS CDK v2 Developer Guide)2026年10月18日取得. https://docs.aws.amazon.com/cdk/v2/guide/best-practices.html ↩ ↩2 ↩3 ↩4 ↩5

  21. AWS「AWS CDK Constructs」(AWS CDK v2 Developer Guide)2026年10月18日取得. https://docs.aws.amazon.com/cdk/v2/guide/constructs.html ↩ ↩2 ↩3 ↩4 ↩5

  22. AWS「AWS CDK CLI reference」(AWS CDK v2 Developer Guide)2026年10月18日取得. https://docs.aws.amazon.com/cdk/v2/guide/cli.html ↩

  23. AWS「What is CloudFormation?」(AWS CloudFormation ユーザーガイド)2026年10月18日取得. https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html ↩

  24. AWS「Update CloudFormation stacks using change sets」(AWS CloudFormation ユーザーガイド)2026年10月18日取得. https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-changesets.html ↩ ↩2

  25. AWS「Understand update behaviors of stack resources」(AWS CloudFormation ユーザーガイド)2026年10月18日取得. https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-update-behaviors.html ↩ ↩2 ↩3

  26. AWS「Validate stack deployments」(AWS CloudFormation ユーザーガイド)2026年10月18日取得. https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/validate-stack-deployments.html ↩

  27. AWS「Continue rolling back an update」(AWS CloudFormation ユーザーガイド)2026年10月18日取得. https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-continueupdaterollback.html ↩

  28. AWS「AWS CloudFormation and CDK express mode speeds up infrastructure deployments by up to 4x」(What’s New with AWS)2026年6月30日、2026年10月18日取得. https://aws.amazon.com/about-aws/whats-new/2026/06/aws-cloudformation-cdk/ ↩

  29. Channy Yun「Accelerate your infrastructure deployments by up to 4x with AWS CloudFormation Express mode」AWS News Blog、2026年6月30日、2026年10月18日取得. https://aws.amazon.com/blogs/aws/accelerate-your-infrastructure-deployments-by-up-to-4x-with-aws-cloudformation-express-mode/ ↩

  30. AWS「DeletionPolicy attribute」(AWS CloudFormation Template Reference)2026年10月18日取得. https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-attribute-deletionpolicy.html ↩ ↩2

  31. AWS「UpdateReplacePolicy attribute」(AWS CloudFormation Template Reference)2026年10月18日取得. https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-attribute-updatereplacepolicy.html ↩ ↩2

  32. AWS「Prevent updates to stack resources」(AWS CloudFormation ユーザーガイド)2026年10月18日取得. https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/protect-stack-resources.html ↩

  33. AWS「cdk refactor」(AWS CDK v2 Developer Guide)2026年10月18日取得. https://docs.aws.amazon.com/cdk/v2/guide/ref-cli-cmd-refactor.html ↩

  34. Ben Kehoe「The CDK’s Most Fundamental Flaw is Fixable」Last Week in AWS、2022年2月11日、2026年10月18日取得. https://www.lastweekinaws.com/blog/the-cdks-most-fundamental-flaw-is-fixable/ ↩ ↩2

  35. Yan Cui「Are You Ready for This? Top 5 Earth-Shattering Pros and Cons of AWS CDK」theburningmonk.com、2023年4月15日、2026年10月18日取得. https://theburningmonk.com/2023/04/are-you-ready-for-this-top-5-earth-shattering-pros-and-cons-of-aws-cdk/ ↩

  36. Adam Ruka「My perspective on the CDK opinions from the “AWS FM” podcast」End of Line、2021年12月31日、2026年10月18日取得. https://www.endoflineblog.com/my-perspective-on-the-cdk-opinions-from-the-aws-fm-podcast ↩

  37. AWS「Mitigate deployment risks」(Operational Excellence Pillar、AWS Well-Architected Framework)2026年10月18日取得. https://docs.aws.amazon.com/wellarchitected/latest/operational-excellence-pillar/mitigate-deployment-risks.html ↩

  38. AWS「OPS06-BP03 Employ safe deployment strategies」(Operational Excellence Pillar)2026年10月18日取得. https://docs.aws.amazon.com/wellarchitected/latest/operational-excellence-pillar/ops_mit_deploy_risks_deploy_mgmt_sys.html ↩

  39. AWS「OPS06-BP04 Automate testing and rollback」(Operational Excellence Pillar)2026年10月18日取得. https://docs.aws.amazon.com/wellarchitected/latest/operational-excellence-pillar/ops_mit_deploy_risks_auto_testing_and_rollback.html ↩

  40. Mark Mansour「Going faster with continuous delivery」Amazon Builders’ Library、2019年12月5日、2026年10月18日取得. https://builder.aws.com/content/3F08Mhh186qOa4VhG19egs06NJa/going-faster-with-continuous-delivery ↩

  41. A. Warner, Š. Davidovič ほか「Canarying Releases」(The Site Reliability Workbook 第16章、Google)2026年10月18日取得. https://sre.google/workbook/canarying-releases/ ↩ ↩2 ↩3

  42. D. Sato「CanaryRelease」martinfowler.com、2014年6月25日、2026年10月18日取得. https://martinfowler.com/bliki/CanaryRelease.html ↩ ↩2

  43. Charity Majors「Deploys: It’s Not Actually About Fridays」charity.wtf、2019年10月28日、2026年10月18日取得. https://charity.wtf/p/deploys-its-not-actually-about-fridays ↩

  44. AWS「Redeploy and roll back a deployment with CodeDeploy」(AWS CodeDeploy ユーザーガイド)2026年10月18日取得. https://docs.aws.amazon.com/codedeploy/latest/userguide/deployments-rollback-and-redeploy.html ↩

  45. AWS「How the Amazon ECS deployment circuit breaker detects failures」(Amazon ECS 開発者ガイド)2026年10月18日取得. https://docs.aws.amazon.com/AmazonECS/latest/developerguide/deployment-circuit-breaker.html ↩

  46. AWS「Amazon ECS enables built-in blue/green deployments」(What’s New with AWS)2025年7月17日、2026年10月18日取得. https://aws.amazon.com/about-aws/whats-new/2025/07/amazon-ecs-built-in-blue-green-deployments/ ↩

  47. AWS「Amazon ECS now supports built-in Linear and Canary deployments」(What’s New with AWS)2025年10月30日、2026年10月18日取得. https://aws.amazon.com/about-aws/whats-new/2025/10/amazon-ecs-built-in-linear-canary-deployments/ ↩

  48. AWS「Roll back your CloudFormation stack on alarm breach with rollback triggers」(AWS CloudFormation ユーザーガイド)2026年10月18日取得. https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-rollback-triggers.html ↩ ↩2

  49. Sandeep Pokkunuri「Ensuring rollback safety during deployments」Amazon Builders’ Library、2019年12月5日、2026年10月18日取得. https://builder.aws.com/content/3F04j2yRAAMBuPSPs50xwXZqg01/ensuring-rollback-safety-during-deployments ↩ ↩2 ↩3 ↩4

  50. AWS「What is Amazon CloudWatch?」(Amazon CloudWatch ユーザーガイド)2026年10月18日取得. https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html ↩

  51. AWS「Metrics concepts」(Amazon CloudWatch ユーザーガイド)2026年10月18日取得. https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_concepts.html ↩

  52. AWS「Types of metrics for Lambda Event Functions」(AWS Lambda 開発者ガイド)2026年10月18日取得. https://docs.aws.amazon.com/lambda/latest/dg/monitoring-metrics-types.html ↩

  53. AWS「Using Amazon CloudWatch alarms」(Amazon CloudWatch ユーザーガイド)2026年10月18日取得. https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Alarms.html ↩

  54. AWS「Alarm evaluation」(Amazon CloudWatch ユーザーガイド)2026年10月18日取得. https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/alarm-evaluation.html ↩ ↩2

  55. AWS「Configuring how CloudWatch alarms treat missing data」(Amazon CloudWatch ユーザーガイド)2026年10月18日取得. https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/alarms-and-missing-data.html ↩

  56. AWS「What is Amazon CloudWatch Logs?」(Amazon CloudWatch Logs ユーザーガイド)2026年10月18日取得. https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html ↩

  57. AWS「What Is AWS CloudTrail?」(AWS CloudTrail ユーザーガイド)2026年10月18日取得. https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html ↩ ↩2 ↩3

  58. AWS「CloudTrail concepts」(AWS CloudTrail ユーザーガイド)2026年10月18日取得. https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-concepts.html ↩

  59. AWS「Logging CloudFormation API calls with AWS CloudTrail」(AWS CloudFormation ユーザーガイド)2026年10月18日取得. https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-api-logging-cloudtrail.html ↩

  60. Jay「Moving away from CDK」SST、2024年1月29日、2026年10月18日取得. https://sst.dev/blog/moving-away-from-cdk ↩ ↩2

  61. AWS「Summary of AWS Direct Connect Event in the Tokyo (AP-NORTHEAST-1) Region」2026年10月18日取得. https://aws.amazon.com/message/17908/ ↩ ↩2 ↩3 ↩4

  62. AWS「AWS CloudFormation pricing」2026年10月18日取得. https://aws.amazon.com/cloudformation/pricing/ ↩

  63. AWS「AWS CloudFormation FAQs」2026年10月18日取得. https://aws.amazon.com/cloudformation/faqs/ ↩

  64. AWS「AWS CodeDeploy pricing」2026年10月18日取得. https://aws.amazon.com/codedeploy/pricing/ ↩

  65. AWS「Amazon CloudWatch pricing」2026年10月18日取得. https://aws.amazon.com/cloudwatch/pricing/ ↩

  66. AWS「CloudWatch price list(meteredUnitMaps)」2026年10月7日付け、2026年10月18日取得. https://b0.p.awsstatic.com/pricing/2.0/meteredUnitMaps/cloudwatch/USD/current/cloudwatch.json ↩

  67. AWS「AWS CloudTrail pricing」2026年10月18日取得. https://aws.amazon.com/cloudtrail/pricing/ ↩

この記事はAIを使用して執筆されました。内容には誤りが含まれる可能性があります。事実や数字の出典は脚注から確かめられます。