Ansible 을 사용하여 로컬에서 원격 호스트로 파일 복사하는 방법

AnsibleBeginner
지금 연습하기

소개

Ansible 은 인프라 및 애플리케이션 관리를 단순화하는 강력한 오픈소스 자동화 도구입니다. 이 튜토리얼에서는 시스템 관리 및 DevOps 워크플로우에서 일반적인 작업인 로컬 머신에서 원격 호스트로 파일을 복사하는 방법을 Ansible 을 사용하여 살펴볼 것입니다.

Ansible 소개

Ansible 은 원격 시스템의 관리 및 구성 프로세스를 단순화하는 강력한 오픈소스 자동화 도구입니다. 사용하기 쉽고 에이전트리스 (agentless) 이며 확장성이 뛰어나 IT 전문가 및 DevOps 팀에게 훌륭한 선택입니다.

Ansible 이란 무엇인가요?

Ansible 은 소프트웨어 배포, 구성 관리, 인프라 프로비저닝과 같은 다양한 작업을 자동화할 수 있는 구성 관리 및 오케스트레이션 도구입니다. 시스템의 원하는 상태를 정의하는 데 YAML 이라는 간단하고 사람이 읽기 쉬운 언어를 사용하며, 이후 해당 시스템을 원하는 상태로 가져오기 위한 필요한 작업을 실행합니다.

Ansible 의 주요 기능

  • 에이전트리스 (Agentless): Ansible 은 관리하는 원격 시스템에 특별한 소프트웨어나 에이전트를 설치할 필요가 없습니다. SSH(또는 Windows 원격 관리) 를 사용하여 원격 호스트와 통신합니다.
  • 선언적 접근 방식 (Declarative Approach): Ansible 은 시스템의 원하는 상태를 정의하면 Ansible 이 해당 상태를 달성하기 위한 필요한 단계를 처리하는 선언적 접근 방식을 사용합니다.
  • 모듈식 설계 (Modular Design): Ansible 은 사전 제작된 모듈 또는 사용자 정의 모듈을 사용하여 기능을 확장할 수 있도록 모듈식 아키텍처로 설계되었습니다.
  • 멱등성 (Idempotency): Ansible 의 작업은 동일한 작업을 여러 번 실행해도 최종 결과가 변경되지 않도록 멱등성을 갖도록 설계되었습니다.
  • 간결하고 읽기 쉽게 (Simple and Readable): Ansible 의 YAML 기반 구문은 경험이 풍부한 사용자와 초보 사용자 모두에게 쉽게 읽고 작성할 수 있도록 설계되었습니다.

Ansible 의 활용 사례

Ansible 은 다음과 같은 다양한 시나리오에서 사용될 수 있습니다.

  • 소프트웨어 배포
  • 구성 관리
  • 인프라 프로비저닝
  • 애플리케이션 오케스트레이션
  • 보안 및 컴플라이언스 관리
  • 지속적 통합/지속적 배포 (CI/CD) 파이프라인

Ansible 시작하기

Ansible 을 시작하려면 제어 노드 (Ansible 명령을 실행할 컴퓨터) 와 하나 이상의 원격 호스트 (관리하려는 시스템) 가 필요합니다. 제어 노드에서 Ansible 을 설치하고 관리하려는 원격 호스트를 정의하는 인벤토리 파일을 설정해야 합니다.

Ubuntu 22.04 시스템에 Ansible 을 설치하는 방법은 다음과 같습니다.

sudo apt update
sudo apt install -y ansible

Ansible 을 설치하면 인프라 및 애플리케이션 관리 작업을 자동화하기 시작할 수 있습니다.

Ansible 을 이용한 파일 복사

인프라 자동화에서 가장 흔한 작업 중 하나는 제어 노드 (Ansible 을 실행하는 컴퓨터) 에서 원격 호스트로 파일을 복사하는 것입니다. Ansible 은 copy 모듈을 사용하여 이 작업을 간단하고 효율적으로 수행할 수 있도록 지원합니다.

copy 모듈

Ansible 의 copy 모듈은 제어 노드에서 원격 호스트로 파일을 복사하는 데 사용됩니다. 다음과 같은 다양한 옵션을 지원합니다.

  • src: 제어 노드의 원본 파일 또는 디렉토리.
  • dest: 원격 호스트의 대상 경로.
  • owner: 원격 호스트의 파일 소유자.
  • group: 원격 호스트의 파일 그룹.
  • mode: 원격 호스트의 파일 권한.

단일 파일 복사

제어 노드에서 원격 호스트로 단일 파일을 복사하려면 다음과 같은 Ansible playbook 을 사용할 수 있습니다.

- hosts: all
  tasks:
    - name: 파일 복사
      copy:
        src: /path/to/local/file.txt
        dest: /path/to/remote/file.txt
        owner: myuser
        group: mygroup
        mode: "0644"

이 예제에서 copy 모듈은 로컬 경로 /path/to/local/file.txtfile.txt 파일을 원격 경로 /path/to/remote/file.txt로 복사합니다. 파일은 myuser 사용자 및 mygroup 그룹에 속하며 권한은 0644(소유자 읽기/쓰기, 그룹 및 다른 사용자 읽기 전용) 입니다.

