Atlantisのロック機能に入門する

Atlantisのロック機能に入門する

2026.04.01

はじめに

こんにちは。コンサルティング部の津谷です。前回Atlantisの基盤をECS Fargateで作成しました。作って終わりはもったいないので機能を少しずつ試してみようと思います。

Atlantisの基本的な機能は以前ブログにしてますのでそちらをご参照ください。
https://dev.classmethod.jp/articles/atlantis-infra-deploy-fargate/

今回はAtlantisのロック機能を試してみます。atlantis.ymlの設定は以下の通りです。

version: 3

projects:
  - name: vpc-project
    dir: .
    workspace: default
    terraform_version: v1.6.0
    autoplan:
      when_modified:
        - "*.tf"
        - "*.tfvars"
      enabled: true

ロックは、基本的に設定ファイルで指定した「ディレクトリ」「ワークスペース」単位で機能します。
https://deepwiki.com/runatlantis/atlantis/5.1-locking-and-concurrency-control

ディレクトリはルート、ワークスペースもデフォルトで設定していますので、その場合のケース別でロック機能の可否について整理しました。環境、機能ごとにディレクトリ・ワークスペースを分ける場合のロック機能可否については別の機会に試します。

状況 結果
PR#1でplan → 同じPR#1でapply ロックはかからない
PR#1でplan中 → PR#2が同じくplan ロックがかかる
PR#1でplanのまま放置 → PR#2がplan ロックがかかる
PR#1でapply済み・未マージ → PR#2がplan ロックがかかる
PR#1がマージ完了 → PR#2がplan ロックはかからない
atlantis unlock実行 → PR#2がplan ロックはかからない

tfstateのバックエンドロック機能との棲み分け

tfstateをS3等で管理している場合は、ロック機能で守れるからいいのでは?と思うものですが排他制御における管理レイヤーが違うと考えると理解しやすいです。

以下の表で管理レイヤーについてまとめてみます。

項目 Atlantisロック機能 tfstateロック機能
目的 同じディレクトリ・ワークスペースでの作業競合を防ぐ Terraform構成状態の同時編集(競合)を防ぐ
スコープ atlantisコマンドでunlockするか、PR内でマージが完了するまで terraform plan/applyの実行時
保護対象 plan/apply時の作業整合性 tfstateファイルの整合性

上記のように、Github上でのPRの論理競合はtfstateロックでは防げません。管理レイヤーが異なるため開発者体験を改善するためのロック機能がAtlantisのロック機能、Terraformリソースそのものの構成を制御するのがtfstateのロック機能と意識することにします。

terraform applyを試す

環境準備については以下のブログをご参照ください。

Atlantisの初期セットアップができている前提で検証を進めます。
https://dev.classmethod.jp/articles/atlantis-infra-deploy-fargate/

Github上にローカルで記載したコードをpushすると、以下のように自動でプルリクエスト上でコメントとしてterraform plan結果を返してくれます。今回は簡単にVPCを1つ作成しています。

スクリーンショット 2026-02-12 153438

AtlantisのWebUIでステータスを確認してみます。
スクリーンショット 2026-02-13 102518

Jobsを確認するとStepはplanになっており、Locksを確認するとリポジトリ上のプルリクエスト上でロック操作が掛かっていることがわかります。

スクリーンショット 2026-02-13 102528

plan結果が問題ないということがわかりましたので、applyをしてみようと思います。
applyに関してもatlantisコマンドで実行することができ、チームメンバーがapply結果を確認することができます。atlantis applyをコメント上で実行すると、正常にVPCが作られました。
スクリーンショット 2026-02-13 102801

コンソール上でも正常に立ち上がっていますね。
スクリーンショット 2026-02-13 102901

スクリーンショット 2026-02-13 103553
WebUIを確認すると、Stepにapplyが追加されていますね。ステータスに関してはまだLock中です。

Atlantisのロック機能を検証する

ロック機能について、試していきます。先ほど作ったVPCのCIDRを変更してみます。ローカルでコードを記載して新規でプルリクエストを作成してみます。

スクリーンショット 2026-02-13 104432

そうすると、以下のエラーが出力されました。
スクリーンショット 2026-02-13 105509
planに失敗していますね。これは、プルリクエスト内でマージが完了していない処理があるためです。同じディレクトリ・ワークスペース上で処理をかけたためロックが掛かっている状態になります。

プルリクエスト内でplanを実行するには、処理中のタスクをunlockする必要があります。ここでの処理中のタスクとは、先ほどのVPC作成処理です。ステータスでも確認しましたがapply後もステータスはlockの状態です。ロックを解除するには、プルリクエストをマージさせるか、プルリク内のコメントでatlantis unlockを実行する必要があります。

試しにプルリクエスト内のコメントでatlantis unlockを実行しました。
スクリーンショット 2026-02-13 105858

そうすると、planが正常に動きました。
スクリーンショット 2026-02-13 105707

WebUIで確認してみると、更新した内容が出力されています。Stepはplan状態と出力されていますね。
スクリーンショット 2026-02-13 105906

さいごに

Atlantisのロック機能に入門し、基本的な機能の確認と検証を行いました。皆さんもぜひ試してみてください。

この記事をシェアする

関連記事