我正在运行以下脚本:

from __future__ import print_function

import paramiko
import boto3


#print('Loading function')

paramiko.util.log_to_file("/tmp/Dawny.log")

# List of EC2 variables
region = 'us-east-1'
image = 'ami-<>'
keyname = '<>.pem'

ec2 = boto3.resource('ec2')


instances = ec2.create_instances(ImageId=image, MinCount=1, MaxCount=1, InstanceType = 't2.micro', KeyName=keyname)

instance = instances[0]
instance.wait_until_running()

instance.load()

print(instance.public_dns_name)



def lambda_handler(event, context):
    instances = ec2.create_instances(ImageId=image, MinCount=1, MaxCount=1, InstanceType = 't2.micro', KeyName=keyname)

    instance = instances[0]
    instance.wait_until_running()

    instance.load()

    print(instance.public_dns_name)


运行它时,出现此错误

botocore.exceptions.ClientError: An error occurred (InvalidKeyPair.NotFound) when calling the RunInstances operation: The key pair '<>.pem' does not exist


即使将完整路径添加到密钥对中,boto3也会给我同样的错误。
另外,我也尝试过此操作:https://stackoverflow.com/a/34410564/4993513

不过,仍然无法正常工作。

最佳答案

KeyName中的create_instances()自变量是指在AWS中创建密钥对时提供给KeyPair的名称。

该名称通常为“ KeyName .pem”。传递不带.pem扩展名的字符串。 KeyName中的create_instances()参数仅需要密钥对的名称,而不需要实际的密钥文件。

例如:如果密钥文件是myinstance.pem,则除非密钥文件已重命名,否则KeyName将是myinstance。您将能够从控制台查看您拥有的所有KeyPair(也可以使用cli和api列出)。

10-04 15:01