디렉토리 복사

제어 노드에서 원격 호스트로 전체 디렉토리를 복사하려면 다음과 같은 Ansible playbook 을 사용할 수 있습니다.

- hosts: all
  tasks:
    - name: 디렉토리 복사
      copy:
        src: /path/to/local/directory/
        dest: /path/to/remote/directory/
        owner: myuser
        group: mygroup
        mode: "0755"
        recursive: yes

이 예제에서 copy 모듈은 로컬 디렉토리 /path/to/local/directory/의 내용을 원격 디렉토리 /path/to/remote/directory/로 복사합니다. recursive 옵션을 yes로 설정하여 전체 디렉토리 구조가 복사되도록 합니다. 파일 및 디렉토리는 myuser 사용자 및 mygroup 그룹에 속하며 권한은 0755(소유자 읽기/쓰기/실행, 그룹 및 다른 사용자 읽기/실행) 입니다.

copy 모듈을 사용하면 제어 노드에서 원격 호스트로 파일 및 디렉토리를 쉽고 효율적으로 복사하여 인프라 자동화 워크플로우를 간소화할 수 있습니다.

Practical Example

In this section, we'll walk through a practical example of using Ansible to copy a file from the control node to a remote host.

Preparing the Environment

For this example, we'll assume that you have the following setup:

  • Control node: Ubuntu 22.04 system with Ansible installed
  • Remote host: Ubuntu 22.04 system

Make sure you have SSH access to the remote host and that the ansible user on the control node has the necessary permissions to connect to the remote host.

Creating the Ansible Playbook

Create a new file named copy_file.yml on the control node and add the following content:

- hosts: all
  tasks:
    - name: Copy a file
      copy:
        src: /path/to/local/file.txt
        dest: /path/to/remote/file.txt
        owner: myuser
        group: mygroup
        mode: "0644"

In this playbook:

  • hosts: all targets all the hosts defined in your Ansible inventory.
  • The copy module is used to copy the file file.txt from the local path /path/to/local/file.txt to the remote path /path/to/remote/file.txt.
  • The file will be owned by the myuser user and the mygroup group, and it will have permissions of 0644 (read-write for the owner, read-only for the group and others).

Running the Ansible Playbook

To run the playbook, execute the following command on the control node:

ansible-playbook copy_file.yml

Ansible will connect to the remote host(s) using SSH, copy the file, and set the appropriate ownership and permissions.

Verifying the Result

After running the playbook, you can log in to the remote host and verify that the file has been copied successfully:

ssh myuser@remote_host
ls -l /path/to/remote/file.txt

This should display the file with the expected ownership and permissions.

By following this practical example, you've learned how to use the copy module in Ansible to copy a file from the control node to a remote host. You can adapt this approach to your specific use cases and requirements, and continue exploring the rich functionality that Ansible provides for infrastructure automation.

실습 예제

이 섹션에서는 Ansible 을 사용하여 제어 노드에서 원격 호스트로 파일을 복사하는 실제 예제를 살펴봅니다.

환경 준비

이 예제에서는 다음과 같은 설정을 가정합니다.

  • 제어 노드: Ansible 이 설치된 Ubuntu 22.04 시스템
  • 원격 호스트: Ubuntu 22.04 시스템

원격 호스트에 SSH 접속이 가능하고, 제어 노드의 ansible 사용자가 원격 호스트에 연결할 필요한 권한이 있는지 확인하십시오.

Ansible Playbook 생성

제어 노드에 copy_file.yml이라는 새 파일을 만들고 다음 내용을 추가합니다.

- hosts: all
  tasks:
    - name: 파일 복사
      copy:
        src: /path/to/local/file.txt
        dest: /path/to/remote/file.txt
        owner: myuser
        group: mygroup
        mode: "0644"

이 playbook 에서:

  • hosts: all은 Ansible inventory 에 정의된 모든 호스트를 대상으로 합니다.
  • copy 모듈은 로컬 경로 /path/to/local/file.txtfile.txt 파일을 원격 경로 /path/to/remote/file.txt로 복사합니다.
  • 파일은 myuser 사용자 및 mygroup 그룹에 속하며 권한은 0644(소유자 읽기/쓰기, 그룹 및 다른 사용자 읽기 전용) 입니다.

Ansible Playbook 실행

playbook 을 실행하려면 제어 노드에서 다음 명령어를 실행합니다.

ansible-playbook copy_file.yml

Ansible 은 SSH 를 사용하여 원격 호스트에 연결하고 파일을 복사하며 적절한 소유권과 권한을 설정합니다.

결과 확인

playbook 실행 후 원격 호스트에 로그인하여 파일이 성공적으로 복사되었는지 확인할 수 있습니다.

ssh myuser@remote_host
ls -l /path/to/remote/file.txt

이 명령어는 예상되는 소유권과 권한을 가진 파일을 표시해야 합니다.

이 실습 예제를 통해 Ansible 의 copy 모듈을 사용하여 제어 노드에서 원격 호스트로 파일을 복사하는 방법을 배웠습니다. 이 접근 방식을 특정 사용 사례와 요구 사항에 맞게 적용하고, Ansible 이 제공하는 풍부한 인프라 자동화 기능을 계속 탐색할 수 있습니다.