繁体   English   中英

从 API Gateway 获取 terraform 中 AWS lambda 的端点

[英]Get endpoint from API Gateway for an AWS lambda in terraform

我有一个 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 部署或管理的。

我有一个稍微不同但相似的设置。

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

我从Terraform导出 API GW URL 作为输出变量。 并且,在功能部署期间将其作为环境变量传递给Serverless Framework

这是如何在行动。

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
[...]

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

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

后面的部分初始化 serverless-domain-manager 插件,负责将 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

干杯,
内存

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM