amazon-web-services - 如何使用 Terraform 刷新 API Gateway 的 AWS Lambda 权限?
问题描述
我正在使用 Terraform 部署 REST API 网关。几个端点正在访问 Lambda 函数以返回响应。每当我使用 terraform 部署 api-gw 时,Lambda 权限似乎都不会刷新,我必须在 AWS 控制台中手动打开 api-gw 门户,然后再次添加提示我允许调用操作的 lambda 函数帖子。如何在无需执行这些手动步骤的情况下刷新权限?我正在使用以下代码段进行 api-gw 部署和 lambda 权限:
resource "aws_api_gateway_deployment" "deploy" {
rest_api_id = aws_api_gateway_rest_api.apigw.id
stage_name = ""
variables = {
deployed_at = timestamp()
}
lifecycle {
create_before_destroy = true
}
}
resource "aws_lambda_permission" "customers_lambda_permission" {
statement_id = "AllowDemoAPIInvokeProjectGet"
action = "lambda:InvokeFunction"
function_name = local.lambda_name
principal = "apigateway.amazonaws.com"
source_arn = "${aws_api_gateway_rest_api.apigw.execution_arn}/*/GET/api/customers"
}
解决方案
您的aws_api_gateway_deployment
资源应该依赖于aws_api_gateway_integration
lambda 集成,以便在部署之前创建。
resource "aws_api_gateway_deployment" "deploy" {
...
depends_on = [
aws_api_gateway_integration.example1,
aws_api_gateway_integration.example2
]
}
或使用触发器属性:
resource "aws_api_gateway_deployment" "deploy" {
...
triggers = {
redeployment = sha1(jsonencode([
aws_api_gateway_resource.example1.id,
aws_api_gateway_method.example1.id,
aws_api_gateway_integration.example1.id,
]))
}
推荐阅读
- r - 如何使用“data.table”添加缺失的日期并填充组内的值
- c# - 如何在 C# 中编写计时器倒计时?
- android - 如何从用户(用户名)显示事件表(作者)?(使用 Firebase 的 Android 工作室)
- python - 扩大在活动结束后将帖子下线的可能性
- reactjs - 如果路径在反应中以相同的单词开头,如何根据路径设置活动导航栏项目
- encoding - 是否可以在函数内部设置编码而不是第一行代码?
- jmeter - JMeter - 版本 5.1 中没有响应标头,而版本 3.1 工作正常
- networking - 在 Solaris 9 SPARC OS [QEMU] 中配置 NIC 设备
- ios - 在 NSMapTable 中迭代键会永远保留弱值
- github - 为什么我的 shell 管道不能在我的服务器上使用私有运行器运行?为什么我会收到此错误消息?