amazon-web-services - 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.
我还尝试通过 Web 界面运行命令,选择“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
解决方案
代理已预先安装,但实例(不仅仅是您的 IAM 用户)仍需要适当的角色才能与系统管理员进行通信。特别是配置对 Systems Manager 的访问的这一步。
默认情况下,Systems Manager 无权对您的实例执行操作。您必须使用 IAM 实例配置文件授予访问权限。实例配置文件是在启动时将 IAM 角色信息传递给 Amazon EC2 实例的容器。
您应该查看整个配置指南,并确保您已正确配置了所有必需的角色。
推荐阅读
- db2 - Db2:有没有办法将一个数据库模式表结构复制到另一个数据库模式中......?
- jquery - Hole li 用 jquery 按一潜排序
- appveyor - 指定 AppVeyor 创建的 ZIP 文件的名称
- android - 两个不同的应用程序未安装在单个设备中
- node.js - [Vue 警告]:创建钩子时出错:“错误:{“clientConfig”:{},“port”:443,“servicePath”:“vision.googleapis.com”,“scopes”:
- python - Python Zeep 缺少提供的 XML 属性
- html - Bootstrap Carousel:字幕不显示
- c# - 在 Visual Studio Build Framework 中无法选择 .NET Core 3.0
- c# - 在 .NET Core 应用程序中添加 OrchardCMS 时出现参考错误
- amazon-web-services - AWS EMR 集群的最佳 Airflow 架构是什么?