从 API Gateway 获取 terraform 中 AWS lambda 的端点
Posted
技术标签:
【中文标题】从 API Gateway 获取 terraform 中 AWS lambda 的端点【英文标题】:Get endpoint from API Gateway for an AWS lambda in terraform 【发布时间】:2020-04-21 23:03:49 【问题描述】:我有一个部署到 AWS 的 lambda,集成是 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 部署或管理的。
【问题讨论】:
您绝对可以使用invoke_url
导出的属性来满足您的需要。我不确定为什么你需要将它与import
一起使用,除非你正在做一些非常不寻常的事情。请分享您需要端点的代码,我们可以向您展示如何操作。
@MattSchuchard 亚马逊 lambda 根本不由 terraform 管理,这就是我需要导入或数据源的原因。
我在尝试使用 AWS SAM 模板部署应用程序时遇到了这个问题。 SAM 负责创建 API 网关,我想在 Terraform 中管理的 CloudFront 配置中引用它。我最终决定在我的 SAM 模板中配置一个自定义域,并在我的 CloudFront 配置中明确引用它。它没有提供我想要的关卡资源检查,但它似乎有效。
【参考方案1】:
我的设置略有不同但相似。
我用过: - 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。
稍后部分初始化负责将 lambda 函数映射到 APIGW URL 的 serverless-domain-manager 插件并部署无服务器设置。
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
干杯, 内存
【讨论】:
以上是关于从 API Gateway 获取 terraform 中 AWS lambda 的端点的主要内容,如果未能解决你的问题,请参考以下文章
输入意外结束:从 AWS API Gateway 获取响应时出现 ApolloClient 错误
如何从 AWS API Gateway cloudwatch 日志中获取用户的公共 IP?
通过 API Gateway 从 s3 静态网站获取到 Lambda 函数,给出 415 Unsupported Media Type 错误
获取问题-不支持的方法:在测试 API Gateway API 时在邮递员中获取