인터넷 연결이 끊어진 상태에서 Terraform 통합을 설계하고 실행해야 하는 Cloud Assembly 사용자는 이 예제에 따라 런타임 환경을 설정할 수 있습니다.

참고: 이미지 생성을 위한 소스를 얻으려면 인터넷에 잠시 연결하는 과정이 필요합니다. 임시 연결이 불가능한 경우에는 연결이 끊긴 사이트 외부에서 이러한 단계를 수행해야 할 수도 있습니다.

이 프로세스에서는 자체 Docker 레지스트리가 있고 인터넷에 연결하지 않고도 해당 저장소에 액세스할 수 있다고 가정합니다.

사용자 지정 컨테이너 이미지 생성

  1. Terraform 제공자 플러그인 이진 파일이 포함된 사용자 지정 컨테이너 이미지를 구축합니다.

    다음 Dockerfile은 Terraform GCP 제공자를 사용하여 사용자 지정 이미지를 생성하는 예시를 보여줍니다.

    Dockerfile에서 다운로드한 기본 이미지 projects.registry.vmware.com/vra/terraform:latest는 VMware Harbor 레지스트리(projects.registry.vmware.com)에 대한 인터넷 액세스가 필요합니다.

    방화벽 설정 또는 프록시 설정으로 인해 이미지 빌드가 실패할 수 있습니다. 또한 Terraform 제공자 플러그인 이진 파일을 다운로드하려면 releases.hashicorp.com에 액세스가 가능하도록 설정해야 할 수도 있습니다. 하지만 개인 레지스트리를 사용하여 플러그인 이진을 옵션으로 제공할 수 있습니다.

    FROM projects.registry.vmware.com/vra/terraform:latest as final
     
    # Create provider plug-in directory
    ARG plugins=/tmp/terraform.d/plugin-cache/linux_amd64
    RUN mkdir -m 777 -p $plugins
      
    # Download and unzip all required provider plug-ins from hashicorp to provider directory
    RUN cd $plugins \
        && wget -q https://releases.hashicorp.com/terraform-provider-google/3.58.0/terraform-provider-google_3.58.0_linux_amd64.zip \
        && unzip *.zip \
        && rm *.zip
      
    # For "terraform init" configure terraform CLI to use provider plug-in directory and not download from internet
    ENV TF_CLI_ARGS_init="-plugin-dir=$plugins -get-plugins=false"
  2. 사용자 지정 컨테이너 이미지를 구축하고 태그를 지정하고 연결이 끊긴 사이트의 자체 Docker 저장소로 푸시합니다.
  3. 연결이 끊긴 사이트에 있는 Cloud Assembly인프라 > 연결 > 통합에서 Terraform 런타임 통합으로 이동합니다.
  4. 런타임 컨테이너 설정을 생성 또는 편집하여 사용자 지정 컨테이너 이미지에 대한 저장소를 추가합니다. 예제의 구축된 사용자 지정 컨테이너 이미지 이름은 registry.ourcompany.com/project1/image1:latest입니다.
    Terraform 컨테이너 이미지

Terraform CLI를 로컬에서 호스팅

  1. Terraform CLI 이진 파일을 다운로드합니다.
  2. Terraform CLI 이진 파일을 로컬 웹 또는 FTP 서버에 업로드합니다.
  3. Cloud Assembly에서 인프라 > 구성 > Terraform 버전으로 이동합니다.
  4. 로컬 서버에서 호스팅되는 Terraform CLI 이진 파일에 대한 URL을 포함하도록 Terraform 버전을 생성하거나 편집합니다.
  5. 로컬 웹 또는 FTP 서버에 로그인 인증이 필요한 경우 기본 인증을 선택하고 서버에 액세스할 수 있는 사용자 이름 및 암호 자격 증명을 입력합니다.

    인증 유형을 변경하려면 Cloud Assembly에서 클라우드 관리자 역할이 있어야 합니다.

    Terraform CLI URL

Terraform 구성 설계 및 배포

런타임이 준비되면 Terraform 구성 파일을 git에 추가하고 클라우드 템플릿을 설계하고 배포할 수 있습니다.

시작하려면 Cloud Assembly에서 Terraform 구성 준비 항목을 참조하세요.

문제 해결

배포할 때 Cloud Assembly에서 배포를 엽니다. [기록] 탭에서 Terraform 이벤트를 찾아서 오른쪽의 로그 표시를 클릭합니다. 로컬 Terraform 제공자가 작동 중이면 로그에 다음 메시지가 나타납니다.

Initializing provider plugins

Terraform has been successfully initialized

보다 탄탄한 로그를 위해 클라우드 템플릿 코드를 수동으로 편집하여 다음 예와 같이 TF_LOG: DEBUG를 추가할 수 있습니다.

resources:
  terraform:
    type: Cloud.Terraform.Configuration
    properties:
      providers:
        - name: google
          # List of available cloud zones: gcp/us-west1
          cloudZone: gcp/us-west1
      environment:
        # Configure terraform CLI debug log settings
        TF_LOG: DEBUG
      terraformVersion: 0.12.29
      configurationSource:
        repositoryId: fc569ef7-f013-4489-9673-6909a2791071
        commitId: 3e00279a843a6711f7857929144164ef399c7421
        sourceDirectory: gcp-simple

고유한 기본 이미지 생성

VMware가 projects.registry.vmware.com/vra/terraform:latest에서 기본 이미지를 업데이트하는 경우도 있지만 해당 이미지가 오래되어 취약성을 포함할 수 있습니다.

자체 기본 이미지를 구축하려면 다음 Dockerfile을 대신 사용하십시오.

FROM alpine:latest as final
RUN apk add --no-cache git wget curl openssh