- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在将我们的基础架构代码从Terraform迁移到AWS cdk。而且我正在尝试找到一种最佳方法来管理具有多个要部署的堆栈的多个环境。如果我按照文档中的建议进行操作,则必须为多个环境定义多个堆栈,这可能会造成混淆。例如。
const app = new cdk.App();
new DevStack1(app, 'dev-stack-1', settings.dev)
new DevStack2(app, 'dev-stack-2', settings.dev)
.
.
new ProdStack1(app, 'prod-stack-1', settings.prod)
new ProdStack2(app, 'prod-stack-2', settings.prod)
.
.
最佳答案
编辑:,因为此答案具有合理数量的 View ,所以我想对其进行更新以反射(reflect)一种更好的,更CDK的 native 方法。我将在下面保留原始答案,因为它可能对某人更好。
CDK参数可以直接存储在cdk.json
键下的context
中,并可以使用ConstructNode.try_get_context(param_name)
在应用程序内部进行检索。
参阅官方文件:https://docs.aws.amazon.com/cdk/latest/guide/get_context_var.html
因此,这是cdk.json
的示例,它针对不同的env使用不同的参数:
{
"app": "python3 app.py",
"context": {
"dev": {
"vpc": {
"vpc_id": "blabla"
}
},
"stage": {
"vpc": {
"vpc_id": "bleble"
}
}
}
现在,您还可以通过CLI键
--context env_name=dev
提供上下文参数,并在代码中使用其值来获取相关设置。
Stack
,
App
,
NestedStack
)都具有
node
属性,因此您可以从应用程序中的任何位置访问上下文。
self.try_get_context("dev.vpc.vpc_id")
,您需要通过self.try_get_context("dev")
检索顶级 key ,并自行解决。bool
参数,并尝试使用CLI键--context key=False
覆盖它们,则这些参数将变成str
,如果您使用以下常识语法,则很容易陷入陷阱:if self.try_get_context("deploy_vpc"):
MyVPC(app, "my new vpc")
由于“假”作为非空字符串被评估为
True
,因此您将无法获得期望的结果。
app.py
主文件和
cdk/cdk_stack.py
文件以及堆栈说明。
app.py
中:
from ruamel.yaml import YAML
...
from cdk.cdk_stack import MyStack
def load_config() -> dict:
"""
Import settings from YAML config
:return: dict with configuration items
"""
# This variable should always be set
# CDK doesn't work well with argparse
config_path = os.getenv("CONFIG_PATH")
if not config_path:
raise RuntimeError("You need to supply config file path with CONFIG_PATH env variable")
# We don't verify config content, let fail in case something is missing
with open(config_path) as config_file:
config = YAML().load(config_file.read())
return config
def init_app() -> core.App:
"""
Initiates CDK main_app for deployment
:return: main_app
"""
main_app = core.App()
config = load_config()
# Account ID and region have to be explicitly set in order to import existing resources
MyStack(
main_app,
"my stack",
env={
'account': config["account_id"],
'region': config["region"]
},
config=config
)
# Tags are applied to all tagable resources in the stack
for key, value in config["tags"].items():
core.Tag.add(scope=main_app, key=key, value=value)
return main_app
if __name__ == '__main__':
app = init_app()
app.synth()
然后在
cdk/cdk_stack.py
中:
class MyStack(core.Stack):
"""
Describes CF resources
"""
def __init__(self, scope: core.Construct, id: str, **kwargs) -> None:
# Pop the config object first, since parent object doesn't expect it and will crash
config = kwargs.pop("config")
super().__init__(scope, id, **kwargs)
...
关于typescript - 如何使用AWS CDK管理多个环境?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61515974/
我正在尝试引用几个子网来创建 ec2 实例,但我有点卡住了。 假设我有这个: const vpc = new Vpc(this, 'gwc-vpc', { cidr: "10.20.
我们正在使用 AWS CDK 来创建我们的无服务器 REST API。但是,有大量端点,有时我们必须销毁和重新部署我们的堆栈。为了防止 REST API URL 随每次部署而更改,我计划在一个堆栈中创
我看到了各种使用 AWS CDK 的示例,其中一些使用 aws-cdk-lib,另一些使用 @aws-cdk/core。这些之间有什么区别,什么时候应该使用一个或另一个? 最佳答案 aws-cdk-l
我看到了各种使用 AWS CDK 的示例,其中一些使用 aws-cdk-lib,另一些使用 @aws-cdk/core。这些之间有什么区别,什么时候应该使用一个或另一个? 最佳答案 aws-cdk-l
我是 CDK 的新手,需要了解高级构造与低级构造之间的区别。谁能用简单的话解释一下:) 热烈的问候。 最佳答案 CDK 旨在让任何人都能轻松创建具有预配置默认值的组件。这意味着您可以(使用更高级别的构
我不想使用我的默认 aws 配置文件和帐户进行 cdk 开发 所以我创建了一个新帐户和一个新的个人资料 cdkprof使用 aws configure --profile cdkprof . 我已经在
我有一个在 cdk.context.json 中存储一些键值的用例,但是如果 cdk.context.json 不存在或者它不包含我希望 CDK 回退到其他代码来发现的键值(value)。 例如,假设
我创建了一个将部署在多个区域的 CDK 堆栈。其中一种构造只能部署在一个地区。在 Cloudformation 中,我只是向资源添加一个条件,但我还没有找到一种方法来对 CDK 构造做类似的事情。 可
以下CDK代码 const queue = new sqs.Queue(this, 'my-sqs-queue', { visibilityTimeout: cdk.Duratio
Use an AWS CloudFormation Parameter AWS CDK 的部分提到了如何自定义您的 AWS CloudFormation 模板。指的是云形成模板 .我想将参数添加到我的
@aws-cdk/pipelines 的文档似乎表明可以使用 codePipeline Prop 将 CDK 管道添加到现有的@aws-cdk/aws-codepipeline/Pipeline:ht
我遇到了一个问题,我们想要确保在 CloudFormation 资源的命名中遵循一些约定。这个想法是我们使用 CDK Aspects来处理资源。一个简单的例子: export class Bucket
我正在寻找一种方法来指定我的项目中堆栈的部署顺序。 我知道我可以添加依赖项,但是这些堆栈不相互依赖,我可能想稍后删除一些。 我有一个服务框架,每个其他堆栈(例如 rds)都需要这些服务框架。这些都是在
是否可以使用 AWS CDK CLI 以某种方式获取另一个堆栈所依赖的堆栈列表?例如,给定一个类似于以下内容的堆栈列表: const app = new App(); const alphaStack
我正在使用 CDK Python API 定义 Glue 爬虫,但是,CDK 生成的模板在爬虫资源中包含空的“目标” block 。 我一直没能找到一个例子来模仿。我试过改变目标对象的定义,但对象定义
我们正在开发一个多账户 CDK 应用程序,并在 CodeBuild 上进行持续部署。我们知道 CDK authentication issues所以我们使用 $ aws sts assume-role
aws-cdk 允许您合成一个堆栈 - 这会产生许多文件 - 包括 .template.json 文件。 可以在没有 aws-cdk 工具的情况下部署这个 .template.json 文件吗?还是设
是否可以使用 aws-cdk 部署到 localstack? 想过从无服务器切换到 cdk,但除了 aws SAM 之外找不到任何其他本地测试选项。 最佳答案 我现在正在应对同样的挑战。我得到的方法是
我的 CDK 堆栈包含太多参数(子网 ID、API URL),无法在命令行中指定。所以我想将它们保存在单独的文件中,例如 dev.properties 或 prod.json。来自 cdk.json
我的 CDK 堆栈包含太多参数(子网 ID、API URL),无法在命令行中指定。所以我想将它们保存在单独的文件中,例如 dev.properties 或 prod.json。来自 cdk.json
我是一名优秀的程序员,十分优秀!