Q: Amazon Linux AMI란 무엇입니까?

Amazon Linux AMI는 Amazon Web Services가 Amazon Elastic Compute Cloud(Amazon EC2)에서 사용할 수 있도록 지원하고 관리하는 Linux 이미지로, Amazon EC2에서 실행되는 애플리케이션에 안정적이고 안전한 고성능 실행 환경을 제공할 수 있도록 설계되었습니다. 또한 시작 구성 도구와 일반적으로 사용되는 여러 AWS 라이브러리 및 도구 등 AWS와 손쉽게 통합할 수 있는 패키지를 포함합니다. Amazon Web Services는 Amazon Linux AMI를 실행하는 모든 인스턴스에 지속적인 보안 및 유지관리 업데이트를 제공합니다. Amazon Linux AMI는 Amazon EC2 사용자에게 무료로 제공됩니다.

Q: Amazon Linux AMI에서 소스 코드를 확인할 수 있습니까?

예. Amazon Linux AMI에서 제공되는 소스 명령줄 도구인 yumdownloader를 사용하면 Amazon EC2 내의 소스 코드를 볼 수 있습니다.

Q: Amazon Linux AMI 업데이트는 어디에서 가져올 수 있습니까?

업데이트는 각 Amazon EC2 리전에 호스팅된 미리 구성된 yum 리포지토리를 통해 제공됩니다. 보안 업데이트는 AMI를 처음 부팅할 때 자동으로 적용됩니다. 로그인하면 오늘의 메시지(/etc/motd)에 추가 업데이트가 있는지가 표시됩니다.

Q: Amazon Linux AMI는 얼마나 자주 업데이트됩니까?

Amazon Linux AMI는 롤링 릴리스 방식으로 구축 및 유지 됩니다. Amazon Linux AMI를 패키지의 흐름으로 생각하고 AMI 이미지 자체를 지정 시간 스냅샷으로 생각하면 이해가 쉽습니다.

 

롤링 릴리스를 제공함으로써 Amazon Linux AMI와 이러한 AMI를 기반으로 하는 고객 인스턴스가 최신 EC2 및 AWS 기능이 출시되는 데로 이를 바로 지원하도록 해줍니다. 이를 통해 다른 Linux AMI 생산자(타사 및 Amazon Linux AMI의 다운스트림)가 Amazon Linux AMI를 기준점으로 사용하여 이러한 기능을 지원할 수 있습니다.

 

이 모델을 사용하여 고객이 강화된 최신 보안, 성능 및 기능을 실행함으로써, 발생할 수 있는 다양한 문제를 미리 방지하는 데 도움이 됩니다.

Q: Amazon은 Amazon Linux AMI에 대한 지원을 제공합니까?

예. Amazon Linux AMI는 AWS Support에 가입한 경우에 지원됩니다. 자세한 내용은 AWS Support 페이지에서 확인할 수 있습니다.

Q: Amazon Linux AMI는 EC2 외부에서 지원됩니까?

아니요. Amazon Linux AMI는 Amazon EC2 내에서만 사용할 수 있습니다.

Q: 버그를 보고하거나 기능 및 패키지를 요청하려면 어떻게 해야 합니까?

Amazon EC2 토론 포럼을 통해 버그를 보고하고 기능 및 패키지를 요청할 수 있습니다. 이 포럼은 Amazon Linux AMI 엔지니어링 팀뿐 아니라 AWS Developer Support를 통해서도 모니터링됩니다.

Q: EPEL(Extra Packages for Enterprise Linux) 리포지토리를 활성화하려면 어떻게 해야 합니까?

/etc/yum.repos.d/epel.repo를 수정합니다. [epel] 표시가 된 섹션 아래에서 enabled=0enabled=1로 변경합니다.

EPEL 6 리포지토리를 일시적으로 활성화하려면 yum 명령줄 옵션인 --enablerepo=epel을 사용하십시오.

Amazon Linux AMI 리포지토리는 다른 타사 리포지토리보다 높은 우선순위로 구성된다는 점에 유의하십시오. 이는 Amazon Linux AMI의 일부인 패키지 여러 개가 타사 리포지토리에도 존재하므로, Amazon Linux AMI 버전이 기본 사례에 설치되도록 하기 위해서입니다.

