728x90
반응형
SMALL
SMALL

 

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를 가지고 후처리기가 또 다른 산출물을 만들게 된다. 그럼 Checksum은 어떤것이냐면, 해시함수를 이용해서 파일의 무결성을 검증하는 용도라고 생각하면 된다. 그래서 데이터 파일이 주어지면 해당 파일을 가지고 md5, sha256 같은 checksum type을 통해 해시값을 구하고 이 파일이 변조된 상태인지 아닌지를 판단할 수 있게 해준다.

 

Compress

빌드 결과물을 압축해주는 후처리기이다. 

 

Manifest

Packer가 빌드를 하면 빌드 결과에 대한 메타데이터를 가지는 파일이 있는데 이 파일을 만들어주는 후처리기이다.

 

Local Shell

사용자가 원하는 후처리기가 없을 때 커스텀하여 만드는 후처리기이다. 그래서 로컬 머신에서 원하는 명령어를 수행할 수 있게 된다.

 

 

Post Processor 사용해보기

이제 직접 후처리기를 사용해서 어떤식으로 동작하는지 확인해보자.

versions.pkr.hcl

packer {
    required_version = "~> 1.7"

    required_plugins {
        amazon = {
            version = "~> 1.0"
            source = "github.com/hashicorp/amazon"
        }
    }
}

sources.pkr.hcl

data "amazon-ami" "ubuntu" {
    filters = {
        virtualization-type = "hvm"
        name = "ubuntu/images/*ubuntu-focal-20.04-amd64-server-*"
        root-device-type = "ebs"
    }

    owners = ["099720109477"]
    most_recent = true
}

source "amazon-ebs" "ubuntu" {
    instance_type = "t2.micro"
    region = "ap-northeast-2"
    subnet_id = "subnet-0b23fd05b5919269e"
    associate_public_ip_address = true
    ssh_interface = "public_ip"
    source_ami = data.amazon-ami.ubuntu.id

    ssh_username = "ubuntu"
}

main.pkr.hcl

build {
    name = "cwchoiit-packer"

    source "amazon-ebs.ubuntu" {
        name = "nginx"
        ami_name = "cwchoiit-packer"
    }

    post-processor "manifest" {} # 첫번째 post-processor는 빌드 산출물을 다이렉트로 입력으로 받게 된다.

    post-processors {
        # post-processors의 첫번째 post-processor 역시 빌드 산출물을 다이렉트로 입력으로 받는다.
        post-processor "shell-local" {
            inline = ["echo Hello World ! > artifact.txt"]
        }
        # post-processors의 첫번째가 아닌 post-processor들은 첫번째 단계의 산출물을 입력으로 가져올 수 있게 된다.
        # 여기 같은 경우는 첫번째 post-processor가 shell-local이라 딱히 산출물이 없는데 파일(artifact.txt)을 만들어내는 스크립트가 있다.
        # 그리고 그 파일을 post-processor의 산출물로 만들고 싶으면 이 "artifice" 라는 후처리기를 사용하면 된다.
        # 그러면 이 files에 지정한 파일들을 다음 post-processor에게 전달하게 된다.
        post-processor "artifice" {
            files = ["artifact.txt"]
        }
        post-processor "compress" {}
    }

    post-processors {
        # post-processors의 첫번째 post-processor 역시 빌드 산출물을 다이렉트로 입력으로 받는다.
        post-processor "shell-local" {
            inline = ["echo Finished!"]
        }
    }
}

 

