【发布时间】:2021-10-13 21:14:39
【问题描述】:
我有以下问题:
我创建了一个堆栈,在创建资源后(特别是带有 Amazon MQ 的 rabbitmq 代理)我想配置一些不能用 cdk 完成的东西,而必须通过 REST api 调用来完成。
问题是我只想在代理启动并运行并且rabbitmq_url被解析后仅在部署状态下进行其余的api调用。
我有类似以下的东西,但没有按预期工作:
# Doc Ref: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-amazonmq-broker.html
rabbitmq_broker = amazonmq. \
CfnBroker(self, "RabbitMQBroker",
broker_name=f"{os.getenv('ENVIRONMENT_NAME')}-rabbitmq",
engine_type="RABBITMQ",
engine_version="3.8.17",
deployment_mode="SINGLE_INSTANCE",
host_instance_type="mq.t3.micro",
subnet_ids=[[public_subnet.subnet_id for public_subnet in vpc.public_subnets][0]],
logs=amazonmq.CfnBroker.LogListProperty(general=True),
# This means we can access rabbitmq from internet without going into the VPC
publicly_accessible=True,
users=[amazonmq.CfnBroker.UserProperty(username=os.getenv('RABBITMQ_USER'),
password=os.getenv('RABBITMQ_PASSWORD'))],
auto_minor_version_upgrade=True)
rabbitmq_url = f"{rabbitmq_broker.ref}.mq.{os.getenv('CDK_DEFAULT_REGION')}.amazonaws.com"
...
# Only executed when the token is resolved in the deploy stage
if not core.Token.is_unresolved(rabbitmq_broker.ref):
# Create virtual host 'kmhbackend' via RabbitMQ Management HTTP API
response = requests.post(f"https://{rabbitmq_url}:15671/api/vhosts/kmhbackend",
auth=(os.getenv('RABBITMQ_USER'), os.getenv('RABBITMQ_PASSWORD')),
headers={'content-type': 'application/json'})
if response.status_code != requests.codes.get('created'):
Log.error("Warning: The virtual host has not been created")
print("Warning: The virtual host has not been created")
如何识别 cdk 应用何时在部署状态下运行?
我不想只使用上下文变量来识别它。
提前致谢
【问题讨论】:
-
你可以一直等待你的堆栈完成它的整个部署,然后执行 API 调用?
-
@DebdutGoswami,你是什么意思等待整个部署完成,先执行 cdk deploy 然后执行一些其他脚本来配置剩下的东西?这样会有点松散 Iac 的感觉,因为我需要在每次部署后手动执行或创建一个 lambda 来监听事件,但这样做会有点痛苦
-
你是绝对正确的,但我只是提出了一种解决方法,因为我无法在 cdk 文档中找到任何类似的东西。也许我只是在寻找错误的关键字。您可以改为在他们的 github 存储库中提出功能请求。
标签: amazon-web-services aws-cdk infrastructure-as-code