OpenTacoのPull Requestロック機能を試してみた
OpenTacoとは
概要は以下のブログをご確認ください。
上記の記事では、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/
やってみた
Pull Request A(以下 PR A)の作成
EC2インスタンスのインスタンスタイプを変更して、Pull Requestを作成します。
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を作成します。
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 Aでロックしている状態で、PR Bを先に適用したい場合はロックをアンロックすることで可能です。
PR A側のコメントで以下のコメントをします。
digger unlock

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







