针对“localstack”运行时,Terraform 停留在“正在刷新状态...”

Zha*_* Yi 8 aws-lambda terraform localstack

我用来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}"

}
Run Code Online (Sandbox Code Playgroud)

以下是 docker compose 文件localstack

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"
Run Code Online (Sandbox Code Playgroud)

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

Abd*_*UMI 19

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

  • 设置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"
Run Code Online (Sandbox Code Playgroud)
  • 从日志中,我确定了导致问​​题的状态module.kubernetes_apps.helmfile_release_set.metrics_server: 。

  • 我删除了它的状态:

dag/walk: vertex "module.kubernetes_apps.provider.helmfile (close)" is waiting for "module.kubernetes_apps.helmfile_release_set.metrics_server"
Run Code Online (Sandbox Code Playgroud)
  • 现在terraform plan再次运行应该可以解决问题。

这不是最好的解决方案,这就是为什么我联系该提供商的所有者来解决问题而没有此解决方法


Zha*_* Yi 3

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

skip_credentials_validation = true
  skip_metadata_api_check     = true
Run Code Online (Sandbox Code Playgroud)