Невозможно удаленно (rdp) в EC2, запущенное с лямбды aws, используя boto3 :: run_instances - PullRequest
0 голосов
/ 11 июля 2019

Когда я запускаю экземпляр EC2 из определенного AMI через веб-консоль, он работает просто отлично, и я могу без проблем использовать RDP.

Но когда я запускаю другой (идентичный) экземпляр с помощью лямбды aws, я не могу RDP в экземпляр

Подробнее

Вот лямбда, используемая для запуска экземпляра

import boto3
REGION = 'ap-southeast-2' 
AMI = 'ami-08e9ad7d527e4e95c'
INSTANCE_TYPE = 't2.small' 
def lambda_handler(event, context):
    EC2 = boto3.client('ec2', region_name=REGION)
    init_script = """<powershell>
powershell "C:\\Users\\Administrator\\Desktop\\ScriptToRunDaily.ps1"
aws ec2 terminate-instances --instance-ids 'curl http://169.254.169.254/latest/meta-data/instance-id'
</powershell>"""
    instance = EC2.run_instances(
        ImageId=AMI,
        InstanceType=INSTANCE_TYPE,
        MinCount=1,
        MaxCount=1, 
        InstanceInitiatedShutdownBehavior='terminate', 
        UserData=init_script 
    )

Я вижу запуск экземпляра в консоли AWS. Все выглядит нормально, пока я не перехожу к удаленному входу, где приглашение «Инициирование удаленного сеанса» занимает ~ 15 секунд и возвращает

We couldn't connect to the remote PC. Make sure the PC is turned on and connected to the network, and that remote access is enabled.

Error code: 0x204

Примечание

Когда я нажимаю «попытаться подключиться к экземпляру через консоль AWS», он позволяет мне загрузить файл RDP, однако он не отображает опцию «Получить пароль», как это происходит, если я запускаю точно такой же AMI через консоль (в отличие от лямбды)

Я подозреваю, что мне может понадобиться связать экземпляр с парой ключей при запуске?

Также обратите внимание

Перед созданием этого конкретного AMI я вошел в систему и изменил пароль, поэтому мне действительно не нужно создавать его с использованием файла .pem.

1 Ответ

0 голосов
/ 12 июля 2019

Оказывается, мне нужно было добавить SecurityGroupIds

Обратите внимание, что это массив из 5 значений, а не одно значение, поэтому он указан как ['first', 'second', 'etc'], а не просто 'first'. Отсюда квадратные скобки вокруг ['launch-wizard-29'] ниже

Я также указал ключ.

Вот что сработало для меня

import boto3
REGION = 'ap-southeast-2' 
AMI = 'ami-08e9ad7d527e4e95c'
INSTANCE_TYPE = 't2.small' 
def lambda_handler(event, context):
    EC2 = boto3.client('ec2', region_name=REGION)
    init_script = """<powershell>
powershell "C:\\Users\\Administrator\\Desktop\\ScriptToRunDaily.ps1"
aws ec2 terminate-instances --instance-ids 'curl http://169.254.169.254/latest/meta-data/instance-id'
</powershell>"""
    instance = EC2.run_instances(
        ImageId=AMI,
        InstanceType=INSTANCE_TYPE,
        MinCount=1,
        MaxCount=1, 
        InstanceInitiatedShutdownBehavior='terminate', 
        UserData=init_script,
        KeyName='aws', # Name of a key - I used a key (i.e. pem file) that I used for other instances
        SecurityGroupIds=['launch-wizard-29'] # I copied this from another (running) instance
    )


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