Как найти правильный URL-адрес для API Gateway API

В CDK (Typescript) я создаю Lambda с шлюзом API перед ним.

Консоль AWS показывает мне что-то под названием «URL-адрес вызова», что-то вроде https://wi4a95skjk.execute-api.us-east-1.amazonaws.com/prod, и оно работает нормально — именно то, что мне нужно.

Затем я пытаюсь прикрепить к нему свой собственный URL-адрес, например:

 const certificate = Certificate.fromCertificateArn(
    scope,
    `${id}-cert`,
    props.certificateArn
  );

  const domainName = this.addDomainName(`${id}-dn`, {
    domainName: `${props.subDomainName}.${props.domainName}`,
    certificate,
  });

  const zone = HostedZone.fromLookup(this, `${id}-hz`, {
    domainName: props.domainName,
  });
  new ARecord(this, `${id}-arecord`, {
    zone,
    recordName: props.subDomainName,
    target: RecordTarget.fromAlias(new ApiGateway(this)),
    ttl: Duration.minutes(3),
  });

Это успешно создает запись A в зоне, которая выглядит следующим образом:

mysub.example.org   A   Simple  -   Yes d-ywfxof47wi.execute-api.us-east-1.amazonaws.com.

(Обратите внимание, что обозначает TTL, который по какой-то причине не установлен.)

Мой URL-адрес mysub.example.org и бессмысленный d-ywfx... (который указывает на другой IP-адрес) просто зависают и ничего не делают, когда я пытаюсь получить к ним доступ с помощью curl.

Что здесь не так?

Обновлено:: теперь я получаю {"message":"Forbidden"}% с URL-адреса d-y; мой собственный до сих пор висит.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
309
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Мой URL mysub.example.org... просто зависает и ничего не делает

Хммм, я не вижу дымящегося пистолета. Ваш код CDK включает необходимые части. Запись псевдонима размещенной зоны указывает на доменное имя шлюза API. Дважды проверьте указанный сертификат и ресурсы размещенной зоны. На ваш существующий сертификат ссылается ARN с помощью fromCertificateArn, значение которого CDK не проверяет. Информация о вашей существующей размещенной зоне обозначается знаком fromLookup, который CDK извлекает один раз с помощью вызова SDK, а затем кэширует. Установите флажок cdk.context.json, чтобы убедиться, что значения кэшированной зоны актуальны.

Я получаю {"message":"Forbidden"}% с URL-адреса d-y;

Это ожидаемо. Это значение «Доменное имя шлюза API», а не общедоступная конечная точка. См. ниже.

Обратите внимание, что — обозначает TTL, который по какой-то причине не установлен.

Это ожидаемо. Как сказано в документации : «Если запись псевдонима указывает на ресурс AWS, вы не можете установить время жизни (TTL); Route 53 использует TTL по умолчанию для ресурса».


Вот резюме:

Доменное имя шлюза API

«Доменное имя шлюза API» используется как значение записи псевдонима размещенной зоны (см. ниже). Имеет формат d-73loomnpd7.execute-api.us-east-1.amazonaws.com. Это не публичное разоблачение.

Запись псевдонима Route 53

Имеет ли информация, указанная в вопросе. Значение ссылается на доменное имя шлюза API (см. выше).

Конечная точка шлюза API по умолчанию

  • CDK: свойство api.url в конструкции Rest API.
  • CloudFormation: н/д
  • Консоль: API-шлюз > Настройки API > Конечная точка по умолчанию.

Конечная точка по умолчанию — это общедоступная конечная точка. Это https://wi4a95skjk.execute-api.us-east-1.amazonaws.com/prod, который вы отметили в своем вопросе, где префикс wi4a95skjk — это идентификатор Rest API (свойство CDK api.apiId), а путь /prod/ — это этап. Вероятно, вы захотите отключить конечную точку по умолчанию, потому что у вас есть (надеюсь 🤔) собственный домен перед API. В CDK это можно сделать с помощью disableExecuteApiEndpoint: true в конструкции RestAPI.

// Tip: print the URL to the console at deploy time
new cdk.CfnOutput(this, "RestApiUrl", { value: api.url ?? "DISABLED",});

Извините, после 3 часов ругани я понял, что в моем тесте была небольшая опечатка. Я устанавливал разрешения на своем шлюзе, а затем пытался получить доступ к URL-адресу Cloudfront. Моя вина, почти полностью. (Я говорю «почти», потому что барочная собачья нашивка, которую представляет собой AWS, дает так много возможностей для поиска…

Michael Lorton 17.04.2024 05:32

Другие вопросы по теме