テラフォームを用いたGCP上の自動化インフラストラクチャ

4539 ワード

私はGCPのプロジェクトに取り組んでいるとき、私はすべてを自動化しようとします.これには、サービスの配備と新しいサービスのためのビルドのプロビジョニングが含まれます.
私がプロジェクトにサービスを加えるならば、私はそれのためにCI/CDパイプラインを構成する方法を覚えている多くの時間を浪費したくありません.私は既存のモジュールをコピーして、私の他のサービスと全く同じように働く何かを得たいです.
これを設定するには、私のGCPプロジェクトのすべてを実行するために必要なビルドとリソースを準備するterraform repoがあります.そのrepoにコードを押すと、新しいビルドとサービスが展開されます.実際に言えば、そのレポ私は実行にプッシュterraform apply .
私のプロジェクトのそれぞれのサービスは、それ自体が集約的に展開されます.私がこのセットアップをして、走らせるならば、私はサービスをアップデートすることができて、GCPコンソール自体の範囲内で最小の構成仕事で新しいサービスを加えることができます-私はちょうどサービスを変えて、サービスを加えるか、サービスを走らせる基盤を修正するために適当なrepoにコードを押します.
これは、プロジェクトのスターターレポといくつかの一般的なモジュールの助けを借りて、複雑なものであるように聞こえます.一度起動して、新しいサービスを実行しているサービスをプロジェクトに追加できます.
  • サービスのためのREPOをリンクすることCloud Source Repository
  • 設定cloudbuild.yaml ファイル名
  • 追加Cloud Build Trigger プロジェクトのために
  • サービスをterraformで実行するリソースの追加
  • このポストはTorraformを使用して連続インフラストラクチャ展開のための新しいGCPプロジェクトを設定する方法を歩きます.

    新しいGCPプロジェクトの設定


    まず、GCPで新しいプロジェクトを立ち上げます.私は個人的なプロジェクトとしてこれをしていると仮定します.我々の組織が我々の環境で利用できるならば、より多くがありますmature tooling 利用可能です.

    次に、プロジェクト内のクラウドソースリポジトリとしてインフラストラクチャレポとなります.私mirror Bitbucketからの個人的なレポですが、Githubやクラウドソースそのものもうまく使えます.
    この例では、this 私がスターターとしてクローンするrepo.それは私が始めるために使用するいくつかのterraformモジュールを持っています、そしてcloudbuild.yaml "hello "を出力し、ビルドトリガーが実行されていることを確認するファイルです.
    一旦これを持つならば、「倉庫名」のメモをとってください.ビルドパイプラインをリンクする必要があります.

    自動ビルドの追加


    私の使用this 新しいスタートアップを開始するインフラスターター.そのためには、プロジェクトにクラウドシェルを開き、repoをクローンします.そこで私はcdsrc ディレクトリと変更terraform.tfvars プロジェクトを参照し、プロジェクトのインフラストラクチャを管理するソースREPOを参照します.

    次に、以下を実行します.
  • terraform init
  • terraform apply
  • そして、私は行く準備ができているインフラのための連続配備パイプラインを持っています.そうすることができますスターターが初期化されているか確認してください.
  • ビルドを実行するサービスアカウント
  • 我々の入力repoへの変化に関して動くビルドトリガー
  • ログの保管口座
  • 地形形態の保管口座
  • サービスアカウントに上記の使用を許可する適切なアクセス許可
    このビルドの出力は、クラウドビルドのビルドトリガーとして確認できます.

    そして、我々は手動でそれを実行することができますまたは根本的なレポにコードをプッシュすることによってそれをトリガ!

    terpoを実行するためにrepoを設定する


    あなたのインフラストラクチャのレポを適切に構造化する方法については、ドキュメントを参照してください.YAMLから:
    steps:
    
    - id: 'Terraform Init'
      name: 'hashicorp/terraform:1.0.0'
      entrypoint: 'sh'
      args: 
      - '-c'
      - |
            cd src
            terraform init
    
    - id: 'Terraform Plan'
      name: 'hashicorp/terraform:1.0.0'
      entrypoint: 'sh'
      args: 
      - '-c'
      - |
            cd src
            terraform plan
    
    - id: 'Terraform Apply'
      name: 'hashicorp/terraform:1.0.0'
      entrypoint: 'sh'
      args: 
      - '-c'
      - |
            cd src
            terraform apply -auto-approve
    
    logsBucket: '$_LOG_BUCKET_URL'
    options:
      logging: GCS_ONLY
    
    ここで、プロジェクトのスターターによって設定された変数からログバケットURLを引いているところです.
    そして、バックエンド状態で作成された特定のストレージバケットのバックエンドを指します.
    terraform {
        backend "gcs" {
            bucket = "subtle-app-346916-tf-state"
        }
    }
    
    terraform {
        required_version = "~> 1.0.0"
    }
    
    あなたがこれを持っているならば、あなたのterraformコードを更新して、RIPOを押すことはあなたのプロジェクトの基盤を更新しなければなりません.