从API网关获取Terraform中的AWS Lambda的终端节点

时间:2020-01-03 11:15:11

标签: amazon-web-services aws-lambda terraform terraform-provider-aws

我有一个lambda部署到AWS,集成为lambda-proxy,现在我有一个API网关,该网关为我提供了一个调用lambda的端点。我需要以Terraform配置获取此终结点URL,该怎么办?

数据源不公开任何URL

data "aws_lambda_function" "myfunction" {
  function_name = "my-function-name"
}

data "aws_api_gateway_rest_api" "my_rest_api" {
  name = "my-rest-api"
}

api_gateway_deployment确实公开了invoke_url,但是很遗憾,它无法导入,否则我可以声明资源然后使用terraform import ...

resource "aws_api_gateway_rest_api" "my_rest_api" {
  name        = "my-rest-api"
  tags = {
    STAGE = "prod"
  }
}

resource "aws_api_gateway_deployment" "my_rest_api" {
  rest_api_id = aws_api_gateway_rest_api.my_rest_api.id
  stage_name  = "prod"
}

编辑:为澄清起见,lambda并未由terraform部署或管理。

1 个答案:

答案 0 :(得分:0)

我的工作端略有不同,但类似。

我用过:
- Terraform 以配置AWS API Gateway自定义域
-无服务器框架,用于将Lambda部署并链接到上面创建的API GW URL。

我从 Terraform 中导出了API GW URL作为输出变量。并且,在功能部署期间将其作为环境变量传递给无服务器框架

这就是行动方式。

1 / main.tf 负责导出API GW URL

output "tf_output_aws_apigw_domain_name__domain_name"
{
  value = "${aws_api_gateway_domain_name.tf_aws_apigw_domain_for_apis.domain_name}"
}

2 / serverless.yml 负责将Lambda函数链接到此API GW URL

[...]
  customDomain:
    domainName: ${env:APIGW_DOMAIN_NAME}
    basePath: /myapi
    stage: dev
    createRoute53Record: true
[...]

以下是将它们粘合在一起的命令(在我的自动化管道中)。

第一部分负责读取地形的输出变量值(即之前创建的API GW URL)并将其自身设置为环境变量APIGW_DOMAIN_NAME。

稍后部分初始化负责将lambda函数映射到APIGW URL的无服务器域管理器插件,并部署无服务器设置。

terraform init ...
terraform refresh ...
export APIGW_DOMAIN_NAME=`terraform output tf_output_aws_apigw_domain_name__domain_name`

sls plugin install -n serverless-domain-manager
sls deploy --debug

欢呼声,
内存