OpenTacoのPull Requestロック機能を試してみた

OpenTacoのPull Requestロック機能を試してみた

2026.01.11

OpenTacoとは

概要は以下のブログをご確認ください。

https://dev.classmethod.jp/articles/open-taco-terraform-pr-comment-plan-apply/

上記の記事では、Pull Requestを利用したterraform plan/applyの機能を紹介しました。

今回はPull Requestのロック機能を紹介します。

Pull Requestのロック機能

OpenTacoではPull Request上で、terraform apply(digger apply)相当の操作を行います。

この際に、同一のコードに対して複数のPull Requestから同時にterraform applyができると変更を意図せず上書きしてしまいます。

例えば以下の2つのPRをオープンしたとします。

  • PR A: EC2 hogeのAMI変更
  • PR B: EC2 hogeのインスタンスサイズ変更

同時にどちらのコメント上でterraformの適用ができてしまうと、PR Aで変更したインスタンスサイズがPR Bで元に戻るといったことが想定されます。

これを防ぐために、OpenTacoではPull Requestのロック機能があります。

この機能を利用することで、PR AでロックすることでPR BからTerraform適用を防ぎ意図しない上書きを防止できます。

Pull Requestのロック機能はデフォルトで有効です。特に設定変更せずに利用できます。

ロック機能を無効化したい場合は、設定ファイルに以下を追加します。

+ pr_locks: false

projects:
   - name: dev
     dir: dev/

https://docs.opentaco.dev/ce/features/pr-level-locks

やってみた

Pull Request A(以下 PR A)の作成

EC2インスタンスのインスタンスタイプを変更して、Pull Requestを作成します。

main.tf
resource "aws_instance" "vm_instance" {
  ami = "ami-05c13eab67c5d8861"
+  instance_type   = "t3.micro"
-  instance_type   = "t2.micro"
  subnet_id       = aws_subnet.vpc_subnet.id
  security_groups = [aws_security_group.security_group.id]

  tags = {
    Name = "terraform-instance"
  }

Pull Request B(以下 PR B)の作成

EC2インスタンスのAMIを変更して、Pull Requestを作成します。

main.tf
resource "aws_instance" "vm_instance" {
+  ami             = "ami-0abcdef1234567890" # Latest security patched AMI
-  ami = "ami-05c13eab67c5d8861"
  instance_type   = "t2.micro"
  subnet_id       = aws_subnet.vpc_subnet.id
  security_groups = [aws_security_group.security_group.id]

  tags = {
    Name = "terraform-instance"
  }

ロック機能の確認

先にPR Aを作成して、その後にPR Bを作成しました。

PR Aでロックされるため、PR Bではコメントを使ったPlanやApplyができない状態になっています

_PR_B__Update_EC2_Instance_AMI_by_msato0731_·_Pull_Request__3_·_msato0731_quickstart-actions-aws.png

ロックを解除

PR Aでロックしている状態で、PR Bを先に適用したい場合はロックをアンロックすることで可能です。

PR A側のコメントで以下のコメントをします。

digger unlock

_PR_A_Update_EC2_Instance_Instance_Type_by_msato0731_·_Pull_Request__2_·_msato0731_quickstart-actions-aws.png

PR B側でPlanが可能になりました。

_PR_B__Update_EC2_Instance_AMI_by_msato0731_·_Pull_Request__3_·_msato0731_quickstart-actions-aws.png

この記事をシェアする

FacebookHatena blogX

関連記事