首页 > 解决方案 > 出现 InvalidSignatureException 错误,而我在机器上的时间是正确的

问题描述

terraform apply 给我以下错误:

错误:创建 Lambda 函数时出错:InvalidSignatureException:签名已过期:20190628T091524Z 现在早于 20190628T092024Z(20190628T092524Z - 5 分钟)

许多人建议在我运行 terraform 命令的本地计算机上修复时间,但这对我来说似乎不是问题。我的本地机器时间是正确的,没有问题。

这个没有解决我的问题:( Terraform apply 由于时间不匹配而失败

标签: amazon-web-serviceslambdaterraform

解决方案


我认为它的发生是由于互联网速度慢的问题,所以我通过以下步骤解决了这个问题。

  • 即时安装 NPM 模块
  • 即时创建拉链
  • 将 zip 推送到 s3
  • 然后从 s3 指定目标密钥,而不是从本地推送 zip

这是工作代码。

 resource "null_resource" "npm" {
      provisioner "local-exec" {
        command = "cd ../lambda-functions/loadbalancer-to-es && npm install --prod=only && chmod -R 777 node_modules"
      }
    }

resource "aws_s3_bucket_object" "file_upload" {
  bucket = "${var.env_prefix_name}${var.s3_suffix}"
  key    = "lambda-functions/loadbalancer-to-es.zip"
  source = "${data.archive_file.source.output_path}"
  # etag   = "${filemd5("../lambda-functions/loadbalancer-to-es.zip")}"
}

# Zip the Lambda function on the fly
data "archive_file" "source" {
  type        = "zip"
  source_dir  = "../lambda-functions/loadbalancer-to-es"
  output_path = "../lambda-functions/loadbalancer-to-es.zip"
  depends_on  = ["null_resource.npm"]
}


# Created AWS Lamdba Function: Memory Size, NodeJS version, handler, endpoint, doctype and environment settings
resource "aws_lambda_function" "elb_logs_to_elasticsearch" {
  function_name = "${var.env_prefix_name}-alb-logs-to-elk-test"
  s3_bucket = "${var.env_prefix_name}${var.s3_suffix}"
  s3_key    = "${aws_s3_bucket_object.file_upload.key}"
  description   = "elb-logs-to-elasticsearch"
  memory_size   = 1024
  timeout       = 900
  runtime       = "nodejs8.10"
  role          = "${aws_iam_role.role.arn}"
  depends_on  = ["null_resource.npm" ]
  source_code_hash = "${base64sha256(data.archive_file.source.output_path)}"
  handler       = "index.handler"


  environment {
    variables = {
      ELK_DOCKTYPE = "some env"
    }
  }
}

推荐阅读