Q: AMI를 특정 버전으로 고정하려면 어떻게 해야 합니까?

Amazon Linux AMI 리포지토리 구조는 한 버전에서 그다음 버전의 Amazon Linux AMI로 롤링할 수 있도록 하는 지속적인 업데이트 흐름을 제공하도록 구성되었습니다.

팩키지 업데이트는 언제나 리포지토리로 푸시되어, yum이 "latest"를 가리키도록 구성된 Amazon Linux AMI의 모든 버전에서 사용할 수 있습니다. /etc/yum.conf의 "releasever" 변수를 보면 인스턴스가 가리키고 있는 리포지토리를 확인할 수 있으며, 기본적으로 Amazon Linux AMI는 releasever=latest로 설정되어 있습니다.

즉, AMI Linux AMI는 지정 시간 스냅샷처럼 처리됩니다. 리포지토리와 업데이트 구조를 갖추고 있어 Amazon에서 구축한 최신 패키지가 해당 리포지토리로 푸시되어 항상 최신 상태를 유지하게 됩니다.

AWS에서 새로운 Amazon Linux AMI 주 버전을 출시할 때 패키지 업데이트를 하길 원하지 않는 경우, "lock on launch" 기능을 사용하면 간편하게 AMI를 특정 주 버전으로 유지할 수 있습니다.

새로운 인스턴스에서 이 기능을 활성화하려면, 예를 들어 EC2 콘솔을 통하거나 --user-data 플래그와 함께 aws ec2 run-instances를 통해(ec2-run-instances -f를 사용할 수도 있음) 다음 사용자 데이터를 cloud-init로 전달하여 2015.09 Amazon Linux AMI를 시작합니다.

#cloud-config
repo_releasever: 2015.09

기존 인스턴스를 현재 버전에 고정하려면(/etc/system-release에 표시되어 있음), /etc/yum.conf를 편집합니다. releasever=latest를 읽는 라인을 코멘트 아웃하고 yum clean all을 실행하여 캐시를 지웁니다.

참고: "최신" 버전이 아닌 리포지토리에 AMI를 고정하면, 추가 업데이트가 수신되지 않습니다. Amazon Linux AMI 업데이트를 지속적으로 수신할 수 있는 유일한 방법은 최신 AMI를 사용하거나 이전 AMI를 계속해서 업데이트하여 리포지토리가 "최신"을 가리키게 하는 것입니다.

Q: 초기 시작 시 필수 및 중요 보안 업데이트의 자동 설치를 비활성화하려면 어떻게 해야 합니까?

첫 번째 부팅 시 Amazon Linux AMI는 패키지 리포지토리에 있는 필수 또는 중요 등급으로 지정된 보안 업데이트를 사용자 공간에 설치합니다. 이 설치는 SSH와 같은 서비스가 시작되기 전에 완료됩니다.

AMI가 yum 리포지토리에 액세스할 수 없는 경우 제한 시간 초과가 발생하며 부팅 절차를 완료하기 전에 여러 번 다시 액세스를 시도합니다. 이러한 일이 발생하는 잠재적인 이유는 제한적인 방화벽 설정 또는 VPC 설정으로 인해 Amazon Linux AMI 패키지 리포지토리로의 액세스가 방해를 받기 때문입니다.

이 문제가 발생하는 경우 Amazon Linux AMI가 해당 패키지 리포지토리에 연결할 수 있도록 환경을 변경하거나 부팅 시 보안 업데이트를 비활성화할 수 있습니다.

AWS EC2 콘솔에서 부팅 시 보안 업데이트 비활성화

Request Instances Wizard의 "Advanced Instance Options" 페이지를 보면 Amazon Linux AMI 사용자 데이터를 전송하는 텍스트 필드가 있습니다. 이 데이터는 텍스트로 입력하거나 파일로 업로드할 수 있습니다. 어느 경우든 데이터는 다음과 같아야 합니다.

#cloud-config
repo_upgrade: none

명령줄에서 부팅 시 보안 업데이트를 비활성화하려면,

