Рубрики
Uncategorized

Amazon Simple Systems Manager (SSM)

AWS Systems Manager — это сборник возможностей, которые помогут вам автоматизировать управление … Помечено с AWS, DEVOPS, SSM, EC2.

AWS Systems Manager — это сборник возможностей, которые помогут вам автоматизировать задачи управления. Этот пост описывает, как отправить команду на экземпляр EC2 с помощью Python Boto3

1. Менеджер систем предупрежден

1.1 Установите агент SSM

  • Агент SSM установлен по умолчанию, на следующих экземплярах EC2 и изображения Amazon Machine (AMIS):

    • Amazon Linux.
    • Amazon Linux 2.
    • Amazon Linux 2 ECS оптимизирован AMIS
    • Ubuntu Server 16.04, 18.04 и 20.04
  • Есть ручной способ установить его Вручную установите агент SSM на экземпляры EC2 для Linux

  • Как проверить, установлен ли целевой экземпляр SSM-агент

dev:/home/ubuntu# systemctl status snap.amazon-ssm-agent.amazon-ssm-agent.service
● snap.amazon-ssm-agent.amazon-ssm-agent.service - Service for snap application amazon-ssm-agent.amazon-ssm-agent
   Loaded: loaded (/etc/systemd/system/snap.amazon-ssm-agent.amazon-ssm-agent.service; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2020-11-19 20:47:31 UTC; 4 weeks 1 days ago
 Main PID: 27709 (amazon-ssm-agen)
    Tasks: 23 (limit: 4915)
   CGroup: /system.slice/snap.amazon-ssm-agent.amazon-ssm-agent.service
           ├─27709 /snap/amazon-ssm-agent/2996/amazon-ssm-agent
           └─27837 /snap/amazon-ssm-agent/2996/ssm-agent-worker

1.2 Настройка IAM ROTE, чтобы пользователь/клиент имеет разрешение SSM

        {
            "Effect": "Allow",
            "Action": [
                "ssm:*"
            ],
            "Resource": [
                "arn:aws:ec2:us-east-1:123456789012:instance/*"
            ]
        }

2. Использование BOTO3 для отправки команды SSM

  • Код, использующий значение ключа тегов, чтобы получить динамические экземпляры цели, поэтому создайте тег для целевого экземпляра

  • ssm-send-cmd.py

import boto3
import time


def send_cmd(region):
    """ Use describe instance information to get instance id base on region """
    ssm_filter = [{'Key': 'tag:SSM', 'Values': ['ssm-cmd']}]
    ssm = boto3.client('ssm', region_name=region)
    instance_info = ssm.describe_instance_information(Filters=ssm_filter).get('InstanceInformationList', {})[0]
    instance_id = instance_info.get('InstanceId', '')
    cmd1 = "echo 'Start running services'"
    cmd2 = 'whoami'
    response = ssm.send_command(InstanceIds=[instance_id],
                                DocumentName='AWS-RunShellScript',
                                Parameters={"commands": [cmd1, cmd2]}
                                )
    command_id = response.get('Command', {}).get("CommandId", None)
    while True:
        """ Wait for SSM response """
        response = ssm.list_command_invocations(CommandId=command_id, Details=True)
        """ If the command hasn't started to run yet, keep waiting """
        if len(response['CommandInvocations']) == 0:
            time.sleep(1)
            continue
        invocation = response['CommandInvocations'][0]
        if invocation['Status'] not in ('Pending', 'InProgress', 'Cancelling'):
            break
        time.sleep(1)
    command_plugin = invocation['CommandPlugins'][-1]
    output = command_plugin['Output']
    print(f"Complete running, output: {output}")


send_cmd('us-east-1')
  • Бегать
~/⚡ $ python ssm-send-cmd.py
Complete running, output: Start running services
root

Ref: https://github.com/vumdao/aws-ssm/tree/master.

Оригинал: «https://dev.to/vumdao/amazon-simple-systems-manager-ssm-2pb0»