В aws_lambda_permission приведен пример исходного ARN, которому предоставлен доступ к лямбда-функциям.
Часть source_arn = "${aws_api_gateway_rest_api.MyDemoAPI.execution_arn}/*/*/*"
работала до сегодняшнего дня 4 / APR / 2020, но внезапно перестала работать.
Кто-нибудь заметил то же самое или, если что-то не так в коде, пожалуйста, предложите .
resource "aws_lambda_permission" "lambda_permission" {
statement_id = "AllowMyDemoAPIInvoke"
action = "lambda:InvokeFunction"
function_name = "MyDemoFunction"
principal = "apigateway.amazonaws.com"
# The /*/*/* part allows invocation from any stage, method and resource path
# within API Gateway REST API.
source_arn = "${aws_api_gateway_rest_api.MyDemoAPI.execution_arn}/*/*/*"
}
Не уверен, что изменилось, если это на стороне AWS или стороне поставщика Terraform AWS.
Примеры
Используется для работы
resource "aws_lambda_permission" "allow_apigw_invoke_lambda_receive_question_alias" {
statement_id = "1"
principal = "apigateway.amazonaws.com"
source_arn = "${aws_api_gateway_rest_api.mysfit.execution_arn}/*/*/*"
action = "lambda:InvokeFunction"
function_name = local.lambda_receive_question_function_name
qualifier = local.lambda_receive_question_function_alias
}
Сгенерированный результат
{
"Version": "2012-10-17",
"Id": "default",
"Statement": [
{
"Sid": "1",
"Effect": "Allow",
"Principal": {
"Service": "apigateway.amazonaws.com"
},
"Action": "lambda:InvokeFunction",
"Resource": "arn:aws:lambda:us-east-2:11111111111:function:mysfit_mysfitsReceiveQuestion:v1",
"Condition": {
"ArnLike": {
"AWS:SourceArn": "arn:aws:execute-api:us-east-2::s8qgrp3acc/*/*/*"
}
}
}
]
}
Работает сейчас
resource "aws_lambda_permission" "allow_apigw_invoke_lambda_receive_question_alias" {
statement_id = "1"
principal = "apigateway.amazonaws.com"
source_arn = "arn:aws:execute-api:${data.aws_region.current.id}:${data.aws_caller_identity.current.account_id}:${aws_api_gateway_rest_api.mysfit.id}/*/*/*"
action = "lambda:InvokeFunction"
function_name = local.lambda_receive_question_function_name
qualifier = local.lambda_receive_question_function_alias
}
Сгенерированный результат
{
"Version": "2012-10-17",
"Id": "default",
"Statement": [
{
"Sid": "1",
"Effect": "Allow",
"Principal": {
"Service": "apigateway.amazonaws.com"
},
"Action": "lambda:InvokeFunction",
"Resource": "arn:aws:lambda:us-east-2:1111111111:function:mysfit_mysfitsReceiveQuestion:v1",
"Condition": {
"ArnLike": {
"AWS:SourceArn": "arn:aws:execute-api:us-east-2:1111111111:s8qgrp3aeb/*/*/*"
}
}
}
]
}
API GW Source ARN Формат
Формат работает сейчас, насколько я тестировал ниже.
"arn:aws:execute-api:${AWS_REGION}:${AWS_ACCOUNT_ID}:${AWS_REST_API_ID}/${AWS_API_DEPLOYMENT_STAGE_NAME}/${REST_API_METHOD_HTTP_VERB}/${REST_API_RESOURCE_PATH}"
В Terraform:
"arn:aws:execute-api:${data.aws_region.current.id}:${data.aws_caller_identity.current.account_id}:${aws_api_gateway_rest_api.mysfit.id}/*/${aws_api_gateway_integration.question_post.integration_http_method}${aws_api_gateway_resource.question.path}"
или
"arn:aws:execute-api:${data.aws_region.current.id}:${data.aws_caller_identity.current.account_id}:${aws_api_gateway_rest_api.mysfit.id}/*/*/*"