views4GCPのストレージサービスについてまとめてみた。Exp:141302017年10月より入社しました。これまでの技術分野は主にインフラ関係です。今後はGCPでフルスタック対応できるエンジニアを目指し日々いろいろと活動しています。TweetShareHatena注意この記事は2017年12月22日に更新されたもので、内容が古い可能性がありますのでご注意ください。Consoleでインスタンスを構築すること自体は簡単ですが、手作業で複数台構築するのはそれなりに時間がかかり、上司から構築手順書や設計書をきちんとしろなんて言われた日には管理が煩雑になります。クラウド環境なのに手作業で管理するなんてもう限界!と思っている方にオススメしたい運用ツールです。様々なビジネスにおいてIT技術者不足が叫ばれるようになった昨今、サービス提供を円滑に進めるため心を砕く技術者の方は多くいらっしゃると思います。APIのみで作業が完結する時代になりました。これまでのサーバー構築と言えば、人間が作業するための設計書や手順書を作成して、人間が紙の資料を見ながら1台1台手で作業し、テストも人間が行いました。インフラ構築はマンパワーで対応するのが当たり前だったのです。APIのみで作業が完結するということは、作業内容をマシンにやらせることができるため、設計~構築~テストを全て自動化可能です。マシンに作業させるために、設計や構築はコーディングの作業になります。Codeという概念になります。Codeを実現するためのオープンソースソフトウェア(OSS)です。ソフトウェア構成は「terraformコマンド」の実行ファイルが1つだけであり、クラウド基盤と接続するためのプラグインは記述した設定ファイルに基づき、Terraformのリポジトリから自動で取得&導入するため、煩雑な導入作業は不要になっています。Terraformを導入するTerraformの導入は以下の5工程です。Terraformのzipファイルをダウンロードする。zipファイルを展開してTerraformの実行ファイルを取得する。Terraformの実行ファイルを適当なディレクトリに配置する。Terraformの実行ファイルを配置したディレクトリをPATH変数に設定する。SDKのデフォルト認証を行う。※設定済みの場合は不要macOSユーザーやLinuxユーザーの方はコマンドライン環境やPATH変数設定に抵抗はないと思います。64bit)で実施した手順を紹介致します。Terraformをインストールする(Windows編)公式サイトのダウンロードページから、自分のPC(Terraformを動かす環境)のOSのリンクをクリックして、zipファイルをダウンロードしてください。64-bitのリンクをクリックします。執筆時点のバージョンは0.11.1でしたので、「terraform_0.11.1_windows_amd64.zip」というファイルがダウンロードされます。※ダウンロード位置はブラウザ設定や操作により変わりますが、通常はダウンロードフォルダ(C:\Users\{ユーザー名}\Downloads)になります。zipファイルを展開して、「terraform.exe」をフォルダにコピーします。フォルダはどこでもよいですが、今回は「C:\opt\terraform\terraform.exe」に配置しました。※以降の説明もこのフォルダに配置したことを前提とします。sysdm.cpl」を入力して実行するとシステムのプロパティが起動します。[詳細設定]タブ→[環境変数]ボタンをクリックします。環境変数ウィンドウが開きますので、ユーザー環境変数の”Path”を選択して[編集]ボタンを押します。[新規]ボタンを押して、テキストボックスに「C:\opt\terraform\」と入力し、Enterキーを押します。その後、[OK]ボタンを押します。環境変数ウィンドウに戻りますので、[OK]ボタンを押します。これで、Path変数が有効化されました。インストールが終わりましたら、試しにterraformコマンドを実行してみましょう。Windowsの場合はコマンドプロンプトかPowerShellを、macOSやLinuxの場合はターミナルを開いて以下のコマンドを実行してください。version以下のようにバージョン番号が表示されれば、インストールは成功です。v0.11.1TerraformにおけるGCP認証についてterraformコマンドを導入しただけでは、GCPのプロダクトを操作することはできません。GCPプロジェクトの認証情報が必要になります。Terraformで使用できる認証は以下の2種類です。SDKのアプリケーションデフォルト認証を使用することを前提として解説しています。SDKの導入手順については以下のapps-gcp記事を参照してください。SDKでアプリケーションデフォルト認証が設定できているかは、gcloudコマンドを以下のように実行することで確認できます。以下のように、Googleアカウントのメールアドレスが表示されます。accounts.」というメッセージが表示されます。`ACCOUNT`アプリケーションデフォルト認証を設定するデフォルト認証が設定されていない場合は、以下のコマンドを実行して、デフォルト認証の初期化を行ってください。初期化」を参照してください。TerraformでGCEインスタンスを作るということで、早速TerraformでGCEインスタンスを作成してみましょう。この記事は「apps-gcp-terraform-test」プロジェクトで作成しています。前提条件TerraformでGCPプロジェクトにGCEインスタンスを作成するには、GCPプロジェクトのAPIのうち、以下が有効である必要があります。Consoleの「APIとサービス」→「ライブラリ」を開き、上記APIを有効化してください。Terraform設定ファイル(tfファイル)を作るTerraformでインスタンスを作成するには、リソースを定義する設定ファイルを作成する必要があります。(以降、Terraformの設定ファイルのことをtfファイルと呼称します。)まずは、Terraform作業用のフォルダを作成して、そこに「compute_instance.tf」という名前でテキストファイルを作成してみましょう。この記事では、Cドライブの下に「terraform-workspace」というフォルダを作成し、その中に「compute_instance.tf」というテキストファイルを作成します。「compute_instance.tf」の内容は以下の通りです。}このtfファイルは、GCPプロジェクト「apps-gcp-terraform-test」の「asia-northeast1-a」ゾーンに対して以下のようなGCEインスタンスの作成を定義しています。エフェメラルサービスアカウントデフォルトアカウントTerraformコマンドを実行してインスタンスを作るこれで最低限の準備は整いました。Terraformコマンドの出番です。ここで使用するコマンドは以下の3つです。init」コマンドを実行しましょう。initコマンドを実行すると、カレントディレクトリに「.terraform」サブディレクトリを作成し初期化を行います。実行環境がインターネット接続できる環境であれば自動的にプラグインをダウンロードします。initialized!」というメッセージが表示されれば、初期化成功です。plan」コマンドを実行します。planコマンドは、tfファイルとstateファイル(管理状態を保存するファイル)に基づいてリソース変更の計画を表示します。初回実行時はstateファイルが無いため、tfファイルのリソースを全て新規作成する計画を表示します。apply」コマンドを実行します。value:」というメッセージが表示され、変更を加えて良いかの確認を求められます。applyの変更確認はv0.11.0以降の新機能です。)“yes”と入力してEnterを押すと、インスタンス作成を行います。complete!」のメッセージが表示されたら、作成完了です。実際に作成されているか、gcloudコマンドでapps-gc-terraformインスタンスを見てみましょう。https://www.googleapis.com/compute/v1/projects/apps-gcp-terraform-test/zones/asia-northeast1-a※一部の情報を*でマスクしています。apps-gcp-terraformインスタンスをgcloudコマンドで確認できました。apps-gcp-terraformインスタンスのパラメータも、「Terraform設定ファイル(tfファイル)を作る」で想定した内容になっていることが確認できます。tfファイルの内容についてtfファイルを作成し、terraformコマンドを実行することで、GCEインスタンスが作成できることを確認しました。次はtfファイルに記述した内容が、GCEインスタンスにおける何のパラメータに対応するかを説明します。以下のように記載します。“google”」を指定します。」に自分のプロジェクトIDを記載します。」のところは、デフォルトのリージョンを指定します。これはtfファイルのルールですが、文字列は全てダブルクオートで囲みます。次はresourceセクションです。以下のように記載します。Providerプラグインが扱う”リソース種別”を指定します。Provider」に記載されています。”リソース識別名”はTerraform内部で処理するための名称です。プロパティはリソース毎の設定の名称(GCEインスタンスであれば、インスタンス名、ゾーン、マシンタイプ等)になります。概ね、APIリファレンスの名称と同じですが、異なる部分もあるため、この記事で説明していないリソースやプロパティの設定は、Terraform公式ドキュメントを読んで下さい。GCEインスタンスを作成する場合は、リソース種別に”google_compute_instance”を指定します。主なプロパティを以下に示します。Terraform管理上の名前を記述。使用可能な文字は英数大小文字(A~Z,a~z,0~9)と記号(-,_)です。“プロジェクトID”を記述。providerでプロジェクト名を記述している場合は省略可能、複数プロジェクトを管理するときに明記する。ディスクタイプを記述。標準の永続ディスクの場合は「pd-standard」、SSD永続ディスクの場合は「pd-ssd」と記述。「イメージプロジェクト名/イメージ名」または「イメージプロジェクト名/イメージファミリ」を記述する。list」で取得した内容を記述する。インスタンス削除と同時にディスクも削除するかを指定。省略時は”true”が指定される。外部IPアドレスの設定を記述。エフェメラルの場合は{}のみを記述する。外部IPアドレスが不要な場合は、access_config行そのものを削除する。”値”」の形式で記述スタートアップスクリプト等を記述する際に使用する。代表的なメタデータキーを以下に示す。インスタンス起動時に実行するスクリプトの内容を記述。設定の詳細はこちらを参照。インスタンス停止時に実行するスクリプト内容を記述。設定の詳細はこちらを参照。SSHログイン用の公開鍵を記述。この設定については次回の記事で説明します。サービスアカウントのアクセススコープを記述。]でリスト表記し、,(カンマ)で区切る。create」の–scopesオプションの項を参照。tfファイルのプロパティを変更するでは、最初に作成したtfファイルに、startup-scriptのメタデータを追加してみます。startup-scriptメタデータを追加すると、インスタンス起動時に、メタデータ設定した内容がスクリプトとして実行されます。script」というメッセージを出力する、というコマンドを意味します。planコマンドを実行してみます。destroy.」というメッセージに注目していただくと、追加0件、変更1件、削除0件と出ていることがわかります。apply」コマンドを実行してみましょう。destroyed.反映が完了しました。実際にstartup-scriptメタデータが設定されたか確認してみましょう。compute#metadata...(省略)...設定通り動作するか確認するため、インスタンスを再起動してみましょう。[https://www.googleapis.com/compute/v1/projects/apps-gcp-terraform-test/zones/asia-northeast1-a/instances/apps-gcp-terraform].少し待ってから、インスタンスのsyslogを参照するコマンドを実行します。script”が表示されていることから、startup-scriptが動作していると判断することができます。次は、インスタンスをスケールアップしてみます。tfファイルのmachine_typeを「g1-small」から「n1-standart-1」に修正します。planコマンドを実行してみます。いう、メッセージが表示されていることが分かります。これは、Terraformが対象のリソースを削除してから作り直す、ということを意味しています。destroy.」というメッセージからも、「追加1件、変更0件、削除1件」ということが分かります。applyコマンドを実行してみます。destroyed.メッセージから、Destroyの後にCreateが実行されていることが分かります。コマンドを見てみましょう。https://www.googleapis.com/compute/v1/projects/apps-gcp-terraform-test/zones/asia-northeast1-a/machineTypes/n1-standard-1...(省略)...マシンタイプはn1-standard-1になりましたが、creationTimestampも更新されています。このことから、インスタンスが作り直されてしまったことが分かります。Consoleやgcloudからマシンタイプを変更する場合は、インスタンスが停止状態であれば再作成なしに変更可能ですが、Terraformの仕様ではインスタンス再作成になってしまうようです。この点は注意しなければなりません。プロパティ変更によるインスタンス削除と対策さて、TerraformでGCEインスタンスを作成する場合、再作成を伴わずにに変更可能なプロパティは以下になります。applyすると、インスタンス削除→再作成になってしまうため注意が必要です。applyしてしまい、インスタンス再作成されてしまうと、Terraformをビジネスとして運用するには高いように思えます。Terraformでは、こうしたプロパティ変更による予期せぬ削除を防ぐため、lifecycle.prevent_destroy設定があります。この設定を追加することで、再作成が必要な変更が発生する場合にコマンドが停止するようにできます。tfファイルのブートディスクサイズを30に変更し、lifecycle.prevent_destroy設定を追加してみます。ちなみに、ブートディスクサイズの変更も、Terraformではインスタンス再作成となります。applyコマンドを実行します。flag.terraformコマンドがエラー停止していることが分かります。英語のメッセージですが、apps-gcp-terraformインスタンスのリソースにlifecycle.prevent_destroy=trueが設定されているため、変更を継続できないことが記載されています。容易に削除されると困るリソースには、lifecycle.prevent_destroy=trueを追加すると良いと思います。まとめ本記事では、Terraformの導入方法と、GCEインスタンスを構築するtfファイルの作成について解説しました。構成管理ツールというと、導入や設定ファイルの書き方が難しい印象がありますが、Terraformは導入や設定ファイルの書き方も簡単です。Part2の記事も読んで頂ければ、Terraformのメリットをより実感頂けると思いますので、是非お読み下さい!弊社クラウドエースでは、GCPのプロダクトのコンサルティングから構築支援、応用サービスまで幅広くご提案しております。