Linkup
← ブログ一覧

インフラ

Terraformを部分導入した後は?チーム運用へ移るための確認項目

Terraformコードはあるものの、ローカルapplyやState共有、レビューが未整備なチームへ。現状の棚卸し、段階的な移行、役割分担、運用開始の確認項目を整理します。

公開:

  • AWS
  • Terraform
  • IaC
  • 変更管理
この記事の目次

Terraformで一部のAWSリソースを管理できていても、実行方法を知る担当者だけがローカルでapplyしているなら、次の課題はチームで変更を扱う仕組みです。

この記事では、既存コードがあるチームが、State・認証・レビュー・本番承認をつなぎ、別の担当者も変更できる状態へ進むための確認項目を整理します。個別の移行コマンドや、全環境の一括改修は扱いません。以下の進め方は検討用の例であり、顧客の導入実績ではありません。

まだTerraformの導入自体を判断している場合は、導入時期を扱う記事から確認できます。

まず、現在の変更方法を棚卸しする

「コードがあるか」だけでなく、直近の変更を誰がどの手順で適用したかを確認します。分からない欄は未確認として残し、確認する担当者を決めます。

観点 確認すること 残す情報
コードと管理範囲 どのリポジトリ・ディレクトリが、どのAWSリソースを管理するか 対象・対象外、依存関係、Terraform・Providerのバージョン
State 保存先、参照するState、アクセス権限、ロック対応、復旧方法は何か 保存先と管理者、バックアップ・復旧手順
実行者 ローカルとCIのどちらから、誰がplan・applyするか 実行経路、対象アカウント・リージョン
認証 個人とCIが何の認証・権限を使っているか 認証方式、権限の管理者。秘密値自体は記載しない
レビュー PRとplanを誰が、何の観点で確認するか レビュアー、変更理由、影響確認の記録
本番承認 誰が適用を承認し、実行できるか 承認者、変更可能時間、適用条件
緊急変更 コンソール変更やapply失敗をどう扱うか 連絡先、記録、コードとの整合を戻す手順

管理範囲が重なる別のTerraformコードやCloudFormationなどがあれば、先に管理主体を確認します。既存Stateの移動や再取り込みを、確認なしで進めないようにします。

小さな対象で、順番に運用を移す

1. 最初に試す変更と担当を決める

影響範囲を説明でき、検証と復旧方針を確認できる対象を選びます。変更頻度だけで選ばず、共有リソースや別システムへの依存も確認します。

コード作成、レビュー、本番承認、実行、導入後運用の役割を決めます。兼任する場合も、誰が何を確認するかを省略しません。

2. Stateと実行経路を揃える

チームが同じ対象のStateを参照できる保存・アクセス方法を決めます。バックエンドを変更する場合は、バックアップ、移行手順、切り戻し方針を確認して別作業として扱います。

Stateロックはバックエンドの対応に依存します。共有先へ置くだけで同時実行の問題が解消するとは限りません。CIの実行制御に加え、ローカルからの実行も含めて同じStateへの書き込みを競合させないルールを決めます。ロック解除は、実行中の作業がないことを確認し、手順に従って判断します。

参考:HashiCorp:State Locking

3. PRでplanを確認し、承認後のapplyにつなぐ

コード差分に加え、対象アカウント・State・変数と、planの作成・更新・削除・置き換えを確認します。planは適用予定を示すもので、業務影響やアプリケーションの正常動作を保証しません。

承認したコードと適用するコード、planの対応を追えるようにします。保存したplanを適用する方式なら、その成果物の権限・保持期間・対象コミットを確認します。コードや実環境の変更により確認済みの計画が使えなくなった場合は、再計画・再確認します。

PRの承認と、本番applyを許可する制御は別々に確認します。GitHubのEnvironmentによる承認等を使う場合も、契約プラン・リポジトリの公開範囲・組織ポリシーによって利用可能な機能が異なります。利用できる前提で進めず、本番承認をどこで強制するかを決めます。

