AWS CloudFormation:在嵌套堆栈之间传递值

2024-02-29

更多 AWS 问题!好的,我们的想法是一个主模板调用所有嵌套堆栈。在此处的帮助下,我弄清楚了如何将参数从主服务器传递到嵌套堆栈。现在我试图弄清楚如何将值从嵌套堆栈传递到嵌套堆栈。我认为这应该通过出口和进口来完成,但我认为我的做法不太正确。我不确定是我的进口还是出口有问题。

我收到的错误是:

No export named TestStack1-VpcStackID found. Rollback requested by user.

Master:

{
    "AWSTemplateFormatVersion" : "2010-09-09",
    "Description" : "Master template",
    "Parameters" : {
        "availabilityZone" : {
            "Default" : "us-east-1d",
            "Description" : "Enter AvailabilityZone.",
            "Type" : "String"
        },
        "VpcCidrBlock" : {
            "Default" : "10.0.0.0/16",
            "Description" : "VPC CIDR Block.",
            "Type" : "String"
        },
        "PublicSubnetCidrBlock" : {
            "Default" : "10.0.0.0/24",
            "Description" : "Public subnet CIDR block.",
            "Type" : "String"
        }
    },
    "Resources" : {
        "VpcStack" : {
            "Type" : "AWS::CloudFormation::Stack",
            "Properties" : {
                "Parameters" : {
                    "VpcCidrBlock" : {
                        "Ref" : "VpcCidrBlock"
                    }
                },
                "TemplateURL" : "https://s3.amazonaws.com/url/templates/vpcStack.json",
                "TimeoutInMinutes" : "5"
            }
        },
        "PublicRouteStack" : {
            "Type" : "AWS::CloudFormation::Stack",
            "Properties" : {
                "Parameters" : {
                    "PublicSubnetCidrBlock" : {
                        "Ref" : "PublicSubnetCidrBlock"
                    },
                    "VpcStack" : {
                        "Fn::ImportValue" : {
                            "Fn::Sub" : "${AWS::StackName}-VpcStackID"
                        }
                    }
                },
                "TemplateURL" : "https://s3.amazonaws.com/url/templates/publicRouteStack.json",
                "TimeoutInMinutes" : "5"
            }
        }
    }
}

VpcStack(嵌套 - 我认为我的输出不正确):

{
    "AWSTemplateFormatVersion" : "2010-09-09",
    "Description" : "VPC template",
    "Parameters" : {
        "VpcCidrBlock" : {
            "Description" : "Vpc CIDR Block.",
            "Type" : "String"
        }
    },
    "Resources" : {
        "VpcStack" : {
            "Type" : "AWS::EC2::VPC",
            "Properties" : {
                "EnableDnsSupport" : "true",
                "EnableDnsHostnames" : "true",
                "CidrBlock" : {
                    "Ref" : "VpcCidrBlock"
                },
                "Tags" : [
                    {
                        "Key" : "Application",
                        "Value" : {
                            "Ref" : "AWS::StackName"
                        }
                    }
                ]
            }
        }
    },
    "Outputs" : {
        "VpcStack" : {
            "Description" : "VPC Stack ID.",
            "Value" : {
                "Ref" : "VpcStack"
            },
            "Export" : {
                "Name" : {
                    "Fn::Sub" : "${AWS::StackName}-VpcStackID"
                }
            }
        }
    }
}

公共StubnetStack(我认为这是它失败的地方):

{
    "AWSTemplateFormatVersion" : "2010-09-09",
    "Description" : "Public Subnet Stack",
    "Parameters" : {
        "PublicSubnetCidrBlock" : {
            "Default" : "10.0.0.0/24",
            "Description" : "Public subnet CIDR block.",
            "Type" : "String"
        },
        "VpcStack" : {
            "Description" : "VPC Stack.",
            "Type" : "String"
        }
    },
    "Resources" : {
        "PublicSubnet" : {
            "Type" : "AWS::EC2::Subnet",
            "Properties" : {
                "VpcId" : {
                    "Ref" : "VpcStack"
                },
                "CidrBlock" : {
                    "Ref" : "PublicSubnetCidrBlock"
                },
                "Tags" : [
                    {
                        "Key" : "Application",
                        "Value" : {
                            "Ref" : "AWS::StackName"
                        }
                    },
                    {
                        " Key" : "Network",
                        "Value" : "Public"
                    }
                ]
            }
        }
    },
    "Outputs" : {
        "PublicSubnet" : {
            "Description" : "Public Subnet ID.",
            "Value" : {
                "Ref" : "PublicSubnet"
            },
            "Export" : {
                "Name" : {
                    "Fn::Sub" : "${AWS::StackName}-PublicSubnetID"
                }
            }
        }
    }
}

