我正在使用AWS CDK通过网络负载均衡器创建Elastic Beanstalk环境。
Elastic Beanstalk应用程序和负载均衡器均位于VPC的专用子网中。 我想将API网关与使用网络负载平衡器的VPC链接一起使用。
在CDK应用程序中,我正在创建一个elasticbeanstalk.CfnEnvironment。对于我的ApiGateway,我有一个这样的VPC链接:
const env: elasticbeanstalk.CfnEnvironment = this.createElasticBeanstalkEnvironment();
const loadBalancer = elbv2.NetworkLoadBalancer.fromNetworkLoadBalancerAttributes(this.stack, `DjangoNetworkLoadBalancer`, {
loadBalancerArn: env.loadBalancerArn (not available!)
})
const link = new apigateway.VpcLink(this.stack, `DjangoLoadBalancerLink`, {
targets: [loadBalancer],
});
...
private createElasticBeanstalkEnvironment() {
const env = new elasticbeanstalk.CfnEnvironment(this.stack, 'DjangoBeanstalkEnv', {
applicationName: 'TestApp',
environmentName: 'TestAppDev',
solutionStackName: '64bit Amazon Linux 2 v3.0.1 running Python 3.7'
});
env.optionSettings = [
{
namespace: 'aws:elasticbeanstalk:environment',
optionName: 'LoadBalancerType',
value: 'network'
},
{
namespace: 'aws:elbv2:listener:443',
optionName: 'ListenerEnabled',
value: 'true'
},
{
namespace: 'aws:elbv2:listener:default',
optionName: 'ListenerEnabled',
value: 'false'
}
]
return env;
}
很遗憾,我不能使用env.loadBalancerArn
语句。
我有什么办法可以检索环境的负载均衡器信息?
答案 0 :(得分:0)
我记得我曾经尝试过类似的方法,但是发生的事情是,由于从Cloudformation创建Elasticbeanstalk的方式,不可能检索负载均衡器ARN。
如果您在Cloudformation中观察ElasticBeanstalk的创建过程,则在达到环境要求时,它将衍生出另一个Cloudformation脚本来构建环境。因此,您将无法检索这些信息,例如EC2,负载均衡器信息
最后,我最终将ECS与API Gateway结合使用,ECS可以为您提供负载均衡器ARN
例如
const apiService = new ecs_patterns.NetworkLoadBalancedEc2Service(
this,
"my-service",
{
cluster: cluster,
desiredCount: 1,
memoryLimitMiB: 500,
// other detail omit...
publicLoadBalancer: false
}
);
const nlb = apiService.loadBalancer;