AWS CDK: как настроить эластичную среду Beanstalk с помощью записи псевдонима Route53 - PullRequest
0 голосов
/ 16 мая 2019

Для создания приложения и среды Elastic Beanstalk у меня есть следующий код:

// this: the class instance extending Construct

const application = new CfnApplication(this, 'Application', {
  applicationName: 'some-name'
});
const environment = new CfnEnvironment(this, 'Environment', {
  environmentName: 'production',
  applicationName: application.applicationName,
  platformArn: 'arn::of::plaform',
  solutionStackName: 'a-valid-stack-name'
});

Для создания записи псевдонима в Route53 требуется целевая реализация IAliasRecordTarget

const record = new AliasRecord(this, 'ARecord', {
 recordName: 'a-record',
 target: ?
 zone: zone
});

Как можноЯ использую окружающую среду в качестве цели?Поиск классов, реализующих IAliasRecordTarget в репозитории aws-cdk, не дает много кандидатов, кроме распределения в облачном фронте и балансировки базовой нагрузки

Ответы [ 2 ]

1 голос
/ 16 мая 2019

Свойство target ожидает, что объект с функцией bind() вернет dnsName, evaluateTargetHealth и hostedZoneId (см. AWS :: Route53 :: RecordSet AliasTarget и реализация AliasRecord).

Вы можете сделать следующее:

const record = new AliasRecord(this, 'ARecord', {
  recordName: 'a-record',
  target: {
    bind: (): AliasRecordTargetProps => ({
      dnsName: environment.environmentEndpointUrl,
      hostedZoneId: 'Z14LCN19Q5QHIC' // for us-east-1
    })
  },
  zone: zone
});

См. Области и конечные точки AWS - AWS Elastic Beanstalk для получения спискаидентификаторы размещенной зоны при использовании другого региона.

ОБНОВЛЕНИЕ 2018-05-28 : asAliasRecordTarget теперь bind в aws-cdk версии 0,32,0

0 голосов
/ 16 мая 2019

В дополнение к решению и комментарию, опубликованному @jogold, используйте HostedZoneProvider для получения своей собственной размещенной зоны и используйте идентификатор зоны Elastic Beanstalk Hosted zone в качестве цели

const zone = new HostedZoneProvider(this, {
            domainName: props.domainName
}).findAndImport(this, 'a-hosted-zone');

const ebsRegionHostedZoneId = 'Z117KPS5GTRQ2G' // us-east-1

const record = new AliasRecord(this, 'ARecord', {
  recordName: 'a-record',
  target: {
    asAliasRecordTarget: (): AliasRecordTargetProps => ({
      dnsName: environment.environmentEndpointUrl,
      // the id of the hosted zone in your region
      hostedZoneId: ebsRegionHostedZoneId
    })
  },
  // your hosted zone
  zone: zone
});
...