lambda.tf:
resource "aws_lambda_function" "contactform-api" {
filename = "deploy.zip"
function_name = "contactform-api"
handler = "main"
runtime = "go1.x"
role = "${aws_iam_role.lambda_role.arn}"
publish = "false"
timeout = "60"
}
resource "aws_iam_role" "lambda_role" {
name = "iam_for_lambda"
assume_role_policy = <<EOF
{
"Version": "2012-10-17",
"Statement": [
{
"Action": "sts:AssumeRole",
"Principal": {
"Service": "lambda.amazonaws.com"
},
"Effect": "Allow",
"Sid": "IAMRoleForLambda"
}
]
}
EOF
}
resource "aws_lambda_permission" "apigw" {
statement_id = "AllowExecutionFromAPIGateway"
action = "lambda:InvokeFunction"
function_name = "${aws_lambda_function.contactform-api.arn}"
principal = "apigateway.amazonaws.com"
source_arn = "${aws_api_gateway_rest_api.contactform.execution_arn}/*/*/*"
}
api_gateway.tf:
resource "aws_api_gateway_rest_api" "contactform" {
name = "ContactformAPI"
description = "Contactform REST API"
}
resource "aws_api_gateway_resource" "api" {
rest_api_id = "${aws_api_gateway_rest_api.contactform.id}"
parent_id = "${aws_api_gateway_rest_api.contactform.root_resource_id}"
path_part = "{proxy+}"
}
resource "aws_api_gateway_method" "api" {
rest_api_id = "${aws_api_gateway_rest_api.contactform.id}"
resource_id = "${aws_api_gateway_resource.api.id}"
http_method = "ANY"
authorization = "NONE"
}
resource "aws_api_gateway_integration" "lambda" {
rest_api_id = "${aws_api_gateway_rest_api.contactform.id}"
resource_id = "${aws_api_gateway_resource.api.id}"
http_method = "${aws_api_gateway_method.api.http_method}"
integration_http_method = "POST"
type = "AWS_PROXY"
uri = "${aws_lambda_function.contactform-api.invoke_arn}"
}
resource "aws_api_gateway_deployment" "staging" {
depends_on = ["module.cors", "aws_api_gateway_method.api", "aws_api_gateway_resource.api", "aws_api_gateway_integration.lambda"]
stage_name = "staging"
rest_api_id = "${aws_api_gateway_rest_api.contactform.id}"
}
resource "aws_api_gateway_stage" "staging" {
stage_name = "staging"
rest_api_id = "${aws_api_gateway_rest_api.contactform.id}"
deployment_id = "${aws_api_gateway_deployment.staging.id}"
}
您正在使用Lambda函数的ARN作为aws_lambda_permission
资源中的function_name
。
将其改为名称而不是ARN将为您解决这一问题:
resource "aws_lambda_permission" "apigw" {
statement_id = "AllowExecutionFromAPIGateway"
action = "lambda:InvokeFunction"
function_name = "${aws_lambda_function.contactform-api.function_name}"
principal = "apigateway.amazonaws.com"
source_arn = "${aws_api_gateway_rest_api.contactform.execution_arn}/*/*/*"
}
至于为什么它在您通过AWS控制台进行部署时起作用;AWS控制台神奇地为您设置权限,因此您不需要通过web UI来处理这些操作。当Terraform重新部署更改时,它会再次中断更改,因为Terraform需要显式声明Lambda函数的权限。
我无法通过AWS Lambda函数调用AppSync GraphQL查询。我一直在使用本文中的代码,特别是使用IAM权限的后一部分:https://docs.amplify.aws/lib/graphqlapi/graphql-from-nodejs/q/platform/js#signing-a-request-from-lambda 我正在使用放大CLI。我使用CLI创建函数,并确保它可以访问
这里是我的片段: 这里是我的片段: 当我开始使用Android4.3时,地图运行良好。但如果我从Android 6.0开始,我会收到消息(Toast)`没有许可
今天,我调试了我的代码。但是,当我删除bot的权限时,出现了一个错误,“discordapi:缺少权限”。因此,我尝试了一些方法让bot检查它是否具有所需的权限。但是,当我尝试下面的代码时,我再次遇到一个错误:“UnhandledPromisejectionWarning:TypeError:无法读取未定义的属性'has'”
我在Macbook pro osx 10.9 Firefox浏览器上使用XAMP 1.7.3 基本上,我正在尝试编写一个代码,要求用户输入一些信息,然后使用以下方法将信息存储在.txt文件中: 但是我一直收到这个错误消息: 警告:fopen(registration.txt) [function.fopen]:无法打开流:第 30 行的 /Applications/XAMPP/xamppfiles
Gateway是一个使用go实现的基于HTTP的API 网关。 特性: API 聚合 流控 熔断 负载均衡 健康检查 监控 消息路由 后端管理WebUI 能做什么: 规划更友好的URL给调用者。 聚合多个API的结果返回给API调用者,利于移动端,后端可以实现原子接口。 保护后端API服务不会被突发异常流量压垮。 提供熔断机制,使得后端API Server具备自我恢复能力。 借助消息路由能力,实现灰度发布,AB测试。
下午好.如何在不使用不同的OAUTH2服务的情况下,为一个应用程序中的特定实体(类似于RBAC/ABAC)的特定控制器配置用户的权限和角色? 还有一个名为Project的实体。用户可能是许多项目的成员。有一些项目用户角色:PROJECT_ADMIN、PROJECT_EDITO、PROJECT_USER。每个项目角色都可以拥有自己的权限(权限),如向项目添加用户、编辑项目等。所有角色配置都存储在'P