위의 사용자 데이터로 텍스트 파일을 생성하고, 이를 aws ec2 run-instances with the --user-data file:// 플래그로 전달합니다(ec2-run-instances -f도 사용할 수 있음).

Amazon Linux AMI를 다시 번들링할 때 부팅 시 보안 업데이트를 비활성화하려면 다음과 같이 하십시오.

/etc/cloud/cloud.cfg를 수정하고 repo_upgrade: securityrepo_upgrade: none으로 변경합니다.

Q: Virtual Private Cloud(VPC)에서 인터넷 게이트웨이 또는 NAT 인스턴스 없이 SSH를 실행하면 시간이 오래 걸리는 이유는 무엇입니까?

이전 질문의 답변을 참조해 주십시오.

Q: 왜 RAID 배열이 /dev/md0이 아닌 /dev/md127에서 시작합니까?

mdadm의 새 버전은 버전 1.2 슈퍼블록과 함께 RAID 어레이를 생성하며 번호가 지정된 디바이스와 자동으로 어셈블하지 않습니다. 파일 시스템에 대한 레이블을 설정하여 파티션을 참조합니다. 대부분의 파일 시스템 생성 도구는 -L 플래그를 사용하여 레이블을 설정합니다. 일단 설정되면, 해당 레이블은 마운트에 의해 참조되거나 /etc/fstabLABEL=[NAME]으로 참조됩니다.

예: 레이블이 있는 RAID0 어레이 생성

mdadm --create --verbose /dev/md0 --level=0 --name=0 --raid-devices=2 /dev/sdb /dev/sdc
mkfs.ext4 -L RAID0 /dev/md0
mkdir -p /mnt/RAID0
mount LABEL=RAID0 /mnt/RAID0

예: 기존 ext[2-4] 파일 시스템의 레이블 설정

e2label /dev/md127 RAID
mkdir -p /mnt/RAID
mount LABEL=RAID /mnt/RAID

Q: wheel 그룹이 /etc/sudoers에서 비활성화되는 이유는 무엇이며 이를 다시 활성화하려면 어떻게 해야 합니까?

Linux 운영 체제는 wheel이 sudo에 대해 활성화되었는지에 따라 기본값이 다르게 되어 있습니다. Amazon은 기본적으로 sudo에서 wheel이 비활성화되어 있는 편이 Amazon Linux AMI의 보안을 유지하는 데 더 적합하다고 생각합니다.

이 문제에 대한 해결책은 2가지가 있습니다. 이러한 해결책은 SSH를 기본 ec2-user로 인스턴스에 지정할 수 있는지와 사용자의 sudo 사용 가능 여부를 변경했는지에 따라 달라집니다.

옵션 1: 기본값을 변경하지 않은 사용자의 경우 SSH를 인스턴스 내에서 ec2-user로 지정할 수 있어야 합니다. 그런 다음 루트를 얻기 위해 sudo를 호출하면, wheel을 다시 활성화하기 위해 sudoer 파일을 수정할 수 있습니다.

옵션 2: 기본값을 변경했거나 ec2-user에서 루트로 sudo를 호출할 수 없는 사용자는 다음 단계를 따르는 것이 좋습니다.

  • 영향을 받는 인스턴스를 중단합니다. 종료하지는 마십시오.
  • EC2 콘솔 또는 EC2 API 도구를 사용하여 루트 EBS 볼륨을 분리합니다.
  • 해당 볼륨을 원격 루트 액세스 권한이 있는 다른 EC2 인스턴스에 연결합니다.
  • 해당 인스턴스에 로그인합니다.
  • 새로 연결된 볼륨을 탑재합니다.
    sudo mount /dev/xvdf /mnt
  • 연결된 볼륨에 있는 sudoer 파일을 변경하고 wheel 그룹의 주석 처리를 제거하십시오.
    sudo sed -i.bak 's,# \(%wheel\s\+ALL=(ALL)\s\+ALL\),\1,' /mnt/etc/sudoers
  • 볼륨 탑재를 해제합니다.
    sudo umount -d /dev/xvdf
  • 볼륨을 분리합니다.
  • 중단된 인스턴스에 볼륨을 다시 연결합니다(해당 디바이스가 분리 전과 동일한지 확인, 일반적으로 /dev/sda1).
  • 영향을 받은 인스턴스를 시작합니다.

