繁体   English   中英

将 CloudFormation 模板 (yaml) 转换为 cdk python 代码

[英]Convert CloudFormation template (yaml) to cdk python code

我有这个按预期工作的模板。 有什么方法可以将其转换为 cdk python 代码吗?

https://github.com/shantanuo/cloudformation/blob/master/updated/api-to-sns-cf%20(1).yml

您无法将CloudFormation模板转换为CDK代码。 这样做也不是很有意义。 有点像要求将程序集或C转换为Python。

在对流层的情况下,这是有道理的,因为对流层与CloudFormation的关系为1:1。 CDK应该是更高级别的,就像Python与Assembly或C的关系一样。CDK确实具有CfnResource类,它们确实直接转换为CloudFormation,但这只是必要的基础层,而不是应该使用CDK的方式。 如果您想那样做,那么对流层会更好。

听起来似乎能够在过渡时期做到这一点很有意义,但我认为这比其价值更大。 无论如何,目前没有任何事情可以做。

编辑:对于Typescript,有cdk-dasm 仅限于Typescript,它将CloudFormation转换为Cfn资源。 从该页面引用:

通常,在使用AWS CDK时不建议使用这种方法,但是某些人可能会认为此方法非常有用,可以用来入门或迁移现有模板。

使用此方法意味着您将不得不使用低级资源(例如s3.CfnBucket而不是s3.Bucket)。 这意味着您将损失CDK价值的很大一部分,从而使使用AWS资源所需的许多样板和胶合逻辑抽象化。

使用低级资源没有错,因为它是一个有用的构建块。 是的,有高层的构造,但是像软件中的所有其他构造一样,有时您必须更深入地研究。 可惜的是,这种态度一直持续下去,因为不鼓励使用CDK的人中那些花了多年时间构建了很好的CloudFormation模板集合的人。

是的,这存在一些问题,这主要是由于一些糟糕的体系结构决策以及希望专注于新功能而不是构建功能层的原因,但是有可能并且您不应该劝阻您将模板转换为低级构造,然后根据用例要求将其重构为更高级别的构造。

就是说,我不会使用任何自动工具来进行此转换。 您实际上不会了解发生了什么,并且很可能会遇到一些不知道如何处理的问题。 挖掘,逐行转换,然后享受结果。

是的。 CDK 的cloudformation_include模块原生导入 CloudFormation 模板,将每个资源转换为L1 构造

在将 CloudFormation YAML(或 JSON)模板“转换”为 CDK 后,您可以读取和更新导入的资源:

from pathlib import Path
from typing import cast
from constructs import Construct
from aws_cdk import Stack, cloudformation_include as include, aws_apigateway as api

class CfnIncludeStack(Stack):
    def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None:
        super().__init__(scope, construct_id, **kwargs)

        converted = include.CfnInclude(
            self,
            "Converted",
            template_file=str(Path(__file__).with_name("template.yml")),
        )

        cfn_api = cast(api.CfnRestApi, converted.get_resource("ApiGatewayRestApi"))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM