まず、boto3.resource( "ec2")を使用することはできません。 boto3.resourceは特定のリソースに関連する上位層です。したがって、以下は特定のインスタンスのリソースを既に返します。コレクションの文書が常にだからあなたのコードでは、あなただけのリソースコレクションに直接それを参照するこの
# resource will inherit associate instances/services resource.
tag = resource.create_tags(
DryRun=True|False,
Tags=[
{
'Key': 'string',
'Value': 'string'
},
]
)
次のようになります。
for instance in instances:
instance.create_tags(Tags={'TagName': 'TagValue'})
次に、the documentationに続く、タグ形式です。あなたは)(boto3.client、インクルードが一方
response = client.create_tags(
DryRun=True|False,
Resources=[
'string',
],
Tags=[
{
'Key': 'string',
'Value': 'string'
},
]
)
タグ辞書を作成するフィルタの形式が正しく取得ではなく、明示的なリソースのIDを必要とする低レベルのクライアントです。リソースを使用する
import boto3
ec2 = boto3.client("ec2")
reservations = ec2.describe_instances(
Filters=[{'Name': 'instance-state-name',
'Values': ['running']}])["Reservations"]
mytags = [{
"Key" : "TagName",
"Value" : "TagValue"
},
{
"Key" : "APP",
"Value" : "webapp"
},
{
"Key" : "Team",
"Value" : "xteam"
}]
for reservation in reservations :
for each_instance in reservation["Instances"]:
ec2.create_tags(
Resources = [each_instance["InstanceId"] ],
Tags= mytags
)
(更新) 理由は、ラッパーを使用すると、すべてのリソースのタグを作成しましょう以下、すなわち、ユニバーサルオブジェクトのコードの再利用です。
def make_resource_tag(resource , tags_dictionary):
response = resource.create_tags(
Tags = tags_dictionary)
第4行 'reservations = ...'は有効なpythonではありません。 –
@ BrunoBronosky:ありがとう。一定。 :-) – mootmoot
以前の状態であっても、実際これは非常に役に立ちました。私はすべてのためにクライアントパターンを使用していた。私はこれに遭遇した直後に、クライアントを持っていないVolumeウェイターを使用する必要があったため、リソースを使用するように切り替えました。リソースのように低レベルで、クライアントは抽象的だと感じています。 –