EC2、CloudFormation(およびTroposphere)などに入ろうとしています。夜間に実行する単純なSelenium Gridから始めようとしています。現在、私たちは必要に応じて12個のセレン・ノード(それぞれがそれ自身のEC2インスタンスです)を回転させて使用しています。スタックは一度に数時間しか稼働しません。将来はもっと必要になる可能性が高いので、静的にノード数を設定するのではなく、Jenkinsが動的にノード数を増やすように設定しようとしています。Troposphereでn個のec2インスタンスを動的に作成する
for i in range(numNodes):
instance = ec2.Instance("Node{}".format(str(i)))
instance.ImageId = Ref(Image)
instance.UserData = Base64(Join("", userData))
instance.InstanceType = Ref(NodeSize)
instance.KeyName = Ref(SSHKey)
instance.SecurityGroups = [Ref("NodeSecurityGroup")]
instance.IamInstanceProfile = "SeleniumNode"
template.add_resource(instance)
のフルスタックトレース:
Traceback (most recent call last):
File "C:/dev/source/admin/scripts/troposphere/seleniumGrid.py", line 171, in <module>
print(template.to_json())
File "C:\Users\Sathed\AppData\Local\Programs\Python\Python35-32\lib\site-packages\troposphere\__init__.py", line 543, in to_json
sort_keys=sort_keys, separators=separators)
File "C:\Users\Sathed\AppData\Local\Programs\Python\Python35-32\lib\json\__init__.py", line 237, in dumps
**kw).encode(obj)
File "C:\Users\Sathed\AppData\Local\Programs\Python\Python35-32\lib\json\encoder.py", line 200, in encode
chunks = list(chunks)
File "C:\Users\Sathed\AppData\Local\Programs\Python\Python35-32\lib\json\encoder.py", line 429, in _iterencode
yield from _iterencode_dict(o, _current_indent_level)
File "C:\Users\Sathed\AppData\Local\Programs\Python\Python35-32\lib\json\encoder.py", line 403, in _iterencode_dict
yield from chunks
File "C:\Users\Sathed\AppData\Local\Programs\Python\Python35-32\lib\json\encoder.py", line 403, in _iterencode_dict
yield from chunks
File "C:\Users\Sathed\AppData\Local\Programs\Python\Python35-32\lib\json\encoder.py", line 436, in _iterencode
o = _default(o)
File "C:\Users\Sathed\AppData\Local\Programs\Python\Python35-32\lib\site-packages\troposphere\__init__.py", line 440, in default
return obj.JSONrepr()
File "C:\Users\Sathed\AppData\Local\Programs\Python\Python35-32\lib\site-packages\troposphere\__init__.py", line 223, in JSONrepr
"Resource %s required in type %s" % (k, rtype))
ValueError: Resource ImageId required in type AWS::EC2::Instance
特に例の束を見た後 - 今
は、私はそれがうまく動作するはずのように見えるループのためのシンプルなんです私も、コンストラクタにすべてを渡してみました
Image = template.add_parameter(Parameter(
"Image",
Type="AWS::EC2::Image::Id", # I even tried setting this to "String"
Description="AMI To use for all windows grid instances.",
Default="ami-c06b24a0"
))
:
私のイメージのパラメータは次のようになります。
for i in range(numNodes):
instance = ec2.Instance("Node{}".format(str(i)),
ImageId=Ref(Image),
UserData=Base64(Join("", userData)),
InstanceType=Ref(NodeSize),
KeyName=Ref(SSHKey),
SecurityGroups=[Ref("NodeSecurityGroup")],
DependsOn=["NodeSecurityGroup", "WindowsHub"],
IamInstanceProfile="SeleniumNode")
template.add_resource(instance)
でも、私はまだ同じエラーが発生しています。私はそれが何か愚かだと確信していますが、それはかなり刺激になっています。何かご意見は?
また、JSONテンプレートを印刷しようとするとエラーが発生します。ここ
print(template.to_json())
対流圏1.8.2
のPython 3.5.2
ああ、あなたがそれを理解してうれしい嬉しいです。私は実際には、問題の原因となっているオブジェクトのタイトル(そのタイトルが付いているもの)をその例外のポイントにする方法があるのであれば、今は疑問に思っています。私は見て、あなたのような言葉をありがとう:) – phobologic
私は先に進み、これらの問題のトラブルシューティングをより簡単にするためのPRを作成しました:https://github.com/cloudtools/troposphere/pull/597 – phobologic