728x90
반응형
SMALL

IAC 26

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 모듈 ..

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..

Packer Part. 2 (Builder)

Builder Packer에서 Builder는 어떤 이미지를 만들것이냐?에 대한 물음이다. 예를 들어 Amazon EBS에 대한 이미지를 만들고 싶다면 Builder는 Amazon EBS가 된다. 그래서 Builder에 대해 간략하게 알아보자. Null Builder null 빌더는 말 그대로 아무것도 만들어내지 않겠다는 의미이다. 이걸 그럼 왜쓰냐? 일반적으로 디버깅이 필요할 때 사용한다고 한다. (공식문서 참조) 우리도 이 Null builder로 각종 테스트를 해보자. versions.pkr.hcl packer { required_version = "~> 1.7" required_plugins { amazon = { version = "~> 1.0" source = "github.com/hashic..

728x90
반응형
LIST