Как передать сопоставления устройств и спецификации тегов в Boto3 Python run_instances - PullRequest
0 голосов
/ 08 октября 2018

Я пытаюсь создать экземпляр EC2 с использованием приведенного ниже кода:

response = EC2.run_instances(
#    BlockDeviceMappings=deviceMappings,
    BlockDeviceMappings=[
{
    "DeviceName": "/dev/xvdb",
    "VirtualName": "swap",
    "Ebs": {
        "DeleteOnTermination": True,
        "Encrypted": True,
        "VolumeType": "standard",
        "VolumeSize": 16
    },
},
],
    ImageId=amiId,
    MaxCount=1,
    MinCount=1,
    InstanceType=instance_class,
    InstanceInitiatedShutdownBehavior='stop',
    SubnetId=subnet_id,
#    SecurityGroupIds=security_groups,
    SecurityGroupIds=['sg-8c2bb6f5','sg-edc49b89'],
#    TagSpecifications=tagSpecs
    TagSpecifications=[
    {
        'ResourceType':'instance',
        'Tags':[
            {
                'Key':'owner',
                'Value':'Sanjeev'
            },
            {
                'Key':'Name',
                'Value':'SanjeevTEST'
            },
            {
                'Key':'Environment',
                'Value':'PreProduction'
            },
        ]
    },
]
)

Код работает, как и ожидалось, когда BlockDeviceMappings, SecurityGroupIds и TagSpecifications предоставляются в строке, как указано выше.Но когда Но, когда я читаю их из файла в переменную и передаю переменную, команда завершается с ошибкой ниже:

botocore.exceptions.ParamValidationError: Parameter validation failed:
Invalid type for parameter TagSpecifications, value: [
    {
        'ResourceType':'instance',
        'Tags':[
            {
                'Key':'owner',
                'Value':'Sanjeev'
            },
            {
                'Key':'Name',
                'Value':'SanjeevTEST'
            },
            {
                'Key':'Environment',
                'Value':'PreProduction'
            },
        ]
    },
]
, type: <type 'str'>, valid types: <type 'list'>, <type 'tuple'>

Я храню сопоставления устройств, группы безопасности и теги вфайл, поскольку мы должны создать несколько экземпляров и не хотим редактировать код всякий раз, когда нам нужно создать новый экземпляр.

Как мне устранить эту ошибку?Ваша помощь будет принята с благодарностью.

Спасибо,

Санджив

1 Ответ

0 голосов
/ 09 октября 2018

Похоже, что ваш объект тегов обрабатывается как строка , а не как объект.Используйте это, чтобы преобразовать строку в словарь Python:

TagSpecifications = json.loads(string_from_file)

См .: Как использовать JSON с Python

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...