이 파일에 후처리기가 존재한다. 후처리기는 post-processor, post-processors 두 개의 블록으로 만들어 낼 수 있고 문자 그대로 복수개나 단일개냐의 차이가 있다. 그리고 후처리기를 사용하면서 알아야 할 것이 있는데 빌드가 끝난 후 최초의 post-processor와 post-processors의 첫번째 post-processor는 모두 빌드 산출물을 다이렉트로 입력으로 받게 된다. 그럼 post-processors의 두번째 세번째는 어떻게 동작하냐면 post-processors의 첫번째 post-processor의 산출물을 입력으로 가져올 수 있게 된다. 근데 저 예시에서 보면 첫번째 후처리기가 shell-local이고 이 녀석같은 경우 별다른 산출물을 만들어 내지 않는데 명령어로 artifact.txt라는 파일을 만들었다. 이 파일을 산출물로 만들고 싶으면 사용할 수 있는 다음 후처리기가 artifice라는 후처리기이다. 그 후처리기한테 files 리스트에 원하는 산출물을 넣으면 그 파일이 다음 후처리기에게 산출물로 적용된다.

 

이제, 이것을 실행해보자.

packer build .

 

아래 보면, Running post-processor 부분이 있다. 순서대로 manifest, shell-local, artifice, compress, shell-local 순으로 진행되는 모습을 볼 수 있다.

그리고 이렇게 빌드가 끝나면 실행한 경로에서 다음과 같이 새로운 파일들이 생겨났음을 볼 수 있다.

 

하나는 manifest 후처리기를 통해 만들어진 manifest 파일이고, 하나는 compress 후처리기를 통해 만들어진 압축파일이다. 압축파일을 풀어보자. 우선 어떤 형태의 파일인지 알아보기 위해 다음 명령어를 수행해보자.

보면 gzip 파일 형식으로 되어있다. 그래서 이름을 .gz 형태로 바꿔보자.

mv packer_ubuntu_amazon-ebs packer_ubuntu_amazon-ebs.gz

 

다음은, gzip형태의 파일을 압축 해제한다.

gunzip packer_ubuntu_amazon-ebs.gz

 

그 다음, 다시 파일의 형태를 살펴보면 tar 파일 형식임을 알 수 있다.

 

이제 tar 형식의 파일도 압축 해제하자.

tar xvzf packer_ubuntu_amazon-ebs

 

그럼 비로소 우리가 만든 artifact.txt 파일이 보여진다.

 

확인해보면 다음과 같은 결과를 얻는다.

 

 

결론

후처리기를 사용해서 패커 빌드 이후 작업을 수행해보았다. 

728x90
반응형
LIST

'IaC(Infrastructure as Code)' 카테고리의 다른 글

Ansible Part. 2 (Adhoc)  (3) 2024.03.17
Ansible Part. 1 (Inventory)  (3) 2024.03.17
Packer Part. 4 (Data Source)  (0) 2024.03.14
Packer Part. 3 (Provisioner)  (0) 2024.03.14
Packer Part. 2 (Builder)  (0) 2024.03.14
728x90
반응형
SMALL
SMALL

 

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" "ubuntu" {
    filters = {
        virtualization-type = "hvm"
        name = "ubuntu/images/*ubuntu-focal-20.04-amd64-server-*"
        root-device-type = "ebs"
    }

    owners = ["099720109477"]
    most_recent = true
}

source "amazon-ebs" "ubuntu" {
    instance_type = "t2.micro"
    region = "ap-northeast-2"
    subnet_id = "subnet-0b23fd05b5919269e"
    associate_public_ip_address = true
    ssh_interface = "public_ip"
    source_ami = data.amazon-ami.ubuntu.id

    ssh_username = "ubuntu"
}

 

main.pkr.hcl

여기서도 Data Source 하나가 더 사용된다. amazon-secretsmanager 라는 Data Source이다. 

data "amazon-secretsmanager" "cwchoiit" {
    name = "cwchoiit"
    key = "test"
}

build {
    name = "cwchoiit-packer"

    source "amazon-ebs.ubuntu" {
        name = "nginx"
        ami_name = "cwchoiit-packer-nginx"
    }

    provisioner "shell" {
        inline = [
            "sudo apt-get update",
            "echo Secret is ${data.amazon-secretsmanager.cwchoiit.value}"
        ]
    }

    provisioner "file" {
        source = "${path.root}/files/index.html"
        destination = "/tmp/index.html"
    }

    provisioner "shell" {
        inline = [
            "echo ${source.name} and ${source.type}",
            "whoami",
            "sudo apt-get install -y nginx",
            "sudo cp /tmp/index.html /var/www/html/index.html"
        ]
    }
}

 

