我正在使用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();
答案 0 :(得分:0)
我相信这就是 Elastic Beanstalk 的工作方式。它为您创建了一个嵌套堆栈(即 awseb-e-jkmuguqm3e-stack
在您的情况下)。如果你想避免它,我认为你需要停止使用 Elastic Beanstalk。
另外值得注意的是,您所看到的并非特定于 CDK。您还将看到在使用 Cloudformation 定义 EB 堆栈以及通过 AWS 控制台创建 EB 环境时创建的额外“随机”堆栈。