amazon-elastic-beanstalk - AWS CDK : Get LoadBalancer ARN of ElasticBeanstalk Environment for ApiGateway VPC Link

标签 amazon-elastic-beanstalk aws-api-gateway aws-cdk aws-load-balancer

我正在使用 AWS CDK 创建带有网络负载均衡器的 Elastic Beanstalk 环境。

Elastic Beanstalk 应用程序和负载均衡器都位于 VPC 的私有(private)子网中。
我想将 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陈述。
有没有可能如何检索环境的负载均衡器?

最佳答案

这应该可以解决问题。
CloudFormation

!Join
      - ""
      - - !Sub 'arn:aws:elasticloadbalancing:${AWS::Region}:${AWS::AccountId}:loadbalancer/net/'
        - !Select [0, !Split ["-", !GetAtt ElasticBeanstalkEnvironment.EndpointURL]]
        - '-'
        - !Select [1, !Split ["-", !GetAtt ElasticBeanstalkEnvironment.EndpointURL]]
        - '-'
        - !Select [2, !Split ["-", !GetAtt ElasticBeanstalkEnvironment.EndpointURL]]
        - '/'
        - !Select [0, !Split [".", !Select [3, !Split ["-", !GetAtt ElasticBeanstalkEnvironment.EndpointURL]]]]
CDK( typescript )
cdk.Fn.join("", [
        'arn:aws:elasticloadbalancing:'.concat(stack.region).concat(':').concat(stack.account).concat(':loadbalancer/net/'),
        cdk.Fn.select(0, cdk.Fn.split("-", this.BeanstalkCfnEnvironment.getAtt('EndpointUrl').toString())),
        '-',
        cdk.Fn.select(1, cdk.Fn.split("-", this.BeanstalkCfnEnvironment.getAtt('EndpointUrl').toString())),
        '-',
        cdk.Fn.select(2, cdk.Fn.split("-", this.BeanstalkCfnEnvironment.getAtt('EndpointUrl').toString())),
        '/',
        cdk.Fn.select(0, cdk.Fn.split(".", cdk.Fn.select(3, cdk.Fn.split('-', this.BeanstalkCfnEnvironment.getAtt('EndpointUrl').toString())))),
      ])

关于amazon-elastic-beanstalk - AWS CDK : Get LoadBalancer ARN of ElasticBeanstalk Environment for ApiGateway VPC Link,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62153936/

相关文章:

java - 将 Spring Boot 应用程序部署到 Elastic Beanstalk 时出现 502 Bad Gateway

amazon-web-services - 是否可以为 AWS 上的每个子域设置单独的 cname 记录

amazon-web-services - 在单个 AWS 账户中的不同环境(开发、QA、演示等)上部署 AWS Lambda + API Gateway

amazon-web-services - 获取无服务器框架在我的 serverless.yml 文件中创建的 API 网关资源的 ARN

reactjs - 使用 CDK/AWS 在 React App 中注入(inject) Systems Manager 值的任何方法

amazon-web-services - Laravel 4.2 AWS SQS 队列设置使用 EB 工作环境

amazon-web-services - 云形成: Environment failed to launch as it entered Terminated state

python - 尝试使用 AWS API Gateway 代理集成在 POST 上启用 CORS 时出现 500 错误

typescript - 如何使用 TypeScript 重构 CDK 代码?

amazon-web-services - AWS CDK 部署对 swagger 的更改保留旧值