AWS SSM describe-instance-information无法找到我的实例

时间:2018-05-26 18:28:05

标签: amazon-web-services boto3 aws-ssm

我正在使用boto3从python环境控制我在AWS上的EC2实例,使用ec2和ssm服务。我创建了一个IAM帐户,可以访问AmazonSSMFullAccess和AmazonEC2FullAccess策略。

ec2 = boto3.client(
    'ec2',
    region_name='eu-west-1',
    aws_access_key_id='…',
    aws_secret_access_key='…/…+…'
)

ssm = boto3.client(
    'ssm',
    region_name='eu-west-1',
    aws_access_key_id='…',
    aws_secret_access_key='…/…+…'
)

我跑了:

ec2.describe_instances()['Reservations']

Wich返回了我所有实例的列表。 但是当我跑步时:

ssm.describe_instance_information()

我得到一个空列表,但我在AWS Linux AMI上运行了至少一个实例(ami-ca0135b3),在最近的Ubuntu AMI上运行了六个实例。他们都在eu-west-1(爱尔兰)。 他们应该预先安装SSM代理:(https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-install-ssm-agent.html

我进入了AWS Linux实例,并尝试使用以下命令获取ssm的日志:

sudo tail -f /var/log/amazon/ssm/amazon-ssm-agent.log

但是当我运行我的python代码时没有任何反应。系统会不时显示一系列消息:

HealthCheck reporting agent health.
error when calling AWS APIs. error details - NoCredentialProviders: no valid providers in chain. Deprecated.

我还尝试通过网络界面运行命令,选择' AWS-RunRemoteScript'但下面没有显示任何实例。

我的目标是运行:

ssm.send_command(
        DocumentName="AWS-RunShellScript",
        Parameters={'commands': [command]},
        InstanceIds=[instance_id],
    )

但它给了我以下错误,可能是由于之前的问题。

botocore.errorfactory.InvalidInstanceId: An error occurred (InvalidInstanceId) when calling the SendCommand operation

1 个答案:

答案 0 :(得分:0)

代理已预先安装,但实例(不仅仅是您的IAM用户)仍需要适当的角色与系统管理员进行通信。特别是thisConfiguring Access to Systems Manager步骤。

  

默认情况下,Systems Manager无权执行操作   在你的实例上。您必须使用IAM实例授予访问权限   轮廓。实例配置文件是传递IAM角色的容器   发布时向Amazon EC2实例提供的信息。

您应该查看整个配置指南,并确保已正确配置所有必需的角色。

相关问题