CDK为ELB资源创建其他堆栈

时间:2020-06-06 01:17:24

标签: amazon-elastic-beanstalk aws-cdk

我正在使用CDK创建带有一些ELB资源的堆栈。一切似乎都工作正常,但是最后我得到了两个CloudFormation堆栈。一个名为demo,另一个具有随机生成的名称,例如awseb-e-jkmuguqm3e-stack

demo堆栈具有ElasticBeanstalk应用程序和环境,但另一个堆栈具有一堆负载平衡器资源,包括AutoScalingGroup,LaunchConfiguration,ScalingPolicy等,我认为这些资源是作为ELB东西的一部分创建的,但我认为它们最终会在同一堆栈中?

免责声明:这可能完全是预期的行为,因为一切正常,但是对于CDK来说,我发现有人可能知道为什么我在这里得到了额外的堆栈,也许我可以做些什么来防止这种情况

我已经定义了一个AppStack(cdk-app / index.ts):

export class AppStack extends cdk.Stack {
  constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {
    super(scope, id, props);


    const stackName = _.get(props, ['stackName'], '');

    const app = new elasticBeanstalk.CfnApplication(this, `${stackName}EbsApplication`, {
      applicationName: `${_.toLower(stackName)}-ebs-app`
    });

    const ebsInstanceRole = new iam.Role(
      this,
      `${stackName}EBSInstanceRole`,
      {
        roleName: `${_.toLower(stackName)}-ebs-role`,
        assumedBy: new iam.ServicePrincipal('ec2.amazonaws.com'),
      }
    );

    // create an instance profile the that instances in our EBS environment will use
    const ebsInstanceProfile = new iam.CfnInstanceProfile(
      this,
      `${stackName}InstanceProfile`,
      {
        instanceProfileName: `${_.toLower(stackName)}-ebs-instance-profile`,
        roles: [
          ebsInstanceRole.roleName,
        ],
      }
    );

    const env = new elasticBeanstalk.CfnEnvironment(this, 'Environment', {
      environmentName: `${_.toLower(stackName)}-ebs-env`,
      applicationName: `${_.toLower(stackName)}-ebs-app`,
      solutionStackName: '64bit Amazon Linux 2 v5.0.2 running Node.js 12',
      optionSettings: [
        {
          namespace: 'aws:autoscaling:launchconfiguration',
          optionName: 'IamInstanceProfile',
          value: ebsInstanceProfile.instanceProfileName,

        }
      ]
    });
  }
}

export default AppStack;

我使用堆栈(index.ts):

import AppStack from "./cdk-app";

const app = new cdk.App();

const appStack = new AppStack(app, 'demoAppStack', { stackName: 'demo' });

app.synth();

1 个答案:

答案 0 :(得分:0)

我相信这就是 Elastic Beanstalk 的工作方式。它为您创建了一个嵌套堆栈(即 awseb-e-jkmuguqm3e-stack 在您的情况下)。如果你想避免它,我认为你需要停止使用 Elastic Beanstalk。

另外值得注意的是,您所看到的并非特定于 CDK。您还将看到在使用 Cloudformation 定义 EB 堆栈以及通过 AWS 控制台创建 EB 环境时创建的额外“随机”堆栈。

相关问题