Terraform 地形长期锁
使用Terraform 0.12,远程状态为S3桶,DynamoDB锁定 似乎地形形成自动化的一种常见模式大致如下:Terraform 地形长期锁,terraform,terraform-provider-aws,Terraform,Terraform Provider Aws,使用Terraform 0.12,远程状态为S3桶,DynamoDB锁定 似乎地形形成自动化的一种常见模式大致如下: terraform平面图-out=平面图 [检讨计划] 地形应用计划 但是,也许我忽略了一些显而易见的事情,不能保证其他terraformapply调用没有更新上面1到3之间的基础结构 我知道锁定将防止在另一个terraform apply运行时(并且锁定已启用)并发运行terraform apply,但我是否可以通过编程方式获取“长期锁定”,使有效的工作流看起来像这样 [类似于
terraform平面图-out=平面图
地形应用计划
terraformapply
调用没有更新上面1到3之间的基础结构
我知道锁定将防止在另一个terraform apply运行时(并且锁定已启用)并发运行terraform apply
,但我是否可以通过编程方式获取“长期锁定”,使有效的工作流看起来像这样
terraform平面图-out=平面图
地形应用计划
有没有其他方法可以“保护”基础结构免受我忽略的
并发/相互依赖的更新的影响?只要担心状态文件的更改,就不需要这样做
如果您提供了一个要应用的计划输出文件,并且此后状态已更改,Terraform将在进行任何更改之前出错,并抱怨保存的计划已过时
例如:
$ cat <<'EOF' >> main.tf
> resource "random_pet" "bucket_suffix" {}
>
> resource "aws_s3_bucket" "example" {
> bucket = "example-${random_pet.bucket_suffix.id}"
> acl = "private"
>
> tags = {
> ThingToChange = "foo"
> }
> }
> EOF
$ terraform init
# ...
$ terraform apply
# ...
$ $ sed -i 's/foo/bar/' main.tf
$ terraform plan -out=plan
# ...
$ sed -i 's/bar/baz/' main.tf
$ terraform apply
# ...
$ terraform apply plan
Error: Saved plan is stale
The given plan file can no longer be applied because the state was changed by
another operation after the plan was created.
$cat main.tf
>资源“random_pet”“bucket_后缀”{}
>
>资源“aws\u s3\u bucket”示例{
>bucket=“示例-${random\u pet.bucket\u suffix.id}”
>acl=“私有”
>
>标签={
>ThingToChange=“foo”
> }
> }
>EOF
$terraforminit
# ...
$terraform适用
# ...
$$sed-i's/foo/bar/'main.tf
$terraform plan-out=平面图
# ...
$sed-i's/bar/baz/'main.tf
$terraform适用
# ...
$terraform应用计划
错误:保存的计划已过时
无法再应用给定的计划文件,因为状态已由更改
创建计划后的另一个操作。
如果地形以外的东西改变了什么,它不会失败。因此,如果我通过AWS CLI或AWS控制台更改了bucket上的标记,而不是使用baz
作为bucket的标记再次应用Terraform,那么Terraform会很高兴地将其更改回使用过时计划应用上的bar
。是的,这是我在一些测试后了解到的。它涵盖了一些情况,尽管是以一种令人惊讶的“乐观锁定”方式,但由于