Terraform lambda源映射的地形导入

Terraform lambda源映射的地形导入,terraform,Terraform,我的地形图有一些意想不到的变化。当我运行我的计划时,我看到它试图创建一个已经存在的资源 + module.transactions-lambda.aws_lambda_event_source_mapping.lambda-source-mapping id: "<computed>" batch_size: "1000" enabled: "tru

我的地形图有一些意想不到的变化。当我运行我的计划时,我看到它试图创建一个已经存在的资源

+ module.transactions-lambda.aws_lambda_event_source_mapping.lambda-source-mapping
    id:                        "<computed>"
    batch_size:                "1000"
    enabled:                   "true"
    event_source_arn:          "arn:aws:kinesis:us-west-2:xxxxxxxxxx:stream/transactions"
    function_arn:              "<computed>"
    function_name:             "arn:aws:lambda:us-west-2:xxxxxxxxxx:function:transactions"
    last_modified:             "<computed>"
    last_processing_result:    "<computed>"
    starting_position:         "LATEST"
    state:                     "<computed>"
    state_transition_reason:   "<computed>"
    uuid:                      "<computed>"
我希望我的计划现在不会显示任何变化。但是,我看到它试图强制使用新资源,因为:

  • 计算“id”
  • “起始位置”要更改为 最新的
这是执行导入之前的地形状态列表。您可以在这里看到资源不存在

module.validation-lambda.aws_lambda_event_source_mapping.lambda-source-mapping
module.send-lambda.aws_lambda_event_source_mapping.lambda-source-mapping
module.status-lambda.aws_lambda_event_source_mapping.lambda-source-mapping
这是导入中uuid的地形状态列表

[I] ➜ okta:sbux-prod $ aws lambda get-event-source-mapping --uuid 6f9d38a9-3173-47e8-8951-380353959d33
{
    "MaximumBatchingWindowInSeconds": 30,
    "UUID": "6f9d38a9-3173-47e8-8951-380353959d33",
    "StateTransitionReason": "User action",
    "LastModified": 1576562640.0,
    "BatchSize": 1000,
    "EventSourceArn": "arn:aws:kinesis:us-west-2:xxxxxxxxxx:stream/transaction",
    "FunctionArn": "arn:aws:lambda:us-west-2:xxxxxxxxxx:function:transactions",
    "State": "Enabled",
    "LastProcessingResult": "OK"
}

非常感谢您的帮助。

您能将您的地形代码作为一个共享文件共享吗?理想情况下,至少包括
aws_lambda_event_source_mapping的资源定义。lambda source mapping
资源。还有
aws lambda的输出得到了什么事件源映射——uuid 6f9d38a9-3173-47e8-8951-380353959d33
show?添加,谢谢@ydaetskcorhmm。。。在调用
GetEventSourceMapping
端点时,AWS API实际上不会返回起始位置,因此在导入它时,它只能设置它可以从API返回的内容。不幸的是,它也不能被更新,所以Terraform在导入过程中从读取中读取一个nil值,然后发现它需要更新
起始位置
,如果没有升级路径,它必须销毁并重新创建它。老实说,无论是作为用户还是偶尔的贡献者,我都看不到一个很好的解决方案。这是一次性的,因此您可以允许Terraform使用apply重新创建事件源映射(我没有使用Lambda事件源映射,所以不确定这会有多糟糕)或者您可以手动破解状态文件以添加参数,直到差异消失。恐怕不是很好的选择:(您可以将您的地形代码作为一个共享吗?理想情况下,至少包括
aws_lambda_事件_源代码_映射的资源定义。lambda源代码映射
资源。
aws lambda获取事件源映射的输出是什么?uuid 6f9d38a9-3173-47e8-8951-380353959d33
show?添加,感谢@ydaetskcorhmm…aws API d。)调用
GetEventSourceMapping
端点时,oesn实际上不会返回起始位置,因此当您导入它时,它只能设置它可以从API返回的内容。不幸的是,它也不是可以更新的内容,因此Terraform在导入时从读取中读取一个nil值,然后发现它需要更新从位置开始,如果没有升级路径,它必须销毁并重新创建它。老实说,作为用户或偶尔的贡献者,我看不到一个很好的解决方案。这是一次性的,因此您可以允许Terraform使用apply重新创建事件源映射(我没有使用Lambda事件源映射,因此不确定这会有多糟糕)或者您可以手动破解状态文件以添加参数,直到差异消失。恐怕不是好的选项:(
resource "aws_lambda_function" "lambda" {
  s3_bucket     = "${var.lambda_s3_bucket}"
  s3_key        = "${var.lambda_s3_key}"
  handler       = "${var.lambda_handler}"
  function_name = "${var.name}"
  runtime       = "${var.lambda_runtime}"
  timeout       = "${var.lambda_timeout_sec}"
  memory_size   = "${var.lambda_memory_size_mb}"
  role          = "${aws_iam_role.lambda-role.arn}"

  vpc_config {
    subnet_ids = ["${var.subnet_ids}"]

    security_group_ids = [
      "${aws_security_group.lambda-security-group.id}",
    ]
  }

  environment {
    variables = "${var.lambda_environment_variables}"
  }

  depends_on = ["aws_iam_policy.lambda-policy"]
}

...

resource "aws_lambda_event_source_mapping" "lambda-source-mapping" {
  batch_size        = "${var.lambda_batch_size}"
  event_source_arn  = "${var.kinesis_stream_arn}"
  enabled           = "${var.source_mapping_enabled}"
  function_name     = "${aws_lambda_function.lambda.arn}"
  starting_position = "${var.kinesis_starting_position}"
}

...

module.validation-lambda.aws_lambda_event_source_mapping.lambda-source-mapping
module.send-lambda.aws_lambda_event_source_mapping.lambda-source-mapping
module.status-lambda.aws_lambda_event_source_mapping.lambda-source-mapping
[I] ➜ okta:sbux-prod $ aws lambda get-event-source-mapping --uuid 6f9d38a9-3173-47e8-8951-380353959d33
{
    "MaximumBatchingWindowInSeconds": 30,
    "UUID": "6f9d38a9-3173-47e8-8951-380353959d33",
    "StateTransitionReason": "User action",
    "LastModified": 1576562640.0,
    "BatchSize": 1000,
    "EventSourceArn": "arn:aws:kinesis:us-west-2:xxxxxxxxxx:stream/transaction",
    "FunctionArn": "arn:aws:lambda:us-west-2:xxxxxxxxxx:function:transactions",
    "State": "Enabled",
    "LastProcessingResult": "OK"
}