3

我正忙于使用pyplates来创建 AWS CloudFormation JSON 模板。我对 python 编程比较陌生,我遇到了一个我不知道如何解决的问题。

CF 模板可以很快变得非常大,因此当我使用单一文件来存储所有资源等时也会发生同样的情况。我想将资源等分解为单独的文件以使事情更加模块化。

要生成 JSON,您必须通过 cli 运行以下命令:

cfpy_generate <pyplate> [<outfile>]

该文件是一个 python 文件,因此您应该(至少对我而言)能够在其中运行任何 Python 代码,但是当我尝试导入这些文件时出现错误。

例如:

pyplates_subfile.py:

from cfn_pyplates.core import Resource, Properties
from cfn_pyplates.functions import ref

subnet = Resource (
    'ExampleSubnet', 'AWS::EC2::Subnet', # name, resource type
    Properties (
        {
        'AvailabilityZone': 'eu-west-1b',
        'CidrBlock': '192.168.0.0/24',
        'Tags': {},
        'VpcId': ref('VPCID') ,
        }

    )

pyplates_main.py:

import pyplates_subfile

ctf = CloudFormationTemplate(description='Test Template')

ctf.parameters.add( Parameter(
    'VPCID', 'String',
    {
    'Default': VPCID,   
    'Description': 'The default VPC to use',
    })  
)

ctf.resources.add( pyplates_subfile.subnet )

当我尝试生成文件时,我得到以下信息:

$ cfn_py_generate pyplates_main.py 
Traceback (most recent call last):
  File "/Users/marcus/dev/virtenvs/cfn/bin/cfn_py_generate", line 9, in <module>
    load_entry_point('cfn-pyplates==0.3.0', 'console_scripts', 'cfn_py_generate')()
  File "/Users/marcus/dev/virtenvs/cfn/lib/python2.7/site-packages/cfn_pyplates/cli.py", line 120, in generate
    pyplate = _load_pyplate(args['<pyplate>'], options_mapping)
  File "/Users/marcus/dev/virtenvs/cfn/lib/python2.7/site-packages/cfn_pyplates/cli.py", line 40, in _load_pyplate
    exec pyplate in exec_namespace
  File "pyplates_main.py", line 1, in <module>
    import pyplates_subfile
ImportError: No module named pyplates_subfile

但是,我可以通过 python 控制台或可执行脚本很好地导入模块。

此外,我查看了源代码,看看是否有一种方法可以使用将为我生成输出的库来创建我自己的脚本,但是我似乎找不到这样做的方法。

任何帮助表示赞赏。

4

0 回答 0