
Ansible을 사용하여 수행할 수 있는 Amazon Linux 2의 중요 설정
2022-10-19 last update
10 minutes reading ec2 ansible aws amazonlinux2Amazon Linux 2는 AWS에서 제공하는 Linux OS입니다. 그렇다면 다른 OS와 무엇이 다른가? 우리 모두가 알고 있는 것은 이 OS를 통해 AWS 명령을 수행해야 할 때 AWS CLI를 설치할 필요가 없다는 것입니다. 다른 OS에서는 볼 수 없는 가장 "놀라운 부분"이라고 생각합니다.
Amazon Linux 2에 대해 자세히 알아보려면 here을 클릭하십시오!
그렇다면 Amazon Linux 2의 "중요 설정"을 설정해 보셨습니까? 여기서 나는 프로덕션을 위해 서버를 "실제로"사용하기 전에 수행해야 하는 기본 구성을 의미합니다. 5가지로 요약해봤습니다.
업데이트 중 모든 패키지를 설치합니다(업데이트 후에 수행해야 함). 이것은 선택 사항이거나 마지막 단계에서 실행할 수 있지만 간단한 웹 서버를 설치하고 업데이트 후에 실행할 것이기 때문에 2번에 배치했습니다. 관리 사용자 시간대를 설정합니다(Amazon에서 이미 기본적으로 시간 동기화를 제공했기 때문에 NTP 클라이언트 구성을 건너뛰겠습니다). 호스트 이름 설정
좋아, 제목에서 언급했듯이. 이 5가지가 모두 가능합니다. 우리 모두 알다시피, 가능은 구성 관리 도구이기도 합니다.
전제 조건:
AWS CLI 및 setup at least one credential ;
Ansible ;
그 전에 나중에 구성하기 위해 인스턴스를 시작하겠습니다.
인벤토리: hosts.yml
플레이북: ec2.yml
플레이북을 실행!
위에 나열된 인스턴스에서 IP가 108.136.225.50인 amazonlinux2 인스턴스를 사용하겠습니다.
1. 업데이트
2. 패키지 설치
여기서는 단순 웹 서버용 최신 httpd만 설치하겠습니다.
3. 관리 사용자
ec2-user는 Amazon Linux 2의 기본 사용자입니다. 그러면 서버에 액세스하는 사람이 몇 명 있다면 어떻게 될까요? 그들은 어떤 변경도 할 수 있으며 누가 변경했는지 식별하기 어려울 것입니다. 왜냐하면 누구든지 ec2-user라는 동일한 사용자 이름을 사용하기 때문입니다. 따라서 이름에 따라 다른 사용자를 제공해야 합니다. 또한 ssh 키를 사용하여 EC2 인스턴스에 연결하고 그들이 sudo로 전환할 때 암호가 필요하지 않은 서버의 모든 액세스 수준을 갖는 sysadmin이라고 가정해 보겠습니다.
4. 시간대 설정
(존으로 변경해주세요)
5. 호스트 이름 설정
(여기서는 localdomain에 대해서만 호스트 이름을 설정하는 데 사용합니다. 이미 있고 사용하려는 경우 공개 도메인으로 변경할 수 있습니다.)
마지막으로 모든 작업이 준비되면. 이것을 인벤토리에 추가해야 합니다.
이제 플레이북을 실행해보자!
기본 사용자를 지정하지 않고 서버를 원격으로 다시 확인합시다. 이미 호스트 이름을 변경했기 때문에 재부팅도 할 것입니다.
ansible ad-hoc을 사용하여 호스트 이름과 시간대를 확인하여 설정을 확인합시다!
Amazon Linux 2용입니다! 다음 부분에서는 여기까지의 모든 게시물을 이미 팔로우했다면 우리가 만든 것을 삭제하겠습니다. 다음 포스팅으로 넘어가겠습니다!
참조:
https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Instances.html
Amazon Linux 2에 대해 자세히 알아보려면 here을 클릭하십시오!
그렇다면 Amazon Linux 2의 "중요 설정"을 설정해 보셨습니까? 여기서 나는 프로덕션을 위해 서버를 "실제로"사용하기 전에 수행해야 하는 기본 구성을 의미합니다. 5가지로 요약해봤습니다.
좋아, 제목에서 언급했듯이. 이 5가지가 모두 가능합니다. 우리 모두 알다시피, 가능은 구성 관리 도구이기도 합니다.
전제 조건:
AWS CLI 및 setup at least one credential ;
Ansible ;
ansible-galaxy collection install community.aws
를 실행하여 AWS용 Ansible 수집 . 그 전에 나중에 구성하기 위해 인스턴스를 시작하겠습니다.
인벤토리: hosts.yml
---
localhost:
hosts:
127.0.0.1:
플레이북: ec2.yml
- name: launch new instance
amazon.aws.ec2_instance:
name: amazonlinux2
region: ap-southeast-3
key_name: ec2-user
instance_type: t3.micro
security_group: ssh-web
vpc_subnet_id: subnet-0276d466994fa3087
network:
assign_public_ip: true
delete_on_termination: true
image_id: ami-0de34ee5744189c60
volumes:
- device_name: /dev/xvda
ebs:
volume_size: 8
volume_type: gp2
delete_on_termination: true
tags:
- ec2_new
플레이북을 실행!
$ ansible-playbook -i host.yml ec2.yml -t ec2_new
PLAY [ec2] **************************************************************************************************************************************************************
TASK [launch new instance] **********************************************************************************************************************************************
changed: [127.0.0.1]
PLAY RECAP **************************************************************************************************************************************************************
127.0.0.1 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
$ aws ec2 describe-instances --query 'Reservations[].Instances[].{ID:InstanceId, PrivateIP:PrivateIpAddress, PublicIP:PublicIpAddress, Name:Tags[?Key==`Name`].Value}'
[
{
"ID": "i-0187e4bb5d2f2007c",
"PrivateIP": "10.0.1.7",
"PublicIP": "108.136.226.235",
"Name": [
"amazonlinux2a"
]
},
{
"ID": "i-050cfb6ee36a57131",
"PrivateIP": "10.0.1.5",
"PublicIP": "108.136.225.50",
"Name": [
"amazonlinux2"
]
},
{
"ID": "i-09c46dba004ed7bd8",
"PrivateIP": "10.0.2.8",
"PublicIP": "108.136.235.232",
"Name": [
"amazonlinux2b"
]
},
{
"ID": "i-02c7573fff1215e65",
"PrivateIP": "10.0.3.11",
"PublicIP": "108.136.150.180",
"Name": [
"amazonlinux2c"
]
}
]
위에 나열된 인스턴스에서 IP가 108.136.225.50인 amazonlinux2 인스턴스를 사용하겠습니다.
1. 업데이트
*
를 이름으로 사용하면 yum -y update
로 바뀝니다.- name: al2
hosts: new
become: true
gather_facts: no
tasks:
- name: update
yum:
name: "*"
state: latest
2. 패키지 설치
여기서는 단순 웹 서버용 최신 httpd만 설치하겠습니다.
- name: install web server
yum:
name: httpd
state: latest
- name: install web server
service:
name: httpd
enabled: yes
- name: modify home page
shell: 'echo "Hello World!" >> /var/www/html/index.html'
3. 관리 사용자
ec2-user는 Amazon Linux 2의 기본 사용자입니다. 그러면 서버에 액세스하는 사람이 몇 명 있다면 어떻게 될까요? 그들은 어떤 변경도 할 수 있으며 누가 변경했는지 식별하기 어려울 것입니다. 왜냐하면 누구든지 ec2-user라는 동일한 사용자 이름을 사용하기 때문입니다. 따라서 이름에 따라 다른 사용자를 제공해야 합니다. 또한 ssh 키를 사용하여 EC2 인스턴스에 연결하고 그들이 sudo로 전환할 때 암호가 필요하지 않은 서버의 모든 액세스 수준을 갖는 sysadmin이라고 가정해 보겠습니다.
- name: create user
user:
name: nurulramadhona
shell: /bin/bash
- name: copy pubkey
authorized_key:
user: nurulramadhona
state: present
key: "{{ lookup('file', '/home/nurulramadhona/.ssh/id_rsa.pub') }}"
- name: set user as sudoers
lineinfile:
path: /etc/sudoers.d/90-cloud-init-users
line: 'nurulramadhona ALL=(ALL) NOPASSWD:ALL'
insertafter: EOF
4. 시간대 설정
(존으로 변경해주세요)
- name: set timezone
community.general.timezone:
name: Asia/Jakarta
5. 호스트 이름 설정
(여기서는 localdomain에 대해서만 호스트 이름을 설정하는 데 사용합니다. 이미 있고 사용하려는 경우 공개 도메인으로 변경할 수 있습니다.)
- name: preserve hostname
lineinfile:
path: /etc/cloud/cloud.cfg
line: 'preserve_hostname: true'
insertafter: EOF
- name: set hostname
command: hostnamectl set-hostname {{ hostname }}.localdomain
- name: replace localhost entry
lineinfile:
path: /etc/hosts
regexp: '^127\.0\.0\.1'
line: '127.0.0.1 {{ hostname }}.localdomain {{ hostname }} localhost4 localhost4.localdomain4'
owner: root
group: root
mode: "0644"
마지막으로 모든 작업이 준비되면. 이것을 인벤토리에 추가해야 합니다.
new:
hosts:
108.136.225.50:
vars:
hostname: amazonlinux2
이제 플레이북을 실행해보자!
$ ansible-playbook -i host.yml al2.yml -u ec2-user
PLAY [al2] **************************************************************************************************************************************************************
TASK [update] ***********************************************************************************************************************************************************
changed: [108.136.225.50]
TASK [install web server] ***********************************************************************************************************************************************
changed: [108.136.225.50]
TASK [install web server] ***********************************************************************************************************************************************
changed: [108.136.225.50]
TASK [modify home page] *************************************************************************************************************************************************
changed: [108.136.225.50]
TASK [create user] ******************************************************************************************************************************************************
changed: [108.136.225.50]
TASK [copy pubkey] ******************************************************************************************************************************************************
changed: [108.136.225.50]
TASK [set user as sudoers] **********************************************************************************************************************************************
changed: [108.136.225.50]
TASK [set timezone] *****************************************************************************************************************************************************
changed: [108.136.225.50]
TASK [preserve hostname] ************************************************************************************************************************************************
changed: [108.136.225.50]
TASK [set hostname] *****************************************************************************************************************************************************
changed: [108.136.225.50]
TASK [replace localhost entry] ******************************************************************************************************************************************
changed: [108.136.225.50]
PLAY RECAP **************************************************************************************************************************************************************
108.136.225.50 : ok=11 changed=11 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
기본 사용자를 지정하지 않고 서버를 원격으로 다시 확인합시다. 이미 호스트 이름을 변경했기 때문에 재부팅도 할 것입니다.
$ ssh 108.136.225.50
__| __|_ )
_| ( / Amazon Linux 2 AMI
___|\___|___|
https://aws.amazon.com/amazon-linux-2/
[[email protected] ~]$ sudo reboot
Connection to 108.136.225.50 closed by remote host.
Connection to 108.136.225.50 closed.
ansible ad-hoc을 사용하여 호스트 이름과 시간대를 확인하여 설정을 확인합시다!
$ ansible -i host.yml new -m shell -a "hostname && date"
108.136.225.50 | CHANGED | rc=0 >>
amazonlinux2.localdomain
Sun Apr 24 15:35:24 WIB 2022
Amazon Linux 2용입니다! 다음 부분에서는 여기까지의 모든 게시물을 이미 팔로우했다면 우리가 만든 것을 삭제하겠습니다. 다음 포스팅으로 넘어가겠습니다!
참조:
https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Instances.html