很抱歉发布了这么多,我对 AWS 很陌生,并且正在努力快速掌握它。


问题

您的问题是您将值导出为

"Export" : {
  "Name" : {
    "Fn::Sub" : "${AWS::StackName}-VpcStackID"
  }
}

您正在使用${AWS::StackName}将替换的变量当前堆栈name 到您的导出变量名称中。请注意,这是堆栈名称你的嵌套堆栈.

然而,在您的包装模板中,您尝试将值导入为:

"Fn::ImportValue" : {
  "Fn::Sub" : "${AWS::StackName}-VpcStackID"
}

同样,您正在替换变量${AWS::StackName} for 当前堆栈,在这种情况下是你的包装堆栈.

请注意,当您使用嵌套堆栈时,您实际上是在创建一个新堆栈,因此堆栈名称会根据您所在的模板而变化。

决议

不要对变量使用导入/导出。

在嵌套模板中,删除Export输出中的元素。你不需要它们。只需使用堆栈参数将值从包装器堆栈传递到嵌套堆栈,并使用堆栈输出将值从嵌套堆栈传递回包装器堆栈。

在包装器堆栈中,使用以下输出VpcStack像这样:

"PublicRouteStack" : {
        "Type" : "AWS::CloudFormation::Stack",
        "Properties" : {
            "Parameters" : {
                "PublicSubnetCidrBlock" : {
                    "Ref" : "PublicSubnetCidrBlock"
                },
                "VpcStack" : {
                    "Fn::GetAtt" : [ "VpcStack", "Outputs.VpcStack" ]
                }
            },
            "TemplateURL" : "https://s3.amazonaws.com/url/templates/publicRouteStack.json",
            "TimeoutInMinutes" : "5"
        }
    }

请注意,在本例中,我使用的是output named VpcStack从你的VpcStack嵌套堆栈通过Fn::GetAtt功能。

