내 인스턴스에서 향상된 네트워킹(enhanced networking) 활성화하기
내 인스턴스에서 향상된 네트워킹(enhanced networking) 활성화하기
사용하는 절차는 인스턴스의 운영 체제에 따라 달라져요. 이 절에서 Amazon Linux, Ubuntu, 기타 Linux 배포판, Windows 인스턴스에서 ENA 기반 향상된 네트워킹을 활성화하는 방법을 살펴볼게요.
출처: 문서
본문
사용하는 절차는 인스턴스의 운영 체제에 따라 달라져요.
Amazon Linux의 AMI에는 ENA를 통한 향상된 네트워킹에 필요한 커널 드라이버가 설치되어 있고 ENA 지원이 활성화되어 있어요. 따라서 지원되는 인스턴스 유형에서 HVM 버전의 Amazon Linux로 인스턴스를 시작하면 향상된 네트워킹이 이미 활성화되어 있어요. 자세한 내용은 Test whether enhanced networking is enabled를 참고하세요.
최신 Ubuntu HVM AMI에는 ENA를 통한 향상된 네트워킹에 필요한 커널 드라이버가 설치되어 있고 ENA 지원이 활성화되어 있어요. 따라서 지원되는 인스턴스 유형에서 최신 Ubuntu HVM AMI로 인스턴스를 시작하면 향상된 네트워킹이 이미 활성화되어 있어요. 자세한 내용은 Test whether enhanced networking is enabled를 참고하세요.
이전 AMI로 인스턴스를 시작했고 향상된 네트워킹이 아직 활성화되어 있지 않다면 linux-aws 커널 패키지를 설치해 최신 향상된 네트워킹 드라이버를 얻고 필요한 속성을 업데이트할 수 있어요.
linux-aws 커널 패키지 설치(Ubuntu 16.04 이상)
Ubuntu 16.04와 18.04는 Ubuntu 커스텀 커널(linux-aws 커널 패키지)을 제공해요. 다른 커널을 사용하려면 Support에 문의하세요.
linux-aws 커널 패키지 설치(Ubuntu Trusty 14.04)
- 인스턴스에 연결합니다.
- 패키지 캐시와 패키지를 업데이트합니다.
ubuntu:~$ sudo apt-get update && sudo apt-get upgrade -y linux-aws
중요
업데이트 과정에서 grub을 설치하라는 프롬프트가 표시되면 /dev/xvda를 사용해 grub을 설치하고, 현재 버전의 /boot/grub/menu.lst를 유지하도록 선택하세요.
-
[EBS 지원 인스턴스] 로컬 컴퓨터에서 Amazon EC2 콘솔이나 다음 명령 중 하나를 사용해 인스턴스를 중지합니다: stop-instances (AWS CLI) 또는 Stop-EC2Instance (AWS Tools for Windows PowerShell).
[인스턴스 스토어 지원 인스턴스] 속성을 수정하기 위해 인스턴스를 중지할 수 없어요. 대신 이 절차로 진행하세요: Ubuntu에서 향상된 네트워킹 활성화(인스턴스 스토어 지원 인스턴스).
-
로컬 컴퓨터에서 다음 명령 중 하나를 사용해 향상된 네트워킹 속성을 활성화합니다.
-
modify-instance-attribute (AWS CLI)
aws ec2 modify-instance-attribute --instance-id i-1234567890abcdef0 --ena-support
- Edit-EC2InstanceAttribute (Tools for Windows PowerShell)
Edit-EC2InstanceAttribute -InstanceId i-1234567890abcdef0 -EnaSupport $true
-
(선택 사항) Create an Amazon EBS-backed AMI에 설명된 대로 인스턴스에서 AMI를 만듭니다. AMI는 인스턴스의 향상된 네트워킹
enaSupport속성을 상속해요. 따라서 이 AMI를 사용하면 기본적으로 향상된 네트워킹이 활성화된 다른 인스턴스를 시작할 수 있어요. -
로컬 컴퓨터에서 Amazon EC2 콘솔이나 다음 명령 중 하나를 사용해 인스턴스를 시작합니다: start-instances (AWS CLI) 또는 Start-EC2Instance (AWS Tools for Windows PowerShell).
Ubuntu에서 향상된 네트워킹 활성화(인스턴스 스토어 지원 인스턴스)
인스턴스를 중지하는 단계까지 이전 절차를 따릅니다. Create an Amazon S3-backed AMI에 설명된 대로 새 AMI를 만들고, AMI를 등록할 때 향상된 네트워킹 속성을 활성화해야 합니다.
- register-image (AWS CLI)
aws ec2 register-image --ena-support ...
- Register-EC2Image (AWS Tools for Windows PowerShell)
Register-EC2Image -EnaSupport $true ...
Red Hat Enterprise Linux, SUSE Linux Enterprise Server, CentOS의 최신 AMI에는 ENA를 통한 향상된 네트워킹에 필요한 커널 드라이버가 포함되어 있고 ENA 지원이 활성화되어 있어요. 따라서 지원되는 인스턴스 유형에서 최신 AMI로 인스턴스를 시작하면 향상된 네트워킹이 이미 활성화되어 있어요. 자세한 내용은 Test whether enhanced networking is enabled를 참고하세요.
다음 절차는 Amazon Linux AMI나 Ubuntu가 아닌 Linux 배포판에서 향상된 네트워킹을 활성화하는 일반적인 단계를 제공해요. 명령의 상세 구문, 파일 위치, 패키지·도구 지원과 같은 자세한 내용은 해당 Linux 배포판 문서를 참고하세요.
Linux에서 향상된 네트워킹 활성화
- 인스턴스에 연결합니다.
- https://github.com/amzn/amzn-drivers의 GitHub에서 인스턴스에
ena커널 드라이버의 소스 코드를 복제합니다. (SUSE Linux Enterprise Server 12 SP2 이상은 기본적으로 ENA 2.02를 포함하므로 ENA 드라이버를 다운로드해 컴파일할 필요가 없어요. SUSE Linux Enterprise Server 12 SP2 이상의 경우 원하는 드라이버 버전을 기본 커널에 추가하도록 요청해야 해요.)
git clone https://github.com/amzn/amzn-drivers
- 인스턴스에
ena커널 드라이버를 컴파일하고 설치합니다. 이 단계는 Linux 배포판에 따라 달라져요. Red Hat Enterprise Linux에서 커널 드라이버를 컴파일하는 자세한 내용은 How do I install the latest ENS driver for enhanced network support on an Amazon EC2 instance that runs RHEL?를 참고하세요. - sudo depmod 명령을 실행해 커널 드라이버 종속성을 업데이트합니다.
- 새 커널 드라이버가 부팅 시 로드되도록 인스턴스에서 initramfs를 업데이트합니다. 예를 들어 배포판이 dracut을 지원한다면 다음 명령을 사용할 수 있어요.
dracut -f -v
- 시스템이 기본적으로 예측 가능한 네트워크 인터페이스 이름(predictable network interface names)을 사용하는지 확인합니다. systemd 또는 udev 버전 197 이상을 사용하는 시스템은 이더넷 디바이스 이름을 바꿀 수 있으며 단일 네트워크 인터페이스가
eth0으로 이름이 지정된다고 보장하지 않아요. 이 동작은 인스턴스 연결에 문제를 일으킬 수 있어요. 자세한 내용과 다른 구성 옵션은 freedesktop.org 웹사이트의 Predictable Network Interface Names을 참고하세요. - RPM 기반 시스템에서 systemd 또는 udev 버전을 다음 명령으로 확인할 수 있어요.
rpm -qa | grep -e '^systemd-[0-9]\+\|^udev-[0-9]\+'
systemd-208-11.el7_0.2.x86_64
이 Red Hat Enterprise Linux 7 예시에서 systemd 버전은 208이므로 예측 가능한 네트워크 인터페이스 이름을 비활성화해야 해요.
/etc/default/grub의GRUB_CMDLINE_LINUX줄에net.ifnames=0옵션을 추가해 예측 가능한 네트워크 인터페이스 이름을 비활성화합니다.
sudo sed -i '/^GRUB\_CMDLINE\_LINUX/s/\"$/ net\.ifnames\=0\"/' /etc/default/grub
- grub 구성 파일을 다시 빌드합니다.
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
-
[EBS 지원 인스턴스] 로컬 컴퓨터에서 Amazon EC2 콘솔이나 다음 명령 중 하나를 사용해 인스턴스를 중지합니다: stop-instances (AWS CLI), Stop-EC2Instance (AWS Tools for Windows PowerShell).
[인스턴스 스토어 지원 인스턴스] 속성을 수정하기 위해 인스턴스를 중지할 수 없어요. 대신 이 절차로 진행하세요: Linux에서 향상된 네트워킹 활성화(인스턴스 스토어 지원 인스턴스).
-
로컬 컴퓨터에서 다음 명령 중 하나를 사용해 향상된 네트워킹
enaSupport속성을 활성화합니다. -
modify-instance-attribute (AWS CLI)
aws ec2 modify-instance-attribute --instance-id i-1234567890abcdef0 --ena-support
- Edit-EC2InstanceAttribute (Tools for Windows PowerShell)
Edit-EC2InstanceAttribute -InstanceId i-1234567890abcdef0 -EnaSupport $true
-
(선택 사항) Create an Amazon EBS-backed AMI에 설명된 대로 인스턴스에서 AMI를 만듭니다. AMI는 인스턴스의 향상된 네트워킹
enaSupport속성을 상속해요. 따라서 이 AMI를 사용하면 기본적으로 향상된 네트워킹이 활성화된 다른 인스턴스를 시작할 수 있어요.인스턴스 운영 체제에
/etc/udev/rules.d/70-persistent-net.rules파일이 포함되어 있다면 AMI를 만들기 전에 이 파일을 삭제해야 해요. 이 파일은 원래 인스턴스의 이더넷 어댑터 MAC 주소를 담고 있어요. 다른 인스턴스가 이 파일로 부팅하면 운영 체제가 디바이스를 찾지 못해eth0이 실패해 부팅 문제가 발생할 수 있어요. 이 파일은 다음 부팅 주기에서 다시 생성되며, AMI에서 시작된 인스턴스는 각자 자신의 파일 버전을 만듭니다. -
로컬 컴퓨터에서 Amazon EC2 콘솔이나 다음 명령 중 하나를 사용해 인스턴스를 시작합니다: start-instances (AWS CLI) 또는 Start-EC2Instance (AWS Tools for Windows PowerShell).
-
(선택 사항) 인스턴스에 연결해 커널 드라이버가 설치되었는지 확인합니다.
향상된 네트워킹을 활성화한 후 인스턴스에 연결할 수 없다면 Troubleshoot the ENA kernel driver on Linux를 참고하세요.
Linux에서 향상된 네트워킹 활성화(인스턴스 스토어 지원 인스턴스)
인스턴스를 중지하는 단계까지 이전 절차를 따릅니다. Create an Amazon S3-backed AMI에 설명된 대로 새 AMI를 만들고, AMI를 등록할 때 향상된 네트워킹 속성을 활성화해야 합니다.
- register-image (AWS CLI)
aws ec2 register-image --ena-support ...
- Register-EC2Image (AWS Tools for Windows PowerShell)
Register-EC2Image -EnaSupport ...
이 방법은 테스트 및 피드백 목적으로만 사용됩니다. 프로덕션 배포에는 사용할 수 없어요. 프로덕션 배포는 Ubuntu를 참고하세요.
중요
DKMS를 사용하면 구독의 지원 계약이 무효화돼요. 프로덕션 배포에는 사용하면 안 돼요.
Ubuntu(EBS 지원 인스턴스)에서 ENA로 향상된 네트워킹 활성화
- Ubuntu의 1단계와 2단계를 따릅니다.
- 커널 드라이버를 컴파일할
build-essential패키지와, 커널이 업데이트될 때마다ena커널 드라이버가 다시 빌드되도록 하는dkms패키지를 설치합니다.
ubuntu:~$ sudo apt-get install -y build-essential dkms
- https://github.com/amzn/amzn-drivers의 GitHub에서 인스턴스에
ena커널 드라이버의 소스를 복제합니다.
ubuntu:~$ git clone https://github.com/amzn/amzn-drivers
- DKMS가 각 커널 업데이트에 대해 찾고 빌드할 수 있도록
amzn-drivers패키지를/usr/src/디렉터리로 이동합니다. 디렉터리 이름에 소스 코드 버전 번호(릴리스 노트에서 현재 버전 번호를 찾을 수 있어요)를 추가합니다. 예를 들어 다음 예시에서는 버전 1.0.0이 표시됩니다.
ubuntu:~$ sudo mv amzn-drivers /usr/src/amzn-drivers-1.0.0
- 다음 값으로 DKMS 구성 파일을 만들고, 내
ena버전으로 대체합니다. 파일을 만듭니다.
ubuntu:~$ sudo touch /usr/src/amzn-drivers-1.0.0/dkms.conf
파일을 편집하고 다음 값을 추가합니다.
ubuntu:~$ sudo vim /usr/src/amzn-drivers-1.0.0/dkms.conf
PACKAGE_NAME="ena"
PACKAGE_VERSION="1.0.0"
CLEAN="make -C kernel/linux/ena clean"
MAKE="make -C kernel/linux/ena/ BUILD_KERNEL=${kernelver}"
BUILT_MODULE_NAME[0]="ena"
BUILT_MODULE_LOCATION="kernel/linux/ena"
DEST_MODULE_LOCATION[0]="/updates"
DEST_MODULE_NAME[0]="ena"
AUTOINSTALL="yes"
- DKMS를 사용해 인스턴스에
ena커널 드라이버를 추가하고, 빌드하고, 설치합니다. 커널 드라이버를 DKMS에 추가합니다.
ubuntu:~$ sudo dkms add -m amzn-drivers -v 1.0.0
dkms 명령으로 커널 드라이버를 빌드합니다.
ubuntu:~$ sudo dkms build -m amzn-drivers -v 1.0.0
dkms로 커널 드라이버를 설치합니다.
ubuntu:~$ sudo dkms install -m amzn-drivers -v 1.0.0
- 부팅 시 올바른 커널 드라이버가 로드되도록 initramfs를 다시 빌드합니다.
ubuntu:~$ sudo update-initramfs -u -k all
- Test whether enhanced networking is enabled의
modinfo ena명령으로ena커널 드라이버가 설치되었는지 확인합니다.
ubuntu:~$ modinfo ena
filename: /lib/modules/3.13.0-74-generic/updates/dkms/ena.ko
version: 1.0.0
license: GPL
description: Elastic Network Adapter (ENA)
author: Amazon.com, Inc. or its affiliates
srcversion: 9693C876C54CA64AE48F0CA
alias: pci:v00001D0Fd0000EC21sv*sd*bc*sc*i*
alias: pci:v00001D0Fd0000EC20sv*sd*bc*sc*i*
alias: pci:v00001D0Fd00001EC2sv*sd*bc*sc*i*
alias: pci:v00001D0Fd00000EC2sv*sd*bc*sc*i*
depends:
vermagic: 3.13.0-74-generic SMP mod_unload modversions
parm: debug:Debug level (0=none,...,16=all) (int)
parm: push_mode:Descriptor / header push mode (0=automatic,1=disable,3=enable)
0 - Automatically choose according to device capability (default)
1 - Don't push anything to device memory
3 - Push descriptors and header buffer to device memory (int)
parm: enable_wd:Enable keepalive watchdog (0=disable,1=enable,default=1) (int)
parm: enable_missing_tx_detection:Enable missing Tx completions. (default=1) (int)
parm: numa_node_override_array:Numa node override map
(array of int)
parm: numa_node_override:Enable/Disable numa node override (0=disable)
(int)
- Ubuntu의 3단계로 계속합니다.
인스턴스를 시작했는데 향상된 네트워킹이 아직 활성화되어 있지 않다면 인스턴스에 필요한 네트워크 어댑터 드라이버를 다운로드해 설치한 다음 enaSupport 인스턴스 속성을 설정해 향상된 네트워킹을 활성화해야 해요.
향상된 네트워킹 활성화
- 인스턴스에 연결하고 로컬 관리자로 로그인합니다.
- [Windows Server 2016 및 2019만 해당] 드라이버 설치 후 인스턴스를 구성하려면 다음 EC2Launch PowerShell 스크립트를 실행합니다.
PS C:\> C:\ProgramData\Amazon\EC2-Windows\Launch\Scripts\InitializeInstance.ps1 -Schedule
- 인스턴스에서 다음과 같이 드라이버를 설치합니다.
- 최신 드라이버를 다운로드해 인스턴스에 저장합니다.
- zip 아카이브를 추출합니다.
install.ps1PowerShell 스크립트를 실행해 드라이버를 설치합니다.
참고
실행 정책(execution policy) 오류가 발생하면 정책을 Unrestricted로 설정합니다(기본적으로 Restricted 또는 RemoteSigned로 설정되어 있어요). 명령줄에서 Set-ExecutionPolicy -ExecutionPolicy Unrestricted를 실행한 다음 install.ps1 PowerShell 스크립트를 다시 실행합니다.
- 로컬 컴퓨터에서 Amazon EC2 콘솔이나 다음 명령 중 하나를 사용해 인스턴스를 중지합니다: stop-instances (AWS CLI) 또는 Stop-EC2Instance (AWS Tools for Windows PowerShell).
- 다음과 같이 인스턴스에서 ENA 지원을 활성화합니다.
- 먼저 로컬 컴퓨터에서 다음 명령 중 하나를 실행해 인스턴스의 EC2 인스턴스 ENA 지원 속성을 확인합니다. 속성이 활성화되지 않았다면 출력이 "[]"이거나 비어 있습니다. 기본적으로
EnaSupport는false로 설정돼요. - describe-instances (AWS CLI)
aws ec2 describe-instances --instance-ids i-1234567890abcdef0 --query "Reservations[].Instances[].EnaSupport"
- Get-EC2Instance (Tools for Windows PowerShell)
(Get-EC2Instance -InstanceId i-1234567890abcdef0).Instances.EnaSupport
- ENA 지원을 활성화하려면 다음 명령 중 하나를 실행합니다.
- modify-instance-attribute (AWS CLI)
aws ec2 modify-instance-attribute --instance-id i-1234567890abcdef0 --ena-support
- Edit-EC2InstanceAttribute (AWS Tools for Windows PowerShell)
Edit-EC2InstanceAttribute -InstanceId i-1234567890abcdef0 -EnaSupport $true
인스턴스를 다시 시작할 때 문제가 발생하면 다음 명령 중 하나로 ENA 지원을 비활성화할 수도 있어요.
- modify-instance-attribute (AWS CLI)
aws ec2 modify-instance-attribute --instance-id i-1234567890abcdef0 --no-ena-support
- Edit-EC2InstanceAttribute (AWS Tools for Windows PowerShell)
Edit-EC2InstanceAttribute -InstanceId i-1234567890abcdef0 -EnaSupport $false
- 앞서 보여준 대로 describe-instances 또는 Get-EC2Instance로 속성이
true로 설정되었는지 확인합니다. 이제 다음 출력이 보여야 해요.
[
true
]
- 로컬 컴퓨터에서 Amazon EC2 콘솔이나 다음 명령 중 하나를 사용해 인스턴스를 시작합니다: start-instances (AWS CLI) 또는 Start-EC2Instance (AWS Tools for Windows PowerShell).
- 인스턴스에서 ENA 드라이버가 설치되고 활성화되었는지 다음과 같이 확인합니다.
- 네트워크 아이콘의 컨텍스트(오른쪽 클릭) 메뉴를 열고 Open Network and Sharing Center를 선택합니다.
- 이더넷 어댑터(예: Ethernet 2)를 선택합니다.
- Details를 선택합니다. Network Connection Details에서 Description이 Amazon Elastic Network Adapter인지 확인합니다.
- (선택 사항) 인스턴스에서 AMI를 만듭니다. AMI는 인스턴스의
enaSupport속성을 상속해요. 따라서 이 AMI를 사용하면 기본적으로 ENA가 활성화된 다른 인스턴스를 시작할 수 있어요.