AWS에서 제공하는 Secrets Manager 서비스에 대한 Data Source이다. Sensitive한 데이터를 저장하고 보관할 때 이 서비스를 활용할 수 있겠다. name 속성은 Secret Manager의 Secret name을 나타낸다. key는 해당 데이터에 들어가 있는 Key/Value의 Key를 나타낸다.

저 값을 가져오는 Data Source라고 생각하면 된다. 그리고 그 아래는 전에 봤던 build 블록이다. 그리고 provisioner에서 보면 Secret의 value값을 찍는 명령어가 보인다. 한번 build 해보자.

packer build .

 

이런식으로 Terraform과 정확히 동일하게 같은 개념으로 Data Source를 이해할 수 있었다.

728x90
반응형
LIST

'IaC(Infrastructure as Code)' 카테고리의 다른 글

Ansible Part. 1 (Inventory)  (3) 2024.03.17
Packer Part. 5 (Post Processor)  (2) 2024.03.15
Packer Part. 3 (Provisioner)  (0) 2024.03.14
Packer Part. 2 (Builder)  (0) 2024.03.14
Packer Part. 1  (0) 2024.03.14
728x90
반응형
SMALL
SMALL

 

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

빌드에 필요한 source 정보를 기입한 파일이다. Amazon EBS 리소스를 가진 AMI를 만들 예정이다. 지난 시간에 작성한 내용과 일치하니 특이 사항은 없다.

source "amazon-ebs" "ubuntu" {
    instance_type = "t2.micro"
    region = "ap-northeast-2"
    subnet_id = "subnet-0b23fd05b5919269e"
    associate_public_ip_address = true
    ssh_interface = "public_ip"

    source_ami_filter {
        filters = {
            name = "ubuntu/images/*ubuntu-focal-20.04-amd64-server-*"
            root-device-type = "ebs"
            virtualization-type = "hvm"
        }

        most_recent = true
        owners = ["099720109477"]
    }

    ssh_username = "ubuntu"
}

 

files/index.html

<h1>Hello Packer</h1>

 

main.pkr.hcl

이 파일에서 실제로 어떤것을 빌드할지를, 빌드 후 어떤 처리를 할지를 정의한 파일이다. 

build {
    name = "cwchoiit-packer"

    source "amazon-ebs.ubuntu" {
        name = "nginx"
        ami_name = "cwchoiit-packer-nginx"
    }

    # Provisioner는 정의한 순서대로 실행하기 때문에 순서가 중요하다.
    provisioner "shell" {
        inline = [
            "sudo apt-get update",
            "whoami",
        ]
    }

    provisioner "file" {
        source = "${path.root}/files/index.html"
        destination = "/tmp/index.html"
    }

    provisioner "shell" {
        inline = [
            "echo ${source.name} and ${source.type}",
            "whoami",
            "sudo apt-get install -y nginx",
            "sudo cp /tmp/index.html /var/www/html/index.html"
        ]
    }

    provisioner "breakpoint" {
        disable = false
        note = "For debugging"
    } 
}

 

source는 위에서 작성한 amazon-ebs.ubuntu를 사용한다. 그리고 name, ami_name을 expand했다.

 

이제 provisioner가 4개 있다. shell provisioner는 내부에서 명령어를 통해 어떤 작업을 하기 위해서 사용한다.

 

첫번째 shell provisioner는 ubuntu의 패키지 매니저인 apt-get update를 하고 현재 사용자가 누구인지를 알려주는 명령어를 실행한다.

두번째 file provisioner는 로컬의 파일을 내부로 복사하는 역할을 한다. path.root는 이 build 블록이 있는 파일을 가리킨다.

