Cloudformation AWS CLI查询具有多个嵌套堆栈的ALL堆栈资源

时间:2018-05-17 11:04:15

标签: amazon-web-services amazon-cloudformation

我知道我可以通过以下方式获得堆栈资源: -

aws cloudformation describe-stack-resources \
                    --stack-name MYSTACKNAME \
                    --query 'StackResources[*].{Type:ResourceType,LogicalID:LogicalResourceId}' \
                    --output table

如果我的堆栈只包含NESTED STACKS,我如何在Cloudformation中获取堆栈中所有嵌套堆栈的资源?

我可以看到如何查询我的父堆栈的所有堆栈。

aws cloudformation list-stacks \
                    --query 'StackSummaries[?contains(StackName, `MYSTACKNAME`) && (StackStatus==`CREATE_COMPLETE`||StackStatus==`UPDATE_COMPLETE`)].{Stack:StackName}' \
                    --output json

我无法解决如何使用它来提供只显示单个值的describe-stack-resources。

我可以把它构建成一个python脚本,但我想我会先做检查。

由于

2 个答案:

答案 0 :(得分:1)

你无法实现这一个命令。而是获取属于父堆栈的所有资源的列表(嵌套堆栈详细信息),然后通过遍历列表来描述堆栈资源。以下是我为获取所有资源而编写的命令:

for stack in $(aws cloudformation list-stacks --output text --query 'StackSummaries[?contains(StackName, `MYSTACKNAME`) && (StackStatus==`CREATE_COMPLETE`||StackStatus==`UPDATE_COMPLETE`)].[StackName]') ; do aws cloudformation describe-stack-resources --stack-name $stack --query 'StackResources[*].{Type:ResourceType,LogicalID:LogicalResourceId}' --output table ; done

答案 1 :(得分:0)

更通用的解决方案将需要处理可变级别的嵌套。在我们的情况下,我们的许多(但不是全部)s3存储桶都是使用从子模板调用的标准加密存储桶模板创建的。

我们在查找需要在删除堆栈之前清空的存储桶时使用如下脚本:

findBuckets() {
    aws cloudformation describe-stack-resources \
        --stack-name $1 \
        --query "StackResources[][ResourceType, PhysicalResourceId]" \
        --output text | 
    while read type value; do 
        if [[ $type == 'AWS::CloudFormation::Stack' ]]; then 
            findBuckets $value
        else
            echo $type $value
        fi
    done
}

然后可以使用它来调用它,例如:

findBuckets my-stack-dev