Packer를 사용하여 SharePoint Golden Amazon 머신 이미지 생성

10454 단어 devopssharepoint

황금 이미지는 무엇입니까?


골드 이미지는 가상 시스템(VM), 가상 데스크탑, 서버 또는 하드 드라이브의 템플릿입니다.일반적으로 클론 이미지, 1차 이미지 또는 기본 이미지라고도 합니다.
황금 이미지를 만들려면 관리자가 먼저 필요한 방식으로 계산 환경을 설정한 다음 디스크 이미지를 하나의 모델로 저장하여 더 많은 복사본을 만들 수 있습니다.Golden images를 사용하면 시간을 절약할 수 있고 중복 설정 변경과 성능 조정의 필요성을 제거함으로써 일치성을 확보할 수 있습니다.
이 예에서는 Packer를 사용하여 SharePoint 2019 설치를 위한 금색 이미지를 만들고 이 템플릿을 Amazon 머신 이미지(AMI)로 저장합니다.그런 다음 이 AMI를 사용하여 SharePoint 팜의 구축을 자동화할 수 있습니다.

우리의 황금 이미지에는 무엇이 포함되어야 합니까?


SharePoint 이미지의 경우 애플리케이션을 설치하는 데 필요한 모든 것을 포함하고자 합니다.SharePointDSC는 PowerShell 모듈로 PowerShell에 필요한 구성(DSC)을 사용하여SharePoint 필드를 배치하고 관리할 수 있습니다.이 글에서 DSC가 무엇인지 자세히 소개하지는 않지만, 비교적 높은 차원에서 Windows에 내장된 설정 관리 플랫폼으로 DevOps를 위한 것이다.
SharePointDSC 모듈을 제외하고는 SharePoint 바이너리 파일, SharePoint 설치에 필요한 모든 필수 파일, 최신 SharePoint 누적 업데이트(CU)가 필요합니다.
요컨대 이것이 바로 우리가 황금 이미지에 포함할 내용이다.
  • SharePointDSC PowerShell module
  • SharePoint 2019 바이너리 파일
  • SharePoint 2019의 필수 파일
  • 최신 SharePoint 2019 CU
  • 우리는 어떤 공구를 사용할 것입니까?


    우리는 주로 다음과 같은 도구를 사용하여 우리의 황금 이미지를 만들 것이다.
  • Packer-Hashicorp에서 제공하는 무료 소스 오픈 도구
    여러 플랫폼의
    단일 소스 구성.
  • AWS CLI - AWS 명령줄 인터페이스(CLI)는 일관성
    AWS 서비스를 관리하는 도구AWS CLI
    AWS에서 Dell 리소스를 만들고 관리하는 Packer
    AMI
  • Visual Studio 코드(옵션) - 내 개인 IDE 선택 사항.
    왜냐하면 저희가 YAML 및 HCL과 주로 작업을 하거든요.
    모든 IDE 또는 텍스트를 사용할 수 있는 사람이 읽을 수 있는 두 가지 언어
    변경된 편집
  • Linux Windows 서브시스템(옵션) - Windows이기 때문에
    사용자와 Ansible은 Windows에서 실행되지 않습니다.
    Windows Linux 서브시스템(WSL)을 통해
    이미지VS 코드는 WSL 터미널을 실행할 수 있는 기능을 제공합니다.
    IDE 내부에서
    테스트
  • Packer 시작


    차단기의 행위는 차단기 템플릿에 의해 결정되며, 이 템플릿은 차단기가 따르는 일련의 성명과 명령으로 구성됩니다.이 템플릿은 Packer가 사용할 플러그인(빌더, 공급자, 후처리기), 플러그인을 어떻게 설정하고 실행하는지 알려줍니다.
    이 템플릿은 유연한 변수 주입 도구와 사용자 정의 구축을 돕는 내장 함수를 포함합니다.
    역사상 Packer는 JSON 템플릿을 사용하여 설정했지만, Packer는 HCL2를 사용하는 새로운 템플릿 설정 형식인 Terraform과 HashiCorp의 다른 제품에서 사용하는 설정 언어로 전환하고 있습니다.이런 형식은 원시적인 JSON 템플릿 형식보다 더욱 유연하고 모듈화되며 간결하다.이 예에서는 HCL2를 사용합니다.

    짓다


    HCL 언어의 주요 목적은 구축과 원본을 정의하는 것이다.모든 다른 언어 특성의 존재는 구축된 정의를 더욱 유연하고 편리하게 하기 위해서이다.HCL 언어의 구문은 몇 가지 기본 요소만 포함합니다.

    가로막다


    블록은 원본과 같은 다른 내용의 용기로서 일반적으로 어떤 대상의 설정을 나타낸다.블록에는 블록 유형이 있고 0개 이상의 레이블이 있을 수 있으며 매개변수와 네스트된 블록이 포함된 바디가 있습니다.Packer의 대부분 기능은 구성 파일의 최상위 블록에 의해 제어됩니다.Packer-HCL2 언어에는 구성 빌드에 사용할 수 있는 여러 언어built-in blocks가 포함되어 있습니다.블록은 구성에 사용되는 컨테이너입니다.가장 중요한 청크는 두 가지 주요 유형으로 나눌 수 있습니다.

    집짓기


    빌드 블록은 템플릿을 작성하는 데 사용됩니다.그것들은 특정한 이미지 구성 요소를 만드는 데 사용되는 구축기, 공급기, 프로세서의 특정한 조합을 포함한다.

    소스 블록


    원본 코드 블록은 생성기 플러그인의 설정을 포함합니다.소스가 정의되면 빌드 블록은 소스를 사용하고 추가로 구성할 수 있습니다.

    데이터 블록


    데이터 블록 정의 패키지 설정의 데이터 원본입니다.

    공급 블록


    Provisioner 블록은 운영 체제를 설치한 후 템플릿과 상호 작용하는 방법입니다.이러한 블록은 구성 블록에 내포됩니다.SSH 또는 WinRM을 사용하여 운영 체제와 통신합니다.Google은 Windows PowerShell과 파일 설정 프로그램 두 개의 Gold 이미지를 위한 프로그램에 초점을 맞출 것입니다.

    가변 블록


    변수 블록에는 기본적으로 또는 런타임 시 사용자가 설정할 수 있는 변수 구성이 포함되어 있습니다.

    차단기 템플릿


    SharePoint Golden AMI를 생성하는 데 사용되는 패키지 템플릿을 분해합니다.

    가변 블록


    패키지 템플릿의 첫 번째 부분은 변수 블록입니다. 템플릿의 나머지 부분에 사용할 변수를 정의하는 데 사용됩니다.
    variable "vpc_region" {
      type    = string
      default = "$${vpc_region}"
    }
    
    variable "instance_type" {
      type    = string
      default = "$${instance_type}"
    }
    
    variable "username" {
      type    = string
      default = "$${username}"
    }
    
    variable "password" {
      type    = string
      default = "$${password}"
    }
    
    우리는 VPC를 불러올 AWS 구역과 AMI를 만드는 데 사용할 모든 AWS 자원, AWS 실례 유형, 관리자 계정의 Windows 사용자 이름과 비밀번호 등 네 가지 변수를 정의했다.이러한 변수는 변수 정의 파일에 정의됩니다.

    데이터 블록


    차단기 템플릿의 다음 부분은 데이터 블록입니다.이 블록은 Packer가 지정한 데이터 원본 (이 예는 아마존 아미) 에서 데이터를 읽고 결과를 템플릿의 다른 곳에 저장하는 것을 알려 줍니다.
    data "amazon-ami" "windows_server_2019_ami" {
      filters = {
        name                = "Windows_Server-2019-English-Full-Base-*"
        root-device-type    = "ebs"
        virtualization-type = "hvm"
      }
      most_recent = true
      owners      = ["801119661308"]
      region      = "${var.vpc_region}"
    }
    
    이 섹션에서는 Packer가 변수에 정의된 AWS 지역에서 아마존이 보유한 최신 Windows Server 2019 AMI를 찾아 결과를 "Windows Server 2019 AMI"에 저장하도록 안내합니다.우리는 이를 바탕으로 우리의 황금 이미지를 만들 것이다.

    소스 블록


    차단기 템플릿의 다음 부분은 원본 블록입니다.구성 블록 이 블록을 사용하여 템플릿을 구성합니다.
    source "amazon-ebs" "gold_sharepoint_2019" {
      region                      = "${var.vpc_region}"
      source_ami                  = "${data.amazon-ami.windows_server_2019_ami.id}"
      instance_type               = "${var.instance_type}"
      ami_name                    = "gold-ami-sharepoint-2019-{{ `${replace(timestamp(), ":", "_")}` }}"
      associate_public_ip_address = true
      communicator                = "winrm"
      winrm_username              = "${var.username}"
      winrm_password              = "${var.password}"
      user_data_file              = "./bootstrap_win.txt"
    }
    
    이 섹션에서는 블록에서 검색한 Windows Server 2019 AMI를 사용하여 변수에 정의된 AWS 영역에 새 AMI를 구성합니다.구축 과정의 일부로 구성된 EC2 실례는 WinRM을 통해 황금 이미지의 나머지 부분을 설정할 수 있도록 공공 IP 주소를 제공했다.Packer는 WinRM을 통해 EC2 인스턴스와 통신하고 변수 정의 파일에 정의된 관리자 사용자 이름과 암호를 제공할 것이라고 말했습니다.이 섹션에서 마지막으로 구성한 사항은 WinRM을 통해 통신할 수 있도록 EC2 인스턴스가 Windows 2019 인스턴스로 구성된 경우 사용되는 사용자 데이터 파일입니다.이 사용자 데이터 파일은 Packer를 사용하여 Windows 이미지를 구축하는 HashiCorp 문서의 내용입니다.

    집짓기


    다음 부분은 구축 블록입니다. 이것은 우리가 이전에 정의한 원본 블록에 구축되어 황금 이미지의 나머지 부분을 설정하는 데 사용됩니다.파일 프로비저닝 블록 PowerShell DSC 스크립트를 복제하기 위해 SharePoint 2019 필수 파일, 바이너리 파일 및 최신 누적 업데이트를 로컬 파일 시스템에서 템플릿 이미지로 복사합니다.
     build {
    
      # Source blocks
      sources = ["source.amazon-ebs.gold_sharepoint_2019"]
    
      # Provisioner blocks
    
      provisioner "file" {
        destination = "C:\\Temp\\sharepoint_prereqs_dsc.ps1"
        source      = "files/sharepoint_prereqs_dsc.ps1"
      }
    
      provisioner "file" {
        destination = "C:\\Temp\\sharepoint_binaries_dsc.ps1"
        source      = "files/sharepoint_binaries_dsc.ps1"
      }
    
      provisioner "file" {
        destination = "C:\\Temp\\sharepoint_updates_dsc.ps1"
        source      = "files/sharepoint_updates_dsc.ps1"
      }
    
    그런 다음 PowerShell Provisioner를 사용하여 NuGet을 설치하고 PowerShell DSC 스크립트에 필요한 모듈을 로드합니다.
         provisioner "powershell" {
        elevated_user     = "Administrator"
        elevated_password = "${build.Password}"
        inline            = ["Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force", 
                             "Set-PSRepository -Name PSGallery -InstallationPolicy Trusted", 
                             "Install-Module SharePointDSC", 
                             "Install-Module xDownloadFile"]
      }
    
    마지막으로, PowerShell Provisioner 블록을 사용하여 PowerShell에 필요한 상태 구성을 컴파일하고 적용하여SharePoint 2019 필수 파일, 바이너리 파일 및 최신 업데이트를 다운로드합니다.SharePoint 2019 이미지 파일도 마운트하고 C:\binaries로 복사합니다.마지막으로 Amazon에서 제공하는 PowerShell 스크립트를 호출하여 AMI를 만들기 전에 이미지의 EC2 구성을 재설정합니다.
         provisioner "powershell" {
        elevated_user     = "Administrator"
        elevated_password = "${build.Password}"
        inline            = ["Set-Location C:\\Temp;./sharepoint_prereqs_dsc.ps1", 
                             "Start-DSCConfiguration -Path C:\\Temp\\SharePoint2019Prereqs -Wait"]
      }
    
      provisioner "powershell" {
        elevated_user     = "Administrator"
        elevated_password = "${build.Password}"
        inline            = ["Set-Location C:\\Temp;./sharepoint_binaries_dsc.ps1", 
                             "Start-DSCConfiguration -Path C:\\Temp\\SharePointBinaries -Wait"]
      }
    
      provisioner "powershell" {
        elevated_user     = "Administrator"
        elevated_password = "${build.Password}"
        inline            = ["$volume = Mount-DiskImage C:\\binaries\\officeserver.img -PassThru | Get-Volume", 
                             "$drive = $volume.DriveLetter + \":\\*\"", 
                             "Copy-Item $drive C:\\binaries -recurse"]
      }
    
      provisioner "powershell" {
        elevated_user     = "Administrator"
        elevated_password = "${build.Password}"
        inline            = ["Set-Location C:\\Temp;./sharepoint_updates_dsc.ps1", 
                             "Start-DSCConfiguration -Path C:\\Temp\\SharePointUpdates -Wait"]
      }
    
      provisioner "powershell" {
        elevated_user     = "Administrator"
        elevated_password = "${build.Password}"
        inline            = ["C:\\ProgramData\\Amazon\\EC2-Windows\\Launch\\Scripts\\InitializeInstance.ps1 -Schedule"]
      }
    }
    

    이 모든 것을 함께 놓아라


    현재 우리는 패키지 템플릿을 만들었습니다. 마지막 단계는 패키지를 실행해서 템플릿을 구축하는 것입니다.이를 위해 Packer 디렉토리로 이동하여 다음 명령을 실행합니다.packer build .Packer가 실행되면 프로세스가 화면에 출력되는 현재 단계가 표시됩니다.

    작성이 완료되면 생성된 AMI는 이미지를 작성하는 데 필요한 시간과 함께 화면에 출력됩니다.

    AWS 콘솔에서 AMI를 검사하면 SharePoint 서버를 구축하는 데 사용할 수 있는 황금 그림을 볼 수 있을 것입니다.향후 게시물에서는 Terraform과 Ansible을 사용하여 Golden AMI를 사용하여 SharePoint 팜을 구축하는 방법을 소개합니다.

    이 예에서 사용한 모든 소스 코드는 https://github.com/kogermd/spgoldimage에서 찾을 수 있습니다

    좋은 웹페이지 즐겨찾기