API AWS SAM с пользовательским доменом

#amazon-web-services #aws-lambda #amazon-route53 #aws-sam

Вопрос:

Я перенес API Джерси в Cloudformation (используя AWS SAM), и он правильно работает с доменом amazonaws… доступен, как https://xxxxx.execute-api.us-east-1.amazonaws.com/Stage/endpoint

Теперь мне нужно иметь доступ к нему с помощью моего собственного домена, например https://api.mydomain.com/endpoint .

Я настроил сертификат в Диспетчере сертификатов (api.mydomain.com) и добавил запись CNAME в мою зону размещения route53. Затем я просто добавил этот раздел в свой файл YML:

   Api:
    EndpointConfiguration: REGIONAL
    Domain:
      DomainName: api.mydomain.com
      CertificateArn: arn:aws:acm:us-east-1:XXXXXXXX:certificate/bbbbbb-bbbb-bbbb-bbbb-bbbbbbbb
 

Это мой YML с этим разделом:

 AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: AWS Serverless Jersey API - com.mydomain::mydomain
Globals:
  Function:
    Environment:
      Variables:
        •••
  Api:
    EndpointConfiguration: REGIONAL
    Domain:
      DomainName: api.mydomain.com
      CertificateArn: arn:aws:acm:us-east-1:XXXXXXXX:certificate/bbbbbb-bbbb-bbbb-bbbb-bbbbbbbb
  
Resources:
  MyServiceFunction:
    Type: AWS::Serverless::Function
    Properties:
      Handler: com.mydomain.app.StreamLambdaHandler::handleRequest
      Runtime: java8
      CodeUri: .
      MemorySize: 512
      Policies: AWSLambdaBasicExecutionRole
      Timeout: 30
      Events:
        ProxyResource:
          Type: Api
          Properties:
            Path: /{proxy }
            Method: any
      Policies:
        •••

Outputs:
  MyServiceApi:
    Description: URL for application
    Value: !Sub 'https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Stage/endpoint'
    Export:
      Name: MyServiceApi
 

Это просто не работает с моим пользовательским доменом. Запрошенный URL-адрес недоступен. Пожалуйста, помогите 🙁

Ответ №1:

Хорошо, наконец-то я решил проблему с помощью этих шагов

  1. Создайте сертификат в Диспетчере сертификатов с необходимым URL-адресом: api.mydomain.com
  2. Добавьте созданное имя домена и имя сертификата в файл yml
  3. Перейдите в Шлюз API->Пользовательские доменные имена> и выберите домен. Затем из конфигураций скопируйте доменное имя шлюза API
  4. Перейдите в Route53 и добавьте запись A с доменом api.mydomain.com со значением доменного имени шлюза API