if __name__ == "__main__":
    account_id = boto3.resource('iam').CurrentUser().arn.split(':')[4]

    # Define Argument Parser
    parser = argparse.ArgumentParser()
    parser.add_argument('-i', '--iid', required=True, help='instance id')
    parser.add_argument('-g', '--sgid', required=False, help='security group id')
    parser.add_argument('-r', '--region', required=False, help='region')
    parser.add_argument('-b', '--bucket', required=False, help='bucket')
    parser.add_argument('-t', '--topic', required=False, help='topic')
   
    #разбираю аргумеенты командной строки
    args = parser.parse_args()

    AREGION = 'us-west-2'
    if args.region:
        AREGION=args.region

    instance_id = args.iid
    #проверяю существует ли вообще инстанс с данным ИД
    instanceid_is_valid(instance_id)

    ec2Client = boto3.client('ec2', region_name=AREGION)
    asgClient = boto3.client('autoscaling', region_name=AREGION)
    ssmClient = boto3.client('ssm', region_name=AREGION)
    
    #заливать данные в S3-бакет будем с шифрованием ключем - выбираю ключек
    kmsClient = boto3.client('kms',region_name=AREGION)
    kmskeys = kmsClient.list_keys()
    for cmk in kmskeys["Keys"]:
        key_info = kmsClient.describe_key(KeyId=cmk["KeyId"])
        if key_info["KeyMetadata"]["Description"] == 'test':
            KEYID = cmk["KeyId"]
            print(KEYID)
            break
    
    #если название S3-бакета не передано в аргументах, сформируем название сами согласно правилам, принятым в компании
    BUCKET_NAME = "s3-access-logs."+account_id+"-"+AREGION
    if args.bucket:
        BUCKET_NAME = args.bucket

    #для отправки оповещений будем использовать SNS-топик
    SNS_TOPIC = "arn:aws:sns:"+AREGION+":"+account_id+":slack-events"
    if args.topic:
        SNS_TOPIC = args.topic

    try:
        instance_describe_metadata = ec2Client.describe_instances(
            InstanceIds=[
                instance_id
            ],
        )
    except ValueError as e:
        message = 'Unable to get instance metadata' + str(e['ErrorMessage'])
    VPC_ID = instance_describe_metadata['Reservations'][0]['Instances'][0]['VpcId']
   
    isolateSG = args.sgid

    #изолируем инстанс в карантинную группу
    isolate_instance(ec2Client, instance_id, VPC_ID, isolateSG)

    #делаем скриншот консоли
    console_screenshot(ec2Client, instance_id)
    
    #делаем снапшот дисков
    snapshot(ec2Client, instance_id)

    #включаем защиту от удаления, если она еще не включена
    try:
        set_termination_protection(ec2Client, instance_id)
    except:
        pass
    
    #ставим теги
    set_tags(ec2Client, instance_id)

    message = 'Security Response mechanism complete for instance: ' + instance_id
    print(message)