Я хочу создать сценарий, который проверяет экземпляр EC2, если он имеет существующую связь с документом SSM AWS -GatherSoftwareInventory, если нет, создайте его. Цель состоит в том, чтобы установить связь для каждого экземпляра, чтобы мы могли собирать информацию об установленных приложениях и запущенных службах. Итак, вот сценарий python, который я сделал для этого: Чтобы запустить сценарий, я передаю идентификатор экземпляра в качестве аргумента:
import boto3
import argparse
session = boto3.session.Session(profile_name='production')
ssm = session.client('ssm')
argparser = argparse.ArgumentParser()
argparser.add_argument("--instance_id", help="instance ID to create the association for", dest='instance_id')
args = argparser.parse_args()
#First, make sure there is no old association to this instance
filter = [{'key' :'Name','value': 'AWS-GatherSoftwareInventory'}]
list_instances = []
response = ssm.list_associations(AssociationFilterList=filter).get('Associations')
for association in response:
for target in association['Targets']:
list_instances.append(target['Values'][0])
if args.instance_id not in list_instances:
# Create association for this instance
response = ssm.create_association(Name='AWS-GatherSoftwareInventory',
Targets=[{'Key':'InstanceIds','Values':[args.instance_id]}],
ScheduleExpression="cron(0 0 * * ? *)",
SyncCompliance='AUTO')
print("Association for instance ID: "+args.instance_id+" is created with the association ID: "+response.get('AssociationDescription')['AssociationId'])
else:
response = ssm.list_associations(AssociationFilterList=filter).get('Associations')
print("this instance "+args.instance_id+" has already an association.")
Итак, что я делаю здесь, я перечисляю все ассоциации и сохраняю все цели идентификаторы экземпляров в списке и проверьте, есть ли мой экземпляр в этом списке, если нет, создайте для него ассоциацию. Моя проблема в том, что даже если ассоциация уже существует, сценарий продолжает и воссоздает новую, что приводит к сбою, потому что один экземпляр может иметь только одну единственную ассоциацию. В чем проблема? Проблема с SSM API? или программный?