【问题标题】:Terraform stuck on `Refreshing state...` when running against `localstack`Terraform 在针对 `localstack` 运行时卡在`刷新状态...`
【发布时间】:2019-11-28 01:48:16
【问题描述】:

我正在使用Terraform 将 lambda 发布到 AWS。当我部署到 AWS 时它工作正常,但在针对 localstack 运行时卡在“刷新状态...”。

下面是我的.tf 配置文件,您可以看到我将 lambda 端点配置为http://localhost:4567

provider "aws" {
  profile    = "default"
  region     = "ap-southeast-2"

  endpoints {
      lambda = "http://localhost:4567"
  }
}

variable "runtime" {
  default = "python3.6"
}

data "archive_file" "zipit" {
    type        = "zip"
    source_dir  = "crawler/dist"
    output_path = "crawler/dist/deploy.zip"
}
resource "aws_lambda_function" "test_lambda" {
  filename      = "crawler/dist/deploy.zip"
  function_name = "quote-crawler"
  role          = "arn:aws:iam::773592622512:role/LambdaRole"
  handler       = "handler.handler"
  source_code_hash = "${data.archive_file.zipit.output_base64sha256}"
  runtime = "${var.runtime}"

}

下面是localstack的docker compose文件:

version: '2.1'

services:
  localstack:
    image: localstack/localstack
    ports:
      - "4567-4583:4567-4583"
      - '8055:8080'
    environment:
      - SERVICES=${SERVICES-lambda }
      - DEBUG=${DEBUG- }
      - DATA_DIR=${DATA_DIR- }
      - PORT_WEB_UI=${PORT_WEB_UI- }
      - LAMBDA_EXECUTOR=${LAMBDA_EXECUTOR-docker-reuse }
      - KINESIS_ERROR_PROBABILITY=${KINESIS_ERROR_PROBABILITY- }
      - DOCKER_HOST=unix:///var/run/docker.sock
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"

有人知道如何解决这个问题吗?

【问题讨论】:

    标签: aws-lambda terraform localstack


    【解决方案1】:

    这就是我解决类似问题的方法:

    • 设置export TF_LOG=TRACE,这是最详细的日志记录。
    • 运行terraform plan ....
    • 在日志中,我找到了问题的根本原因:
    dag/walk: vertex "module.kubernetes_apps.provider.helmfile (close)" is waiting for "module.kubernetes_apps.helmfile_release_set.metrics_server"
    
    • 从日志中,我确定了导致问​​题的状态module.kubernetes_apps.helmfile_release_set.metrics_server

    • 我删除了它的状态:

    terraform state rm module.kubernetes_apps.helmfile_release_set.metrics_server
    
    • 现在再次运行 terraform plan 应该可以解决问题。

    这不是最好的解决方案,that's why I contacted the owner of this provider to fix the issue without this workaround

    【讨论】:

      【解决方案2】:

      我失败的原因是因为terraform 尝试针对 AWS 检查凭据。在 .tf 配置文件中添加以下两行即可解决问题。

      skip_credentials_validation = true
        skip_metadata_api_check     = true
      

      【讨论】:

        【解决方案3】:

        我遇到了同样的问题,并通过从控制台登录到 aws dev 配置文件来修复它。 所以别忘了登录。

        provider "aws" {
          region = "ap-southeast-2"
          profile = "dev"
        }
        

        【讨论】:

          猜你喜欢
          • 2019-01-22
          • 1970-01-01
          • 2018-12-22
          • 2021-04-28
          • 2021-04-26
          • 2013-10-18
          • 1970-01-01
          • 1970-01-01
          • 2019-12-09
          相关资源
          最近更新 更多