Я не знаком с GO, но с точки зрения API AWS, что происходит, когда вы используете консоль AWS для добавления триггера к лямбда-функции, вы фактически добавляете разрешение для другой службы вызывать вашу функцию.Графическая консоль AWS вызывает базовый API-интерфейс под сценой, чтобы упростить его использование.
Если вы создаете или настраиваете функцию Lambda с помощью интерфейса командной строки AWS или SDK, вам необходимо сделать явный вызовadd-permission
API.
Вот документация для интерфейса командной строки AWS.Это хороший способ попрактиковаться и узнать, прежде чем начать писать свой код: https://docs.aws.amazon.com/cli/latest/reference/lambda/add-permission.html
Вот документация для эквивалента Go SDK: https://docs.aws.amazon.com/sdk-for-go/api/service/lambda/#Lambda.AddPermission
И вот два примерав оболочке bash (один для авторизации API Gateway и один для авторизации Amazon S3 для запуска функции, но я уверен, что вы можете легко адаптировать это к своему варианту использования)
aws lambda add-permission \
--region $REGION \
--function-name $FUNCTION_NAME \
--statement-id 1 \
--principal apigateway.amazonaws.com \
--action lambda:InvokeFunction \
--source-arn arn:aws:execute-api:$REGION:$ACCOUNT_ID:* >/dev/null
#
# Add permission to authorize S3 bucket to invoke Lambda
#
AWS_ACCOUNT_ID=$(echo $ROLE_EXEC_ARN | sed 's/^arn:aws:iam::\(.*\):.*$/\1/')
aws lambda add-permission --function-name $FUNCTIONNAME --region $REGION --profile $PROFILE --statement-id Id-x --action "lambda:InvokeFunction" --principal s3.amazonaws.com --source-arn arn:aws:s3:::$BUCKETNAME --source-account $AWS_ACCOUNT_ID