如何解决带有AWS Lambda和API Gateway未知令牌的Terraform无服务器应用程序?
我正在学习terraform,written 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)和较新版本的语法引起的。
已报告类似问题:
解决方案是升级地形。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。