Я использую boto3 для управления экземплярами EC2 на AWS из среды python, используя сервисы 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']
, который возвратил список всех моих экземпляров.Но когда я запускаю:
ssm.describe_instance_information()
, я получаю пустой список, хотя у меня есть хотя бы один экземпляр, работающий на AWS Linux AMI (ami-ca0135b3), и шесть других на последних Ubuntu AMI.Они все в ЕС-западе-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