세번째 shell provisioner는 source라는 녀석을 가져와 명령어에 사용할 수 있음을 보여주기 위해 작성하고, 현재 유저가 누구인지와, nginx를 설치하는 작업, 복사한 파일을 nginx가 띄우는 경로로 이동하는 작업까지 진행한다.

네번째 breakpoint provisioner는 디버깅용으로 사용된다. 작업 중에 잠시 멈춰진다. 다음과 화면을 보자.

이 상태에서 사용자가 Enter를 입력해야 다음으로 넘어간다.

 

이제, Enter를 입력하기 전에 Build를 한 내용대로 인스턴스가 만들어졌는지 확인해보자. (Enter를 입력하면 AMI를 만들어내기 위한 모든 작업을 끝마쳤기 때문에 인스턴스를 중지하고 종료해서 인스턴스에서 작업된 내용을 확인할 수 없다.)

Build 과정은 머신위에 Nginx를 설치하고 파일 하나를 옮겼고 그 파일을 Nginx가 웹 상에 호스팅하게 했다. 한번 확인해보자. 우선 생성된 인스턴스의 보안 그룹에 80 포트를 허용해주자.

 

그래야 80 포트로 밖에서 접속할 수 있다. 그 다음, 해당 인스턴스의 Public IP로 들어가보면 위 index.html 파일이 보여진다.

이렇게 우리가 설정한 대로 Provisioner가 작동한 것이다. 이런 설정 및 패키지 설치와 같은 작업을 Provisioner가 한다고 보면 된다.

그리고 반드시 명심할 것: Provisioner는 작성한 순서대로 동작한다. 이제 엔터를 입력해서 끝마치자.

 

728x90
반응형
LIST

'IaC(Infrastructure as Code)' 카테고리의 다른 글

Packer Part. 5 (Post Processor)  (2) 2024.03.15
Packer Part. 4 (Data Source)  (0) 2024.03.14
Packer Part. 2 (Builder)  (0) 2024.03.14
Packer Part. 1  (0) 2024.03.14
Terraform Provisioner/EC2 Userdata  (2) 2024.03.11
728x90
반응형
SMALL
SMALL

 

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/hashicorp/amazon"
        }
    }
}

 

sources.pkr.hcl

source "null" "one" {
    communicator = "none"
}

source "null" "two" {
    communicator = "none"
}

저번 시간에도 source가 바로 어떻게 빌드할 것인지에 대한 내용이라고 했는데, 이처럼 null은 뭐가 거의 없다. communicator = "none"이 의미하는 건 이 빌더랑 Packer가 통신하는 방법(SSH, WinRM)은 필요 없다는 의미이다.

 

main.pkr.hcl

# Without name
build {
    sources = [
        "source.null.one",
        "source.null.two",
    ]
}

# With name
build {
    name = "cwchoiit-packer"

    sources = [
        "source.null.one",
        "source.null.two",
    ]
}

# Fill-in (기존 source를 확장하는 기능, 근데 원래 있던 것을 변경하는 것은 불가능하다. 예를 들어, 기존에 null.one이 가지고 있던 communicator를 여기서 변경하는 행위)
build {
    name = "cwchoiit-packer-fill-in"
    
    source "null.one" {
        name = "terraform"
    }

    source "null.two" {
        name = "vault"
    }
}

이 부분을 보면 세 개의 build 블록으로 나뉘어져 있다. 빌드의 이름이 없는 경우, 빌드의 이름이 있는 경우, 빌드의 이름이 있고 source를 expand하는 경우 총 세가지다. 이런 각각의 방법으로 build를 할 수가 있다는 것을 보여준다.

 

빌드를 해보자.

packer build .

 

이렇게 각 빌드별로 달라지는 Outputs을 볼 수 있다. 

 

Build only/except

원하는 것만 빌드하고 싶을 때 사용하는 옵션을 알아보자.

packer build -only=null.one .

