728x90
반응형
SMALL

IaC(Infrastructure as Code) 28

Ansible Part. 7 (Condition)

Condition 이번엔 조건문에 대해서 알아보자. Ansible에서는 when이라는 키워드를 사용한다. 바로 예제를 보자. - name: Example hosts: all become: true vars: users: - name: john shell: /bin/bash enabled: true - name: alice shell: /bin/sh enabled: false - name: claud shell: /bin/bash enabled: true - name: henry shell: /bin/sh enabled: false - name: jeremy shell: /bin/bash enabled: true - name: may shell: /bin/sh enabled: false tasks: - n..

Ansible Part. 6 (Loop)

Loop Ansible Playbook을 작성할 때도 물론 Loop를 사용할 수 있다. 그리고 Ansible에서 기존 방식과 새롭게 생겨난 방식이 있는데 둘 다 알아보겠지만 앞으로 Deprecated되고 더 이상 사용하지 않게 될 가능성도 있으니 앞으로는 새롭게 생겨난 방식으로 코드를 작성해보자. with_ 아직은 Deprecated 되지 않았지만 추천하지 않는 구 방식인 with_을 살펴보자. - name: Playbook hosts: ubuntu become: true tasks: - name: "Create groups" group: name: "{{ item }}" state: "present" with_items: - backend - frontend - devops 위 코드를 보면 group을..

Ansible Part. 5 (Variables)

Variables Ansible에서 변수를 사용하는 방법은 다양하다. 그 중 몇가지를 알아보는 시간을 가져보자. inventory 파일 다음과 같이 inventory 파일을 작성해보자. ubuntu 그룹에 원하는 변수를 아래처럼 이어 작성하면 된다. [amazon] amazon1 ansible_host=43.202.58.98 ansible_user=ec2-user amazon2 ansible_host=3.38.182.30 ansible_user=ec2-user [ubuntu] ubuntu1 ansible_host=ec2-43-201-253-181.ap-northeast-2.compute.amazonaws.com ansible_user=ubuntu user_name=cwchoiit user_comment=..

Ansible Part. 4 (Handler)

Handler 핸들러는 이벤트 기반으로 동작하는 Task. 예를 들어, 지금까지는 Tasks 내부에 여러 Task를 정의하고 순차적으로 실행이 됐는데, 만약 어떤 Task가 다른 Task에 의존성이 있어야 하는 경우 그 의존성을 만족하여 실행하게 하는 게 쉽지 않다. 이를 해결하는 방법 중 하나가 Handler라고 생각하면 된다. 예시를 들어보자. 만약, 내가 Nginx 서버 설정을 변경했으면 서버 설정이 변경됐으니 Nginx를 재실행해야 변경 사항이 적용되는데 서버 설정을 변경하고 Ansible이 변경을 감지했을 때 재실행하게 하고 싶을 때 Handler를 사용하면 된다. 실습 파일 구조가 다음과 같이 되어 있다. 여기서 default 파일이 Nginx 서버 설정 파일인데 이 파일을 보자. defaul..

Ansible Part. 3 (Playbook)

Playbook Ansible로 무언가를 실행하고 작업할 때 여러 방법이 있다고 했는데 그 중 Adhoc 방법을 다뤄봤고 이번에 다룰 내용이 Playbook이다. Playbook은 YAML 파일로 되어있는데 하나씩 뜯어보자. 우선 디렉토리 구조는 다음과 같다. Inventory 이 파일은 저번 포스팅에서 다룬 인벤토리 관련 파일이다. 이번에는 딱 하나의 파일만 존재한다. [amazon] amazon1 ansible_host=54.180.201.128 ansible_user=ec2-user amazon2 ansible_host=13.124.98.155 ansible_user=ec2-user [ubuntu] ubuntu1 ansible_host=ec2-43-203-218-29.ap-northeast-2.co..

Ansible Part. 2 (Adhoc)

