簡體   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