附言。为了清楚起见,您应该更改一些姓名。尽量避免在各处重复使用相同的名称。它有助于让事情变得清晰。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AWS CloudFormation:在嵌套堆栈之间传递值 的相关文章

  • 为什么在尝试使用 Java 连接到 RDS PostgreSQL 数据库时会收到 SocketTimeoutException?

    我有一个 Spring 应用程序 我试图在 AWS 上托管 几天来我一直在努力配置 我有一个 EC2 实例 并且能够通过 SSH 连接到它 我还在 AWS 中设置了 Postgres RDS 数据库 但我无法使用 IDE 中的代码连接到它
  • AWS cognito身份池ABAC如何映射自定义多值属性?

    来自身份提供商的开放 ID 令牌示例 本例中为 Cognito 用户池 cognito groups testers admins email verified false 我想使用ABAC 就像这里给出的例子一样 https docs a
  • 访问 AWS 上的 Tensorboard

    我正在尝试访问 AWS 上的 Tensorboard 这是我的设置 张量板 tensorboard host 0 0 0 0 logdir train 在端口 6006 上启动 TensorBoard b 39 您可以导航到http 172
  • 将多个平台部署到 Elastic Beanstalk (PHP/Python)

    是否可以将多个平台部署到AWS 我有一个 PHP 应用程序 我还想运行一个小的 python 脚本 我看到 PHP 平台默认安装 Python 但是使用eb deployAWS 没有接听requirements txt并安装依赖项 我已经尝
  • 如何动态更新我的 AWS CloudWatch 控制面板?

    我在 CloudWatch 中有几个仪表板 它们代表我的基础设施的静态视图 例如 自动扩展工作组中当前正在运行的实例数量 或者各种关键 EC2 实例的 CPU 磁盘状态 但是 当我添加新实例时 我总是需要手动更新仪表板以将它们包含在显示中
  • AngularJS 中的嵌套模块

    我有 2 个不同的 AngularJs 模块 一个 widgetContainer 和一个 widget 小部件可以显示为独立的应用程序 也可以包含在小部件容器中 一个 widgetContainer 包含 0 N 个 widget 如果我
  • Elastic Beanstalk、Bundler 找不到 gem“bundler”的兼容版本

    我已经尝试过将 Elastic Beanstalk 用于 Rails 当我运行 eb deploy 时出现此错误 我需要至少安装bundler 1 8 4 知道如何解决这个问题吗 Bundler could not find compati
  • 用于从深层嵌套列表/元组中提取元素的递归函数

    我想编写一个从深层嵌套元组和列表中提取元素的函数 假设我有这样的东西 l THIS THAT a b c THAT d e f 我想要一个没有 这个 和 那个 的简单列表 list a b c d e f 这是我到目前为止所拥有的 def
  • 从 node.js 创建对 AWS ES 实例的有效签名请求

    我试图找到一个示例 说明如何连接到 Node js 中的 AWS ES 实例 然后通过一个简单的请求访问 ES 集群 我正在尝试使用elasticsearch节点包 https www npmjs com package elasticse
  • 具有服务器端加密 s3 存储桶的 AWS Cloudfront

    这是对这个问题 https stackoverflow com questions 50166557 how can a cloudfront distribution an aws kms key to get an s3 image e
  • 在 RedShift 中声明变量

    SQL Server能够声明一个变量 然后在查询中调用该变量 如下所示 DECLARE StartDate date SET StartDate 2015 01 01 SELECT FROM Orders WHERE OrderDate g
  • 从本地计算机连接到 AWS 上的 Neptune

    我正在尝试从办公室的本地计算机连接到 AWS 实例中的 Neptune DB 就像从办公室连接到 RDS 一样 是否可以从本地计算机连接 Neptune 数据库 Neptune 数据库是否公开可用 开发人员有什么方法可以从办公室连接 Nep
  • 每次在我的 AWS SQS 目标上推送通知时如何触发事件?

    我正在将 AWS SQS 用于 Amazon MWS 订单 API 每当有人从已将我添加为其开发人员的卖家帐户订购时 亚马逊都会将通知发送到我的 AWS SQS 应用程序 我可以从那里提取通知 但为此 我必须创建一个调度程序来提取通知 我是
  • 将 Django 部署到 AWS;傻瓜静态文件

    我对这个项目的最后一步完全迷失了 到目前为止 我已经能够开发一个 Django 应用程序 它可以在本地主机上按照我想要的方式工作 我已经能够将网站部署到 AWS EC2 但我一定错过了有关提供静态文件的一些基本知识 我什至还没有尝试过媒体文
  • AWS EC2 应用程序负载均衡器 + 双向 SSL?

    是否可以使用 AWS Application Load Balancer 并使用双向 ssl 客户端证书 我当前的设置使用经典的 ELB 通过 tcp 转发到 Web 服务器端点来支持此操作 我现在需要使用 URL 路由流量 并希望在可能的
  • 如何使用 AWS Glue 开始处理从 Web 服务终端节点提取的数据?

    更多源数据来自我需要定期轮询的 Web 服务端点 获得数据后 我可以使用 pyspark 执行传统的 ETL 并最终将数据写入 S3 和 Redshift 我不确定如何进行初始提取 甚至不确定我应该在 AWS Glue 文档中查找什么内容
  • AWS Elastic Beanstalk 一次也不会部署我的 Rails 应用程序

    我目前正在使用 Ruby 2 6 running on 64bit Amazon Linux 2 3 0 2 图像 并通过查看EC2实例内部的 var logs eb engine log eb logs 命令不会 t 告诉我这个 反复出现
  • AWS S3 上传的图像已损坏

    我正在 AWS ec2 ubuntu 机器上工作 我的代码在 cakephp 中 当我尝试将任何图像上传到 AWS S3 时 它都会损坏 虽然它在核心 php 代码中运行良好 这是我的控制器代码 if this gt User gt sav
  • AWS cognito 用户迁移池触发器不适用于登录流程

    我正在使用带有认知执行角色的 Lambda 函数进行 AWS 认知池迁移 以下是我的新池应用程序客户端设置 or AWS doc says 用户迁移身份验证流程 用户迁移 Lambda 触发器 允许从旧用户管理系统轻松迁移用户 进入您的用户
  • AWS S3 公共对象与私有对象?

    回到 S3 我的存储桶中有图像的 URL 我将在我的应用程序中呈现这些图像 但它们被设置为私有 当我尝试单击该链接时 它显示 访问被拒绝 当我将链接的设置更改为公共时 它会通过 但是我读到公共访问并不是最安全的事情 所以这本质上是一个由两部

