Автоматизация сетевых настроек, связанных с интерфейсом на Red Hat Ami-7.5 - PullRequest
0 голосов
/ 29 августа 2018

У меня есть созданный ENI, и мне нужно присоединить его в качестве вторичного ENI к моему экземпляру EC2 динамически, используя формирование облака. Поскольку я использую red hat AMI, мне нужно пойти дальше и вручную настроить RHEL, который включает в себя шаги, упомянутые в посте ниже.

Ручная настройка вторичного сетевого интерфейса Elastic на Red Hat ami- 7.5

Может кто-нибудь сказать мне, как автоматизировать все это с помощью формирования облаков. Есть ли способ сделать все это, используя пользовательские данные в шаблоне формирования облаков? Кроме того, мне нужно убедиться, что конфигурации остаются, даже если я перезагружаю свой экземпляр ec2 (в настоящее время конфигурации удаляются после перезагрузки.)

Ответы [ 2 ]

0 голосов
/ 22 октября 2018

Еще нужно выяснить соединение вторичного ENI из Linux, но это был скрипт Python, который я написал, чтобы экземпляр нашел соответствующий ENI и прикрепил его к себе. По сути, скрипт работает, принимая предварительно определенный тег именования для ENI и Instance, а затем соединяет их вместе.

Предварительные требования для настройки:

  • Роль IAM в экземпляре для предоставления доступа к корзине S3, в которой хранится скрипт
  • Установите pip и интерфейс командной строки AWS в разделе пользовательских данных

curl -O https://bootstrap.pypa.io/get-pip.py python get-pip.py pip install awscli --upgrade aws configure set default.region YOUR_REGION_HERE pip install boto3 sleep 180

Примечание к команде sleep 180: у меня есть своп ENI на экземпляре в группе автоматического масштабирования. Это дает дополнительные 3 минуты для другого экземпляра, чтобы выключить и сбросить ENI, чтобы новый мог его поднять. Может или не может быть необходимым для вашего случая использования.

  • Команда CLI AWS в пользовательских данных для загрузки файла в экземпляр (пример ниже)

aws s3api get-object --bucket YOURBUCKETNAME --key NAMEOFOBJECT.py /home/ec2-user/NAMEOFOBJECT.py

# coding: utf-8
import boto3
import sys
import time
client = boto3.client('ec2')


# Get the ENI ID

eni = client.describe_network_interfaces(
    Filters=[
        {
            'Name': 'tag:Name',
            'Values': ['Put the name of your ENI tag here']
        },
    ]
)

eni_id = eni['NetworkInterfaces'][0]['NetworkInterfaceId']

# Get ENI status

eni_status = eni['NetworkInterfaces'][0]['Status']
print('Current Status: {}\n'.format(eni_status))

# Detach if in use

if eni_status == 'in-use':
    eni_attach_id = eni['NetworkInterfaces'][0]['Attachment']['AttachmentId']
    eni_detach = client.detach_network_interface(
    AttachmentId=eni_attach_id,
    DryRun=False,
    Force=False
    )
    print(eni_detach)

# Wait until ENI is available

print('start\n-----')

while eni_status != 'available':
    print('checking...')

    eni_state = client.describe_network_interfaces(
        Filters=[
            {
                'Name': 'tag:Name',
                'Values': ['Put the name of your ENI tag here']
            },
        ]
    )

    eni_status = eni_state['NetworkInterfaces'][0]['Status']
    print('ENI is currently: ' + eni_status + '\n')
    if eni_status != 'available':
        time.sleep(10)

print('end')

# Get the instance ID

instance = client.describe_instances(
    Filters=[
        {
            'Name': 'tag:Name',
            'Values': ['Put the tag name of your instance here']
        },
        {
            'Name': 'instance-state-name',
            'Values': ['running']
        }
    ]
)

instance_id = instance['Reservations'][0]['Instances'][0]['InstanceId']

# Attach the ENI

response = client.attach_network_interface(
    DeviceIndex=1,
    DryRun=False,
    InstanceId=instance_id,
    NetworkInterfaceId=eni_id
)
0 голосов
/ 31 августа 2018

Хотя это не полная автоматизация, но вы можете сделать ниже, чтобы убедиться, что ENI появляется после каждой перезагрузки вашего экземпляра ec2 (только для экземпляров RHEL). Если у кого-то есть предложения, пожалуйста, поделитесь.

vi /etc/systemd/system/create.service

Добавить содержание ниже

[Unit]
Description=XYZ
After=network.target

[Service]
ExecStart=/usr/local/bin/my.sh

[Install]
WantedBy=multi-user.target

Изменить разрешения и включить услугу

chmod a+x /etc/systemd/system/create.service
systemctl enable /etc/systemd/system/create.service

Ниже скрипт оболочки выполняет настройку на rhel для ENI

vi /usr/local/bin/my.sh

добавить ниже содержание

#!/bin/bash
my_eth1=`curl http://169.254.169.254/latest/meta-data/network/interfaces/macs/0e:3f:96:77:bb:f8/local-ipv4s/`
echo "this is the value--" $my_eth1 "hoo"
GATEWAY=`ip route | awk '/default/ { print $3 }'`
printf "NETWORKING=yes\nNOZEROCONF=yes\nGATEWAYDEV=eth0\n" >/etc/sysconfig/network
printf "\nBOOTPROTO=dhcp\nDEVICE=eth1\nONBOOT=yes\nTYPE=Ethernet\nUSERCTL=no\n" >/etc/sysconfig/network-scripts/ifcfg-eth1
ifup eth1

ip route add default via $GATEWAY dev eth1 tab 2

ip rule add from $my_eth1/32 tab 2 priority 600 

Запустить сервис

systemctl start create.service

Вы можете проверить, нормально ли работал скрипт, -

journalctl -u create.service -b
...