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 コンソールまたは実行可能スクリプトでモジュールを正常にインポートできます。
さらに、ソースコードを調べて、出力を生成するライブラリを使用して独自のスクリプトを作成する方法があるかどうかを確認しましたが、これを行う方法が見つからないようです。
どんな助けでも大歓迎です。