Я составляю список инстансов в Amazon EC2. Мой сценарий отлично работает, помещая список в файл CSV и отправляя его вам.
Но теперь я хочу вставить записи в MongoDB, чтобы можно было отслеживать различия в среде.
У меня есть функция для вставки записей в MongoDB, которая выглядит так:
def insert_col(instance_col,mydict):
x = instance_col.insert_one(mydict)
print(f"MongoDB record inserted: {x.inserted_id}")
return x
Словарь с именем instance_col, который я пытаюсь вставить в БД, выглядит следующим образом:
{'AWS Account': 'jf-master-pd', 'Account Number': 'xxxxxxxxx', 'Name': 'usawsweb010', 'Instance ID': 'i-0871d82fb5c4e268b', 'AMI ID': 'ami-006219aba10688d0b', 'Volumes': 'vol-047b2ca3dd93b9021, vol-02ea0a81271a00b0b, vol-00abcef2eee9f19de, vol-09222810b7fc52265, vol-03c9a84ee93f81edc', 'Private IP': '172.31.75.47', 'Public IP': 'x.xxx.xxx.xxx', 'Private DNS': 'ip-172-31-75-47.ec2.internal', 'Availability Zone': 'us-east-1f', 'VPC ID': 'vpc-68b1ff12', 'Type': 't2.micro', 'Key Pair Name': 'timd', 'State': 'running', 'Launch Date': 'July 11 2020'}
Если я попытаюсь использовать функцию insert_col, она вставит первую запись, а затем выдаст исключение, в котором говорится:
MongoDB record inserted: 5f0a46f267a8132e4b31e83f
An exception has occurred: dict contains fields not in fieldnames: '_id'
Я не знаю, почему он жалуется на мой dict, не содержащий имени поля с именем '_id' ПОСЛЕ запись вставлена. После этого программа перестает работать.
Это полная трассировка:
Traceback (most recent call last):
File ".\aws_ec2_list_instances.py", line 768, in <module>
main()
File ".\aws_ec2_list_instances.py", line 632, in main
output_file = list_instances(aws_account,aws_account_number, interactive, regions, fieldnames, show_details, instance_col)
File ".\aws_ec2_list_instances.py", line 249, in list_instances
writer.writerow(instance_dict)
File "C:\Users\tdun0002\AppData\Local\Programs\Python\Python38-32\lib\csv.py", line 154, in writerow
return self.writer.writerow(self._dict_to_list(rowdict))
File "C:\Users\tdun0002\AppData\Local\Programs\Python\Python38-32\lib\csv.py", line 149, in _dict_to_list
raise ValueError("dict contains fields not in fieldnames: "
ValueError: dict contains fields not in fieldnames: '_id'
Когда я вызываю функцию, я вызываю ее так: insert_col(instance_col,instance_dict)
. Если я прокомментирую это, программа продолжает развиваться и работает отлично, как до того, как я начал обезглавливать MongoDB.
У меня 10 серверов в этой среде, которые я пытаюсь вставить в MongoDB.
Почему он это делает и как мне вставить эти записи в MongoDB?