#typescript #amazon-web-services #amazon-cloudformation #aws-api-gateway #aws-cdk
Вопрос:
У меня есть API, предоставляемый AWS APIGateway, поддерживаемый функцией AWS Lambda и подготовленный с использованием CDK. API был настроен с настройками CORS по умолчанию:
const api = new apiGateway.RestApi(this, "comments-api", {
defaultCorsPreflightOptions: { allowOrigins: apiGateway.Cors.ALL_ORIGINS }
})
const comments = api.root.addResource("comments")
const comment = comments.addResource("{post_slug}")
comment.addMethod("GET", new apiGateway.LambdaIntegration(listCommentsFunction))
Похоже, что это обеспечивает только часть конфигурации CORS для моего API.
- Он предоставляет ответ на
OPTIONS
запрос с соответствующими заголовками, связанными с CORS, но - Похоже, он НЕ увлажняет ответ на запрос
GET <api>/comments/{post_slug}
соответствующими заголовками CORS
Это делает параметры CORS
конфигурации в конструкции CDK не особенно полезными, поскольку мне кажется более разумным игнорировать этот параметр и вместо этого вручную настроить ответ ПАРАМЕТРОВ из моей Лямбды, изменив его на этот:
const api = new apiGateway.RestApi(this, "comments-api")
const comments = api.root.addResource("comments")
const comment = comments.addResource("{post_slug}")
comment.addMethod("GET", new apiGateway.LambdaIntegration(listCommentsFunction))
comment.addMethod("OPTIONS", new apiGateway.LambdaIntegration(listCommentsFunction))
А затем убедитесь, что моя лямбда всегда отвечает правильными заголовками. Если я этого не сделаю, то я буду заполнять свои ответы заголовками CORS, используя два разных механизма: конфигурацию стека CDK и логику явного обработчика. Это похоже на запах.
По этой причине мне интересно, не неправильно ли я что-то настраиваю, и есть способ использовать CDK для настройки правильного увлажнения ответа.
Ответ №1:
Сгенерированный CDK код для OPTIONS
метода использует переопределения ответов — https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-override-request-response-parameters.html
Этот параметр недоступен в интеграции лямбда-прокси, которую вы используете для метода GET. Я действительно не нашел другого варианта, кроме как вычислить заголовки CORS на уровне исходного кода lambda.
P.S.: Я написал https://milangatyas.com/Blog/Detail/14/setup-cors-for-amazon-api-gateway-via-aws-cdk где вы можете получить более подробную информацию.