Q: 터미널을 통해 Amazon Linux AMI와 통신할 때 왜 � 또는 â 같은 이상한 기호가 보입니까?

Amazon Linux AMI는 UTF-8 문자 인코딩을 기본으로 사용합니다. UTF-8 인코딩을 사용하지 않는 클라이언트 터미널은 UTF-8 문자를 항상 올바르게 번역하지 않습니다. 이를 바로 잡으려면 다음과 같이 클라이언트 터미널 인코딩을 UTF-8로 설정합니다.

  • GNOME Terminal: Terminal 메뉴에서 Set Character Encoding을 선택하고 UTF-8을 선택합니다.
  • PuTTY: 제목 표시줄의 오른쪽을 클릭하여 메뉴를 가져옵니다. 그런 다음 Change Settings를 선택합니다. Window → Translation → Remote Character Set에서 UTF-8을 선택합니다.

Q: /etc/yum.repos.d/amzn*.reporeport_instanceid라는 옵션이 있습니다. 이것은 무엇을 합니까?

Amazon Linux AMI 리포지토리는 각 리전의 S3 버킷입니다. 인스턴스의 yum 프로세스가 이러한 버킷에서 패키지를 다운로드할 때 해당 S3 연결에 대한 정보가 로깅됩니다.

Amazon Linux AMI의 경우, report_instanceid=yes 설정은 Amazon Linux AMI 리포지토리가 패키지를 다운로드하는 인스턴스의 인스턴스 ID(i-xxxxxxxx)와 리전(예: us-west-2)을 로깅하도록 허용합니다. 이로써 Amazon Linux AMI 팀은 개별 인스턴스에 대해 더욱 집중된 고객 중심 지원을 할 수 있습니다.

report_instanceid=yes는 Amazon Linux AMI 리포지토리에만 기본적으로 활성화됩니다.

Q: 시스템 릴리스 패키지가 업그레이드될 때 /etc/yum.repos.d/amzn*.repo yum 리포지토리 구성 파일이 덮어쓰여지는 이유는 무엇입니까?

시스템 릴리스 패키지가 업그레이드되면 인스턴스가 항상 Amazon Linux AMI yum 리포지토리 구성에 대한 변경 사항을 확인할 수 있도록 리포지토리 구성 파일이 덮어 쓰입니다.

Amazon Linux AMI 2014.09 미만 버전의 경우:

이러한 파일은 cloud-init에서 /etc/cloud/templates/amzn-*.repo.tmpl에 있는 템플릿을 사용해 생성합니다. 이 템플릿 파일에 대한 변경 사항은 유지됩니다.

Amazon Linux AMI 2014.09 이상 버전의 경우:

인스턴스가 지리적으로 가장 가까운 리포지토리에 도달할 수 있도록 /etc/yum.repos.d/amzn*.repo 파일에서 yum 변수를 사용하며 cloud-init 템플릿을 더 이상 사용하지 않습니다. 이러한 파일의 수정 내용은 시스템 릴리스가 업그레이드될 때 /etc/yum.repos.d/amzn*.repo.rpmsave로 보존됩니다.

2014.09로 업그레이드하는 사용자는 /etc/yum.repos.d/amzn*.repo.rpmsave로 저장된 /etc/yum.repos.d/amzn*.repo 파일의 편집 내용을 모두 확인할 수 있습니다.

Q: 맨 페이지 색상을 변경하거나 끄는 방법은 무엇입니까?

맨 페이지 색상은 /etc/profile.d/less.sh(bash 및zsh)와 /etc/profile.d/less.csh에서 구성됩니다. 색상을 끄려면 export LESS_ (bash, zsh) 및/또는 setenv LESS_ (csh)로 시작하는 모든 줄을 제거하십시오.

Q: 2015.09 인스턴스 이전 버전에서 시스템 호출 감사를 비활성화하려면 어떻게 해야 합니까?

