GCPをテラフォーミングする会パート2

2019/7/13 GCPUG Shonan vol.41
Ryuji Tsutsui@ryu22e

自己紹介

  • Ryuji Tsutsui@ryu22e
  • 六本木のフィンテック系企業でDjangoでウェブサービスを開発しています。
  • 前職はGCPを使っていましたが、一昨年の10月に現職に転職して、ずっとAWSを使っています。(最近GCPから縁遠くなりつつある…)
  • Terraformは前職からずっと使っています。
  • ちなみに「テラフォーマーズ」という漫画は未読で、実写映画版しか観たことがありません。

今日やること

  • Terraformとは何か、軽く解説
  • ハンズオン
  • もくもく会

なるべく参加者が自力で考えて使いこなせるようになることを目指しているので、時間を長めにしました。
なるべくサポートはするので、質問は大歓迎です。

Terraformとは何か

  • HashiCorp社製のインフラ管理ツール
  • Infrastructure as Code
  • Go製のツール
    • サブコマンドもGoっぽいのがある
      (e.g. fmt, get, env)

Ansible・Chef・Puppetのようなツールと何が違う?

  • Ansible・Chef・Puppet
    • サーバー内部の環境構築を行う
      • e.g. nginxのインストール、sshd_configの更新など
  • Terraform
    • サーバーやデータベースなどのリソースを構築
    • Ansible・Chef・Puppetを実行する以前の段階で使う

Terraformの便利なところ

  • 一度設定を書いたら何度でも同じ環境を再現できる。
  • GitHubに設定ファイルを置いて、CIと連携させておくこともできる。
    • リソースを変更したい人がPRを送って、レビューが通ったらマージして反映、ということもできる。
  • 「プロバイダー」というプラグインのような仕組みで、色々なサービスに対応できる。
    • e.g. GCP, AWS, Azure, Alicloud...

Q. それってシェルスクリプトで十分では?

A. シェルスクリプトにはない便利機能があります。
これはハンズオンで実際に使ってみて体験してもらいます。

ハンズオン

準備は前回vol.11の資料の以下のページをベースに進めます

GCSバケットを作ってみよう

  • 以下のファイルを作る
    • variable.tf
    • main.tf(ハイライトされた部分のみ書く)
  • 上記ファイルはHCL (HashiCorp Configuration Language) という独自DSLで記述している

Terraformの基本的な使い方(1)

  • terraform init
    • 初期化処理
  • terraform get
    • 新しいモジュールを使いたいときに実行
      • モジュールは今回使わないので、とりあえず飛ばしてOK
  • terraform fmt
    • tfファイル(Terraformの設定ファイル)のフォーマット
      • 大抵のテキストエディタにはTerraformプラグインがあるので、ファイル保存時にこれで自動フォーマットするよう設定しておくと便利

Terraformの基本的な使い方(2)

  • terraform validate
    • tfファイルの構文チェック
  • terraform plan
    • 実際に環境構築を行わずに、変更内容を確認
  • terraform apply
    • 環境構築実行

terraform applyの使い方について補足

  • terraform applyはデフォルトでは確認メッセージを挟むようになっていて、「yes」と入力しないと先に進めない
  • 以下のいずれかの方法で確認メッセージを出さないようにできる
    • 「-input=false -auto-approve」 オプション付きで実行
    • 「terraform plan -out=ファイル名」で実行計画ファイルを出力した後で「terraform apply -input=false ファイル名 」を実行
      • この方法だと、tfファイルではなく実行計画ファイルの内容を読み込むようになる

GCEインスタンスを作ってみよう

  • 以下のファイルを編集
    • startup-script.sh
    • main.tf(ハイライトされた部分を書く)

Cloud Foundation Toolkit(CFT)の紹介

https://cloud.google.com/foundation-toolkit/?hl=ja

  • Google Cloud のベスト プラクティスを反映した、Deployment Manager 用と Terraform 用の参照テンプレート
    • Terraformの方はTerraform Module Registryに登録されている
  • Google Cloud で繰り返し使用できるエンタープライズ向けの基盤を迅速に構築できる

Terraform Module Registryとは何か

  • Terraformから利用できるモジュールを登録・配信するサービス
  • RubyのRubyGems、PythonのPyPIみたいなもの
  • tfファイルにモジュール名を書いておくとterraform init・terraform getで勝手にダウンロードしてきてくれる
  • Google以外にもAWS・Azure・Alicloudなどが公式モジュールを提供している

Cloud Foundation Toolkit使用例

ただし、ちょっと問題あり

2019/07/13現在の最新バージョンv0.8.0はTerraform0.12に対応していないようなので、使うなら0.11にダウングレードするしかない。
(0.12では破壊的な変更があったので、今までの書き方が使えないケースがある)

以下PRはマージされたので、もうすぐ使えるようになるかも。https://github.com/terraform-google-modules/terraform-google-network/pull/47

もくもく会

  • 以下を自分でやってみよう!
    • ディスクを作ってアタッチする
    • 既存のGCPリソースをインポートしてみる
  • Codelabsにもチュートリアルがあるので、これをやってみるのもオススメ

ヒント

  • ディスクを作ってアタッチする
    • google_compute_diskというリソースを使う
  • 既存のGCPリソースをインポートしてみる
    • 「terraform import」・「terraform state show」・「terraform plan」を使う
    • たぶん初めは手動で作ったGCSバケットあたりを対象にしてみると分かりやすい

terraformit-gcpの紹介

terraform importはtfファイルの生成までやってくれないけど、terraformit-gcpというクラウドエース製のツールでコマンド一発でやってくれる(余裕があればもくもく会で試してみよう!)。

参考URL: コマンド一発でGCP環境のTerraformコード生成!terraformit-gcp | apps-gcp.com

最後に後始末

課金を抑えるために、最後に「terraform destroy」で作ったリソースを全部削除しておこう!

(特にGCEインスタンスは起動させっぱなしだと結構お金がかかる)

GCPをテラフォーミングする会 パート2 - Google Slides