突发奇想,既然cloudformation堆栈支持嵌套,即在堆栈中创建堆栈,那么如果在模板中指定创建堆栈自身会发生什么呢?
反正cloudformation只要不创建资源就不收费,索性尝试下。
使用以下模板上传到指定的s3桶中,之后将TemplateURL
替换为s3的https路径,并重新上传到s3替代源文件(此时url保持不变)
AWSTemplateFormatVersion: '2010-09-09'
Parameters:
InstanceType:
Type: String
Default: t3.small
Description: 'EC2 instance type, e.g. m1.small, m1.large, etc.'
KeyName:
Type: String
Default: test-key
Description: Name of an existing EC2 KeyPair to enable SSH access to the web server
Resources:
myStackWithParams:
Type: AWS::CloudFormation::Stack
Properties:
TemplateURL: https://xxxxxx.s3.cn-north-1.amazonaws.com.cn/cloudformation.yaml
Parameters:
InstanceType: t2.micro
KeyName: mykey
在cloudformation中使用这个s3对象为模板创建堆栈
没有出现预料中的递归检查错误,从下图中可以看到在不断创建新的堆栈
创建24个堆栈左右出现以下错误
事件中出现嵌套堆栈超出深度限制
没有找到堆栈深度限额的文档,不过确实存在递归的检测
此外,嵌套堆栈的删除过程极为缓慢(因为并没有创建资源,逻辑上不应该这么慢,可能是由于递归造成的处理困难)。