이전 시간에 Inventory 파일들을 만들어보고 알아보았다. 그럼 이 파일을 어떻게 수행하고 어떻게 실행해야 하는걸까? 여러 방법이 있지만 그 중 하나인 Adhoc 방법에 대해 알아보자. Adhoc 쉽게 말하면, ansible이라는 명령어를 통해 수행하는 CLI 방식이라고 생각하면 된다. 형식은 다음과 같이 생겼다. ansible [host-pattern] [-m module] [-a 'module options'] [-i inventory] host-pattern: 그룹명을 의미한다. -m module: Adhoc 명령어를 통해 실행할 ansible 모듈을 의미한다. -a module options: 모듈에 특정 옵션을 부여할 경우 -i inventory: 특정 인벤토리 파일의 경로 ping 모듈 ..

Ansible Part. 1 (Inventory)

이제 서버 형상 관리 도구인 "Ansible"을 사용해보자. Ansible을 사용하기에 있어 가장 먼저 이해해야 하는 개념은 Inventory이다. Inventory 인벤토리란 Ansible을 사용하는 것은 특정 서버에 대해 형상 관리를 하기 위함인데 그렇다는 것은 특정 서버에 대한 정보가 필요하다. 그 정보를 관리하는 파일을 'Ansible'에서는 Inventory라고 한다. 이 Inventory는 그룹 기능을 지원하는데 예를 들어 내가 Linux 운영체제의 배포판 중 하나인 Ubuntu 서버를 3개를 관리하고 있다고 하면 Ubuntu라는 그룹을 만들어서 해당 그룹에 3개의 서버를 모두 할당할 수 있다. 그럼 그룹으로 실행해야 하는 명령어나 상태 체크같은 것들이 가능해지니 효율적인 관리가 될 수 있겠다..

Packer Part. 5 (Post Processor)

Post Processor Post Processor란 말 그대로 후처리기이다. 패커가 빌드를 한 후에 실행되는 작업들을 정의하는 부분이라고 보면 되겠다. 문서를 보면 여러 Post Processor가 있는것을 확인할 수 있다. Post-Processors | Packer | HashiCorp Developer Post-processors run after the image is built by the builder and provisioned by the provisioner(s). developer.hashicorp.com 이 중에서 자주 사용되는 몇가지를 알아보자. Checksum Packer로 빌드를 하면 보통은 산출물이 나오게 된다. 이를 Artifact라고 하는데, 이 Artifact를 가지고..

Packer Part. 4 (Data Source)

Data Source Terraform에서 알던 Data Source와 정확히 일치한다. 그래서 바로 예제 코드를 실행해보면서 어떻게 동작하는지 보자. versions.pkr.hcl packer { required_version = "~> 1.7" required_plugins { amazon = { version = "~> 1.0" source = "github.com/hashicorp/amazon" } } } sources.pkr.hcl 여기서 data 블록이 Data Source이다. Ubuntu AMI를 Data Source로 가져오는 방식을 취했다. 이 방법의 이점은 source가 많아지는데 같은 Ubuntu AMI를 사용할 때 중복 코드를 제거해줄 수 있겠다. data "amazon-ami" ..

Packer Part. 3 (Provisioner)

Provisioner Provisioner는 머신 이미지 내부에 필요한 설정이나 소프트웨어를 설치할 때 사용한다. 예를 들면 필요 패키지 설치, 사용자 생성 등 이런 머신 이미지 내 필요한 작업을 Provisioner를 통해서 할 수 있다. 그리고 이 Provisioner의 종류가 굉장히 많다. 문서를 참조하면 더 많은 정보를 알 수 있다. 그럼 직접 사용해보자. versions.pkr.hcl 각 버전 정보들을 기입한 파일이다. 특이 사항은 없다. packer { required_version = "~> 1.7" required_plugins { amazon = { version = "~> 1.0" source = "github.com/hashicorp/amazon" } } } sources.pkr.hc..

728x90
반응형
LIST