이처럼 원하는 소스만 빌드할 수 있다.

 

특정 소스만 제외하고 빌드를 하고 싶다면 except 옵션을 사용하면 된다.

packer build -except=null.one .

제외 시킨 것 말고 다 빌드가 되는 모습이다.

 

728x90
반응형
LIST

'IaC(Infrastructure as Code)' 카테고리의 다른 글

Packer Part. 4 (Data Source)  (0) 2024.03.14
Packer Part. 3 (Provisioner)  (0) 2024.03.14
Packer Part. 1  (0) 2024.03.14
Terraform Provisioner/EC2 Userdata  (2) 2024.03.11
terraform_remote_state  (0) 2024.03.10
728x90
반응형
SMALL
SMALL

Packer

hashicorp에서 제공하는 Packer라는 도구를 사용해보자. 우선 Packer는 멀티 플랫폼 이미지 빌드 도구이다. 예를 들면 AMI, Docker 등 여러 가상 머신위에 올리기 위해 사용되는 머신 이미지를 HCL 문법으로 만들어 낼 수 있다. 

 

간단하게 EBS가 내재된 AMI를 만들어보는 예제를 통해 시작해보자.

 

main.pkr.hcl

packer {
    required_version = "~> 1.7"    

    required_plugins {
        amazon = {
            version = "~> 1.0"
            source = "github.com/hashicorp/amazon"
        }
    }
}

source "amazon-ebs" "ubuntu" {
    ami_name = "cwchoiit-packer"
    instance_type = "t2.micro"
    region = "ap-northeast-2"
    subnet_id = "subnet-0b23fd05b5919269e"
    associate_public_ip_address = true
    ssh_interface = "public_ip"

    source_ami_filter {
        filters = {
            name = "ubuntu/images/*ubuntu-focal-20.04-amd64-server-*"
            root-device-type = "ebs"
            virtualization-type = "hvm"
        }
        most_recent = true

        owners = ["099720109477"]
    }

    ssh_username = "ubuntu"
}

build {
    name = "cwchoiit-packer"
    sources = [
        "source.amazon-ebs.ubuntu"
    ]
}

 

우선 첫 부분인 다음 코드를 보자. Packer를 사용하기 위한 버전 명시와 어떤 플랫폼의 이미지를 만들어 낼 것인가에 대한 Plugin을 작성하는 부분이다. 

packer {
    required_version = "~> 1.7"    

    required_plugins {
        amazon = {
            version = "~> 1.0"
            source = "github.com/hashicorp/amazon"
        }
    }
}

 

이제 source 부분이다. 이 부분이 이미지를 만들어 내기 위해 필요한 내용이 담긴 부분이다.

source "amazon-ebs" "ubuntu" {
    ami_name = "cwchoiit-packer"
    instance_type = "t2.micro"
    region = "ap-northeast-2"
    subnet_id = "subnet-0b23fd05b5919269e"
    associate_public_ip_address = true
    ssh_interface = "public_ip"

    source_ami_filter {
        filters = {
            name = "ubuntu/images/*ubuntu-focal-20.04-amd64-server-*"
            root-device-type = "ebs"
            virtualization-type = "hvm"
        }
        most_recent = true

        owners = ["099720109477"]
    }

    ssh_username = "ubuntu"
}

 

Terraform을 공부한 상태다보니 이해가 안가는 부분은 없다. 여기서 subnet_id를 명시한 이유는 나 같은 경우 Default VPC가 없기 때문에 반드시 Subnet을 명시해줘야 한다. 그리고 associate_public_ip_address도 true로 설정하지 않으면 AMI를 만들기 위해 새로 생성되는 EC2의 Public IP가 존재하지 않기 때문에 SSH 접속을 Packer가 할 수 없다. 그래서 'true'로 설정해줘야 한다. 

 

source_ami_filter는 기반이 되는 AMI를 지정하는 부분이다. ubuntu 이미지 가장 최신 버전을 사용하기로 한다. 

 

