Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Terraform 地形长期锁_Terraform_Terraform Provider Aws - Fatal编程技术网

Terraform 地形长期锁

Terraform 地形长期锁,terraform,terraform-provider-aws,Terraform,Terraform Provider Aws,使用Terraform 0.12,远程状态为S3桶,DynamoDB锁定 似乎地形形成自动化的一种常见模式大致如下: terraform平面图-out=平面图 [检讨计划] 地形应用计划 但是,也许我忽略了一些显而易见的事情,不能保证其他terraformapply调用没有更新上面1到3之间的基础结构 我知道锁定将防止在另一个terraform apply运行时(并且锁定已启用)并发运行terraform apply,但我是否可以通过编程方式获取“长期锁定”,使有效的工作流看起来像这样 [类似于

使用Terraform 0.12,远程状态为S3桶,DynamoDB锁定

似乎地形形成自动化的一种常见模式大致如下:

  • 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

    是的,这是我在一些测试后了解到的。它涵盖了一些情况,尽管是以一种令人惊讶的“乐观锁定”方式,但由于