2015.09 Amazon Linux AMI의 새로운 버전에서는 기본적으로 시스템 호출 감사 기능이 비활성화되어 있습니다.  시스템 호출 감사 기능은 모든 시스템 호출에 오버헤드를 추가하여 현저한 성능 저하를 가져올 수 있습니다(특히 디스크 집약적 또는 네트워크 집약적 애플리케이션의 경우).

시스템 호출 감사 기능이 필요한 경우, /etc/audit/audit.rules에서 아래 줄을 찾아 제거하거나 주석 처리한 다음, 감사 데몬을 다시 시작하십시오.

 -a never,task

예제(루트):

# auditctl -l
LIST_RULES: task,never
# sed -i.bak -e '/^-a never,task$/ s/^/#/' /etc/audit/audit.rules
# service auditd restart
# auditctl -l
No rules

2015.09 이전 버전의 AMI 인스턴스에 같은 성능 개선을 적용하고 싶다면, 같은 줄(  -a never,task )을 /etc/audit/audit.rules에 추가하고 데몬을 다시 시작하십시오. 업그레이드하는데 감사 규칙 파일에 변경된 내용이 없다면, 새로운 기본 규칙 파일을 /etc/audit/audit.rules로 이동하거나 복사하기만 하면 됩니다.

예제(루트):

# auditctl -l
No rules
# cp -p /etc/audit/rules.d/audit.rules.default /etc/audit/audit.rules
cp: overwrite ‘/etc/audit/audit.rules’? y
# service auditd restart
# auditctl -l
LIST_RULES: task,never

Q: mime 멀티파트 사용자 데이터를 cloud-init와 함께 사용하는 예제를 제공해 줄 수 있습니까?

cloud-init용 mime 멀티파트에 대한 설명서는 여기에서 확인할 수 있습니다.

MIME 멀티파트는 상당히 까다로운 형식이므로, write-mime-multipart 도구를 사용하여 멀티파트 파일을 생성하는 것이 좋습니다. 이 도구는 cloud-utils 팩키지에 포함되어 있으며, sudo yum install/usr/bin/write-mime-multipart에서 설치할 수 있습니다. 이 도구는 파일의 첫 줄을 사용하여 Content-Type을 파악하고, cloud-init는 Content-Type을 사용하여 파일을 해석하는 방법을 결정합니다. 예제 파일은 다음과 같습니다.

#cloud-config
repo_releasever: 2015.09

#!/bin/bash
echo "cloud-init was here..." >> /tmp/cloud-init-was-here.txt

write-mime-multipart의 예제 및 결과는 다음과 같습니다.

[ec2-user@ip-172-31-4-37 ~]$ write-mime-multipart repo_releasever-2015.09.cfg ci-was-here.sh
Content-Type: multipart/mixed; boundary="===============6347220379374809187=="
MIME-Version: 1.0

--===============6347220379374809187==
Content-Type: text/cloud-config; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="repo_releasever-2015.09.cfg"

#cloud-config
repo_releasever: 2015.09

--===============6347220379374809187==
Content-Type: text/x-shellscript; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="ci-was-here.sh"

#!/bin/bash
echo "cloud-init was here..." >> /tmp/cloud-init-was-here.txt

--===============6347220379374809187==--

이 도구를 사용하는 방법을 자세히 알아보려면 man write-mime-multipart를 참조하십시오.

Q: Amazon Linux AMI 리포지토리로 연결되도록 VPC 종단점을 구성하려면 어떻게 해야 합니까?

인터넷에 액세스하지 않고 VPC 내에서 yum 리포지토리에 액세스할 수 있습니다.  VPC 종단점 정책이 VPC에서 Amazon Linux AMI 리포리토리를 호스팅하는 S3 버킷으로의 트래픽을 허용해야 합니다.

이를 구현할 수 있는 VPC 종단점 정책의 예는 다음과 같습니다.

{
  "Statement": [
    {
      "Sid": "Amazon Linux AMI Repository Access",
      "Principal": "*",
      "Action": [
        "s3:GetObject"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::packages.*.amazonaws.com/*",
        "arn:aws:s3:::repo.*.amazonaws.com/*"
      ]
    }
  ]
}

자세한 내용은 VPC 종단점 설명서를 참조하십시오.