마지막 부분인 build 부분이다. 이 부분은 빌드의 이름과 어떤 것을 빌드할 것인지에 대한 정보를 기입한다. 

build {
    name = "cwchoiit-packer"
    sources = [
        "source.amazon-ebs.ubuntu"
    ]
}

 

이렇게 작성한 파일을 가지고 다음 명령어를 입력한다. 

packer init .

우선 init 명령어를 통해 필요한 plugin을 내려받아야 한다. 이 명령어가 잘 수행되면 다음 명령어를 입력한다.

packer build .

 

이제 빌드를 시작한다. 빌드를 시작하면 다음과 같은 화면이 보일것이다. 

과정을 보면 알겠지만 일시적으로 SSH에 접속하기 위해 Key pair와 Security group을 생성하는것이 보인다. 이 부분도 명시해서 가져다가 사용하게 할 수 있지만 이 예제에선 Packer가 직접 만들도록 했다. 그리고 인스턴스가 생성된 후 SSH로 인스턴스에 접속한다. 그 이유는 AMI는 인스턴스에서 필요한 모든 패키지나 기본 설정을 다 한 상태에서의 이미지이기 때문에 그런것들이 있다면 해당 인스턴스에서 설치 작업을 수행해야 하기 때문에 SSH에 접속하는 것이다. 그러나 이 예제에는 따로 설치할 것은 없다. 내가 정의하지 않았으니까. 이렇게 인스턴스가 만들어지고 AMI가 만들어지면 일시적으로 만든 Security group, Key pair, Instance가 삭제된다. 

 

그리고 그 결과로 이런 AMI가 만들어진다. AWS Console에서도 확인 가능하다.

 

728x90
반응형
LIST

'IaC(Infrastructure as Code)' 카테고리의 다른 글

Packer Part. 3 (Provisioner)  (0) 2024.03.14
Packer Part. 2 (Builder)  (0) 2024.03.14
Terraform Provisioner/EC2 Userdata  (2) 2024.03.11
terraform_remote_state  (0) 2024.03.10
Terraform 나만의 Module 만들어보기  (0) 2024.03.10
728x90
반응형
SMALL
SMALL

 

Packer란

Packer는 이미지 빌더 도구이다. 여기서 이미지란 Docker나 AWS EC2 Image와 같은 그 이미지를 말한다. AMI 같은 경우 AWS에서 사용할 수 있지만 이 Packer는 이미지를 여러 플랫폼에서 사용할 수 있게 만들어준다.

 

 

Packer 설치하기

공식 문서를 참조하면 각자의 운영체제에 맞게 설치할 수 있다.

 

Install | Packer | HashiCorp Developer

Explore Packer product documentation, tutorials, and examples.

developer.hashicorp.com

 

나는 macOS 사용중이므로 다음 명령어를 통해 설치한다.

brew tap hashicorp/tap
brew install hashicorp/tap/packer

 

설치가 다 됐으면 버전 확인을 해보자.

 

 

Packer 자동 완성 기능 설정

packer -autocomplete-install

 

명령어 수행 후 본인의 쉘 설정 파일에 들어가서 최하단에 다음 문장 확인.

complete -o nospace -C /usr/local/bin/packer packer

 

쉘 다시 킨 후 "packer"를 입력하고 tab을 눌러 자동완성 기능 적용 확인.

 

 

Ansible 설치하기

다음 명령어를 수행하자.

brew install ansible

 

설치가 됐으면 버전 확인.

 

728x90
반응형
LIST

'IaC(Infrastructure as Code)' 카테고리의 다른 글

AWS + Terraform (Module)  (0) 2024.03.06
AWS + Terraform  (2) 2024.03.05
Terraform 소개 및 간단하게 다루어보기  (0) 2024.03.05
Terraform 설치 및 설정하기  (2) 2024.03.05
IaC 개요  (2) 2024.03.05

+ Recent posts