要创建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
});
如何使用环境作为目标?在aws-cdk存储库中寻找实现IAliasRecordTarget的类,除了云前端分布和基本负载平衡器之外,不会产生很多候选对象。
答案 0 :(得分:1)
target
道具期望一个带有bind()
函数的对象返回dnsName
,evaluateTargetHealth
和hostedZoneId
(请参阅AWS::Route53::RecordSet AliasTarget和{{ 3}})。
您可以执行以下操作:
const record = new AliasRecord(this, 'ARecord', {
recordName: 'a-record',
target: {
bind: (): AliasRecordTargetProps => ({
dnsName: environment.environmentEndpointUrl,
hostedZoneId: 'Z14LCN19Q5QHIC' // for us-east-1
})
},
zone: zone
});
有关使用托管区域ID的列表,请参见implementation of AliasRecord
。
更新2018-05-28 :asAliasRecordTarget
在bind
版本0.32.0中现已aws-cdk
答案 1 :(得分:0)
除了@jogold发布的解决方案和评论之外,
使用HostedZoneProvider
返回您自己的托管区域,并
使用Elastic Beanstalk托管区域的区域ID作为目标
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
});
答案 2 :(得分:0)
对于那些在单实例环境中寻求解决方案的人:
cnamePrefix
设置为您喜欢的值(例如“ my-app”)。这样会产生一个网址,您以后可以将其用作dnsName
的一部分以创建A记录; AliasRecordTarget
:const record: IAliasRecordTarget = {
bind: (): AliasRecordTargetConfig => ({
dnsName: `${cnamePrefix}.${this.region}.elasticbeanstalk.com`,
hostedZoneId: 'Z2NYPWQ7DFZAZH' // Lookup ID or create a mapper: https://www.rubydoc.info/gems/roadworker/Aws/Route53
})
};
A-record
:// Route53 alias record for the EBS app
new ARecord(this, 'ebs-alias-record', {
recordName: `my-app.mydomain.com.`,
target: RecordTarget.fromAlias(record),
zone: hostedZone
})
**编辑**
要获取hostedZone
变量的值,可以使用以下方法查找区域:
HostedZone.fromLookup(this, 'zone-lookup', {domainName: 'my-app.mydomain.com'});