Итак, я попробовал ту же настройку, что и у вас,
...
// lambda resource
resource "aws_s3_bucket_notification" "my-trigger" {
bucket = "k8-alb-ingress-access-logs"
lambda_function {
lambda_function_arn = "${aws_lambda_function.my-function.arn}"
events = ["s3:ObjectCreated:*"]
filter_prefix = "AWSLogs/"
filter_suffix = ".txt"
}
}
resource "aws_lambda_permission" "test" {
statement_id = "AllowS3Invoke"
action = "lambda:InvokeFunction"
function_name = "${aws_lambda_function.my-function.arn}"
principal = "s3.amazonaws.com"
source_arn = "arn:aws:s3:::my-bucket"
}
...
Моя политика корзины S3 выглядит следующим образом:
{
"Version": "2012-10-17",
"Id": "AWSConsole-AccessLogs-Policy-1534800162725",
"Statement": [
{
"Sid": "AWSConsoleStmt-1534800162725",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::123456789012:root"
},
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::k8-alb-ingress-access-logs/AWSLogs/890895631537/*"
}
]
}
И уведомление s3 успешно создано.
Так что я думаю, что теперь вы должны проверить 2 вещи:
Убедитесь, что ваше aws_lambda_permission действительно создано до вашего уведомления s3.Я использую terraform 0.10.2, но в предыдущих версиях могла быть ошибка, из-за которой это лямбда-разрешение не было создано до уведомления s3.
Проверьте политику корзины s3.Это может быть явное запрещение лямбда-доступа.Если таковые имеются, обязательно избавьтесь от них.