Ассоциация диспетчера состояний SSM создается, даже если она уже есть у ресурса - PullRequest
0 голосов
/ 19 июня 2020

Я хочу создать сценарий, который проверяет экземпляр 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? или программный?

...