带有AWS Lambda和API Gateway未知令牌的Terraform无服务器应用程序?

问题描述

我正在学习terraformwritten tutorials on hashicorp井之一给我带来了一些问题。

我有一个文件定义lambda及其与API网关的关系。与API网关的连接尚未经过测试,因为我似乎无法部署API网关。

lambda.tf


provider "aws" {
    region = "us-east-1"
    shared_credentials_file = "/home/camelType/.aws/credentials"
    profile = "default" 
}


resource "aws_lambda_function" "example" {
    function_name = "ServerlessExample"

   # The bucket name as created earlier with "aws s3api create-bucket"
    s3_bucket = "camelType-serverless-example"
    s3_key    = "v1.0.0/example.zip"

   # "main" is the filename within the zip file (main.js) and "handler"
   # is the name of the property under which the handler function was
   # exported in that file.
    handler = "main.handler"
    runtime = "nodejs12.x"

    role = "${aws_iam_role.lambda_exec_role.arn}"
}



resource "aws_iam_role" "lambda_exec_role" {
    name = "lambda_exec_role"
    assume_role_policy = <<EOF
{
    "Version": "2012-10-17","Statement": [
        {
            "Action": "sts:AssumeRole","Principal": {
                "Service": "lambda.amazonaws.com"
            },"Effect": "Allow","Sid": ""
        }
    ]
}
EOF
}

//Haven't tested below here

resource "aws_api_gateway_resource" "proxy" {
   rest_api_id = aws_api_gateway_rest_api.example.id
   parent_id   = aws_api_gateway_rest_api.example.root_resource_id
   path_part   = "{proxy+}"
}

resource "aws_api_gateway_method" "proxy" {
   rest_api_id   = aws_api_gateway_rest_api.example.id
   resource_id   = aws_api_gateway_resource.proxy.id
   http_method   = "ANY"
   authorization = "NONE"
}

我已经单独部署了lambda,并且按预期运行。

但是,当我进行下一步并添加api网关时,我收到aws_api_gateway_rest_api.example.id的解析错误。我假设example.id是对上面aws_api_gateway_rest_api资源的引用,所以example.id名称是正确的,但这是它解析时遇到的问题。

api_gateway.tf

resource "aws_api_gateway_rest_api" "example" {
    name        = "ServerlessExample"
    description = "terraform Serverless Application Example"
}

resource "aws_api_gateway_integration" "lambda" {
    //issue here
    rest_api_id = aws_api_gateway_rest_api.example.id
    resource_id = aws_api_gateway_method.proxy.resource_id
    http_method = aws_api_gateway_method.proxy.http_method

    integration_http_method = "POST"
    type                    = "AWS_PROXY"
    uri                     = aws_lambda_function.example.invoke_arn
}

resource "aws_api_gateway_method" "proxy_root" {
    rest_api_id   = aws_api_gateway_rest_api.example.id
    resource_id   = aws_api_gateway_rest_api.example.root_resource_id
    http_method   = "ANY"
    authorization = "NONE"
}

resource "aws_api_gateway_integration" "lambda_root" {
    rest_api_id = aws_api_gateway_rest_api.example.id
    resource_id = aws_api_gateway_method.proxy_root.resource_id
    http_method = aws_api_gateway_method.proxy_root.http_method 

    integration_http_method = "POST"
    type                    = "AWS_PROXY"
    uri                     = aws_lambda_function.example.invoke_arn
}

resource "aws_api_gateway_deployment" "example" {
    depends_on = [
    aws_api_gateway_integration.lambda,aws_api_gateway_integration.lambda_root,]

    rest_api_id = aws_api_gateway_rest_api.example.id
    stage_name  = "test"
}

我已经阅读了他们的一些教程,这是我遇到的第一个问题。我敢肯定这是我的错误,但是我已经遍历了好几次,而且似乎无法弄清楚我在做什么错。

错误消息的复制粘贴为Error: Error parsing /home/camelType/api_gateway.tf: At 7:18: UnkNown token: 7:18 IDENT aws_api_gateway_rest_api.example.id

解决方法

基于评论。

此问题是由于在配置文件中使用了较新版本的terraform (v0.11.11)和较新版本的语法引起的。

已报告类似问题:

解决方案是升级地形。