参考:HashiCorp:terraform plan、GitHub:Deployments and environments

4. 別担当者が操作してから範囲を広げる

手順書だけを渡して終わりにせず、普段applyしていない担当者が、小さな変更のPR作成から結果確認まで実施します。検証環境等で試し、本番に適用する場合は合意した承認・変更時間に従います。詰まった箇所を手順に反映してから次の対象へ広げます。

PRから適用までの役割例

以下は架空の運用例です。チーム人数や顧客の実態を示すものではなく、役割は自社の体制に合わせて決めます。

工程 担当する役割 残す確認・記録
PR作成 変更担当 変更理由、対象、検証・復旧方針
plan生成 CIの実行主体 コミット、対象State、実行結果。閲覧範囲を制限
レビュー レビュアー コード・plan・依存関係と影響の確認
本番承認 本番承認者 適用する変更、実行可能時間の承認
apply 制限された実行主体 承認条件を満たした変更の適用と結果
結果確認 運用担当 サービスの状態、変更記録、異常時の連絡

CI設定を変更できる人が、承認や認証条件も変更できないかを確認します。通常のTerraformコードだけでなく、ワークフローの変更権限・レビュー条件も運用設計の対象です。

State・planと実行権限を確認する

Stateや保存したplanには機密情報が含まれる場合があります。sensitive指定で画面上の表示を伏せても、Stateやplanへの保存を防ぐものではありません。Gitへのコミットや、公開PRコメントへのplan全文の貼り付けを避け、保存先の閲覧権限と保持・削除方法を決めます。

参考:HashiCorp:Manage sensitive data

GitHub ActionsからAWSを操作する場合は、OIDCで短期の認証情報を使う方法が候補になります。長期キーを保存しない構成でも、信頼ポリシーで許可するリポジトリ・ブランチ・Environment等を絞り、ロールの操作権限も必要な範囲に制限します。OIDCの採用だけで承認や最小権限が完成するわけではありません。

参考:GitHub:OIDC in AWS、AWS:IAM OIDC identity provider

チーム運用を始める前の完了確認

次の項目は運用開始を判断するための例です。全部を機械的に満たせば安全という基準ではなく、自社の対象と影響に合わせて受入条件を決めます。

  • コード・State・実リソースの管理範囲と、対象外・依存関係を説明できる
  • 別担当者が手順を使い、PR作成とplanの確認を実施できる
  • 本番applyに承認が必要で、未承認の実行経路を制限している
  • 適用するコミット・planと承認の対応を追える
  • State・plan・CIログの閲覧範囲と、認証情報の管理者が決まっている
  • 同時実行、ロック、失敗時に、止めて確認する手順と連絡先がある
  • 緊急の手動変更を記録し、コードと実環境の差分を確認して整合を戻せる
  • 適用後の動作確認、復旧判断、手順更新を担当する人がいる

緊急変更後は、コードに反映するのか、実環境を戻すのかを判断します。差分を確認せず通常のapplyを実行すると、必要な緊急変更を取り消す可能性があるため、影響を確認してから進めます。

未決事項を、次の作業に変える

棚卸しで残った項目に「確認担当」「次に確認すること」「確認する時期」を付けます。最初から全環境を改修する計画にせず、次の1変更をチームで扱うために必要な作業を選びます。

自社で進められる場合は、この表と完了確認を打ち合わせやPRの確認観点として利用できます。

部分導入済みの構成を含め、外部支援の対応範囲を確認したい方は、Linkupのサービス内容をご覧ください。既存コード・State・依存関係を確認したうえで対応可否と範囲を相談します。全環境の改修を標準に含めるものではありません。

IaC導入・運用基盤パッケージの内容を見る

方針や設計について助言が必要な場合は、スポット相談も選べます。パッケージへの問い合わせの前提ではありません。