随机推荐

  • Docile.jl 在 Julia 0.3 中的使用示例

    我是朱莉娅的新手 我有兴趣使用温顺 jl https michaelhatherly github io Docile jl index html向现有 Julia 项目添加文档 根据这个帖子 https stackoverflow com
  • PHP:字符串到正则表达式

    我尝试使用字符串作为正则表达式模式 但出现以下错误 PHP Warning preg match Unknown modifier gt in Applications MAMP htdocs cruncher Plugins wordpr
  • 如何使 PHPUnit 在有风险的测试中失败

    我想要 PHPUnitfail如果一项或多项测试被认为有风险 实际上 PHPUnit 5 3 4 by Sebastian Bergmann and contributors RRR 7 7 100 Time 2 83 seconds Me
  • 在哪里可以找到新的 azure devops 扩展的所有可用贡献目标?

    新的azure扩展开发文档 https developer microsoft com en us azure devops develop extensions指向一个示例项目github https github com Microso
  • LLVM 和编译器术语

    我正在研究 LLVM 系统并且我已经阅读了入门文档 http llvm org docs GettingStarted html 然而 一些术语 以及 clang 示例中的措辞 仍然有点令人困惑 以下术语和命令都是编译过程的一部分 我想知道
  • 如何对嵌入 JSON 的 JSON 进行编码

    我有一个 JSON 字符串 其中一个字段是文本字段 此文本字段可以包含用户在 UI 中输入的文本 如果他们输入的文本是 JSON 文本 也许为了说明一些编码 我需要对其文本进行编码 以便它不会在发送的实际 JSON 结构中被解释为 JSON
  • 创建具有多个子文件夹链接的 Ajax 网站失败

    我正在尝试创建一个site那是loading全部都是通过 Ajax 的内容 假设该网站是www abc net I have abc net index html并且无论输入什么 URL 文件夹 文件 该文件都将始终被调用 abc net
  • RGDAL 无法安装

    我无法在 R 中安装 RGDAL 我使用的是 Ubuntu 12 04 configure error gdal config not found or not executable ERROR configuration failed f
  • 关于 REST 响应和 XMLElement

    我有下面一个需要在代码中创建的 REST 响应
  • Page_Load 未在 UserControl 中触发

    我在类库中用 C 创建了一个类 并将此控件添加到了 default aspx 但我的代码没有触发 page load 事件 这是代码 我究竟做错了什么 页面已加载 但页面上未显示标签 我已将控件正确添加到页面 没有任何错误 我已经在其中添加
  • 同步集合包装器工厂方法如何“拥有”传递给它的对象?

    Brian Goetz 在 Java Concurrency in Practice 一书中说 传递给类的构造函数和方法的对象是不拥有由类本身 是因为他们是从外面来的 班级无法控制他们吗 他接着说 如果方法被明确设计为转移传入对象的所有权
  • C++ 隐式参数的顺序: this 和返回的对象,哪个在先?

    在 C 中 成员函数最多可以有 2 个隐式参数 this指针和返回对象的地址 它们位于显式参数之前 但是 哪个先走 我特别对 Android NDK 基于 gcc ARM 中发生的情况感兴趣 Example class MyClass pu
  • Java Kafka adminClient 主题配置。配置值被覆盖

    在尝试使用 java kafka adminClient 配置新创建的 kafka 主题时 值被覆盖 我尝试使用控制台命令设置相同的主题配置 并且它有效 不幸的是 当我尝试通过 Java 代码时 一些值发生冲突并被覆盖 ConfigReso
  • Celery 在任何更改时自动重新加载

    当模块发生更改时 我可以使 celery 自动重新加载CELERY IMPORTS in settings py 我尝试让母模块检测子模块的变化 但它没有检测到子模块的变化 这让我明白检测不是由 celery 递归完成的 我在文档中搜索了它
  • 在android中使用内容提供程序获取联系号码

    我按照本教程学习了内容提供商的基础知识 http www vogella de articles AndroidSQLite article html http www vogella de articles AndroidSQLite a
  • 使用更改 django 模板中表单字段的名称属性

    我有表单字段 表单 项目 这将呈现为
  • 数据类型映射参数中的键只能使用列名

    我已经使用 dask read sql table 从 Oracle 数据库成功引入了一张表 但是 当我尝试引入另一个表时 出现此错误KeyError 只有列名可以用作数据类型映射参数中的键 我已经检查了我的连接字符串和架构 所有这些都很好
  • 转换为日期格式 dd/mm/yyyy

    我有以下日期 2010 04 19 18 31 27 我想将此日期转换为日 月 年 format 您可以使用正则表达式或一些手动字符串摆弄 但我想我更喜欢 date d m Y strtotime str
  • keras自定义损失纯python(没有keras后端)

    我目前正在编写一个用于图像压缩的自动编码器 我想使用用纯 python 编写的自定义损失函数 即不使用 keras 后端函数 这是否可能 如果可能的话 如何实现 如果可能的话 我将非常感谢您提供一个最小工作示例 MWE 请查看这个 MWE
  • AWS CloudFormation:在嵌套堆栈之间传递值

    更多 AWS 问题 好的 我们的想法是一个主模板调用所有嵌套堆栈 在此处的帮助下 我弄清楚了如何将参数从主服务器传递到嵌套堆栈 现在我试图弄清楚如何将值从嵌套堆栈传递到嵌套堆栈 我认为这应该通过出口和进口来完成 但我认为我的做法不太正确 我