コンテンツに移動
Google Cloud

Terraform による迅速なクラウド基盤の構築とワークロードのデプロイ

2020年10月21日
https://storage.googleapis.com/gweb-cloudblog-publish/images/DevOps_BlogHeader_C_Rnd3_n7MW7mI.max-2600x2600.jpg
Google Cloud Japan Team

※この投稿は米国時間 2020 年 10 月 13 日に、Google Cloud blog に投稿されたものの抄訳です。

Google は去年、ベスト プラクティスに従って強固なクラウド基盤を迅速に構築するため役立つオープンソースのテンプレートとして、Cloud Foundation Toolkit をリリースしました。これらのモジュールは Terraform infrastructure-as-code フレームワークと、Google の Cloud Deployment Manager の両方で利用できます。

本ブログ投稿では、Cloud Foundation Toolkit Terraform のサンプル基盤 を使用して、安全なクラウド基盤を構築する方法について詳しく解説します。その次に、Terraform を使用してマイクロサービスのデモアプリケーションを基盤上にデプロイする方法について説明します。このコンテンツにより、次の作業を行う方法を習得できます。

  • Google のベスト プラクティスに従い、エンタープライズ クラウド基盤を構築するために必要な時間を 1 日以内に短縮する。

  • Terraform を使って、デモ用の Google Kubernetes Engine(GKE)ワークロードを基盤にデプロイし、クラウド基盤を使用する。

  • Google の専門家からの推奨事項に基づいて、最高レベルのセキュリティで GKE クラスタをデプロイする(TCP 転送踏み台インスタンスを使った IAP)。

開始方法

Cloud Foundation Toolkit を使うには、最初に Terraform と Linux のコマンドラインの基本を理解する必要があります。次に、以下の要件を満たしていることを確認する必要があります。

要件:

1.GCP 組織

2.GCP 請求先アカウント

3.Cloud Identity / G Suite グループを作成できること

4.Linux コマンドラインにアクセス可能で、次のソフトウェアがインストールされ構成済みなこと:

1.Google Cloud SDK

2.Terraform

3.Git

クラウド基盤の構築

まず、Terraform のサンプル基盤リポジトリのクローンを作成する必要があります。

読み込んでいます...

このリポジトリには、いくつかの異なる Terraform プロジェクトがそれぞれ別のディレクトリに含まれており、別々に、ただし決められた順序で適用する必要があります。これらの Terraform プロジェクトはそれぞれ別々のレイヤとして積層され、次の順序で実行されます。

0-bootstrap: このステップの目的は、GCP 組織をブートストラップし、Cloud Foundation Toolkit(CFT)の使用を開始するため必要なすべてのリソースとアクセス許可を作成することです。このステップでは、以後のステージの基盤コードで使用される Cloud Build と Cloud Source Repositories も構成されます。

1-org: このステップの目的は、トップレベルの共有フォルダ、モニタリングおよびネットワーキング プロジェクト、組織レベルのロギングをセットアップし、組織のポリシーによってベースラインのセキュリティを設定することです。

2-environments: このステップの目的は、GCP 組織内に開発(「dev」)や本番(「prod」)などの環境をセットアップすることです。

3-networks: このステップの目的は、共有 VPC をデフォルトの DNS、NAT、プライベート サービス ネットワーキング、ベースラインのファイアウォール ルールでセットアップすることです。

4-projects: このステップの目的は、アプリケーション用のフォルダ構造とプロジェクトをセットアップすることです。これらはサービス プロジェクトとして、前のステージで作成された共有 VPC に接続されます。

各ディレクトリを正しい順序で適用するため、Terraform のサンプル基盤リポジトリの README.md ファイルの手順に沿って操作する必要があります。シーケンスの次の手順に進む前に、各手順を正しく完了する必要があります。

すべての基礎手順を正しく完了すると、組織の構造は次の図のようになります。

https://storage.googleapis.com/gweb-cloudblog-publish/images/1_organization_structure.max-700x700.jpg

GCP の [プロジェクトとフォルダの管理] ページで、組織構造が正しく作成されたことを検証できます。

最初のワークロードのデプロイ: マイクロサービスのデモ アプリケーション

安定したクラウド基盤ができ上がったので、最初のワークロードをデプロイします。このブログ投稿では、GKE プライベート クラスタに Online Boutique マイクロサービスのデモ アプリケーションをデプロイするための手順を紹介します。このデモ アプリケーションはウェブベースの e コマースアプリです。

https://storage.googleapis.com/gweb-cloudblog-publish/images/2__service_architecture.max-1600x1600.jpg
この図は、Online Boutique e コマース アプリケーションのサービス アーキテクチャを示しています(画像ソース

Terraform によるプライベート クラスタの作成(IAP 踏み台インスタンスによる安全なアクセス)

GKE クラスタのコントロール プレーンへの制限付きアクセスでは、IAP と TCP 転送を使用して、非公開の認可済み IP 範囲にある踏み台インスタンス(GCE 仮想マシン)にアクセスすることを強くおすすめします。

そのための手順を、「IAP 踏み台インスタンスによる安全なクラスタ アクセス」リポジトリからここに引用します。次のセクションで示すように、マイクロサービスのデモをインストールする準備として追加の説明と細部の修正が加えられています。以下の手順に沿って、外部 IP アドレスなしの IAP を使用し、踏み台インスタンスから強化されたプライベート クラスタを自動的に作成します。

1.GKE クラスタの格納先として、基盤に作成されたプロジェクトを選択します(または、4-projects モジュールの 1 つを使用して独自にプロジェクトを作成します)。この手順では、Terraform ファイルを新しいフォルダに残したまま、別の新しい Terraform バックエンドを構成することをおすすめします。Terraform のステート管理の詳細については、この記事を参照してください。

2.前の手順 3-networks でセットアップしたネットワークを使用します。

  1. 3-networks/envs/dev/main.tf を変更し、次の行を追加して、共有 VPC でオプションのファイアウォール ルールを有効にします。
    optional_fw_rules_enabled = true
    nat_enabled = true

  2. activate_apis = ["container.googleapis.com", "iap.googleapis.com"] を追加して、この API がプロジェクトで有効なことを確認します。

  3. この手順で、ネットワーク プロジェクト ID を記録します(たとえば、クラスタを「dev」環境のベース共有 VPC「terraform output dev_base_host_project_id」にアタッチする場合)。

3.git clone https://github.com/bharathkkb/example-foundations-safer-cluster を実行して、terraform-google-kubernetes-engine リポジトリのクローンを作成します。

4.terraform.tfvars を作成し、project_id、network_project_id、bastion_members の値を指定します。オプションとして、必要なら変数をオーバーライドします(「dev」環境のベース共有 VPC 以外の SVPC にアタッチする場合、network_name、subnet_name、ip_range_pods_name、ip_range_services_name などのパラメータのオーバーライドが必要なことがあります)。

5.terraform init を実行してプラグインを取得してから、terraform apply でビルドを適用します。

デフォルトでは、プライベート クラスタの作成時にコントロール プレーンの非公開エンドポイントでグローバル アクセスは無効です。クラスタを非公開にして、ノードがインターネットに公開されないようにすることが重要です。この例では、コントロール プレーンとしてプライベート エンドポイントを選択し、踏み台インスタンスのサブネットの CIDR ブロックを提供します。これによって、コントロール プレーンはホワイトリストに登録された CIDR、クラスタの VPC 内のノード、そのコントロール プレーンを管理する Google 内部の本番環境ジョブからのみ到達可能となります。

これで、非公開の安全な GKE クラスタを、公開エンドポイントへのクライアント アクセスなしでデプロイし、同時に同じネットワークに 踏み台インスタンスの GCE VM(クラスタのコントロール プレーンにアクセスするため使用します)を作成したので、次のセクションでマイクロサービス アプリケーションをデプロイします。

GKE クラスタへの Online Boutique のデプロイ

Online Boutique は 10 階層のマイクロサービス アプリケーションで構成されます。以下の手順では、既存のクラスタにリリース マニフェストを直接、迅速にデプロイするため、ビルド済みのコンテナ イメージを利用します。最初の安全なクラスタの手順に続いて、以下の手順を実行します。

1. ポートが IAP トンネルで踏み台インスタンスに転送されている状態で、SSH を使用して踏み台インスタンスに接続します。terraform output bastion_ssh_command を実行すると、コマンドと正しいパラメータが表示されます。

gcloud beta compute ssh $BASTION_VM_NAME --tunnel-through-iap --project $PROJECT_ID --zone $ZONE -- -L8888:127.0.0.1:8888

注: 以下の手順のため、このコマンドがバックグラウンドで実行されていることを確認してください。

これで、プロキシ経由で kubectl コマンドを実行できます。コマンドの例は、Terraform の出力として表示されます(bastion_kubectl_command)。

2. git clone を実行し、microservices-demo リポジトリのクローンを作成します。https://github.com/GoogleCloudPlatform/microservices-demo.git

  1. ディレクトリを /microservices-demo/release/ に変更します。

3. クラスタにアクセスするための適切な認証情報とエンドポイント情報で、kubeconfig ファイルを生成します。terraform output get_credentials_command を実行すると、コマンドと正しいパラメータが表示されます。

gcloud container clusters get-credentials --project $PROJECT_ID --region $REGION --internal-ip safer-cluster-iap-bastion

4. アプリをデプロイします。「kubernetes-manifests」フォルダ内に表示されるサービスの多くが自動的に作成されます。

HTTPS_PROXY=localhost:8888 kubectl apply -f ./release/kubernetes-manifests.yaml

https://storage.googleapis.com/gweb-cloudblog-publish/images/3_kubernetes-manifests.max-1800x1800.jpg

5. Pod が準備完了状態であることを確認します。これは、各 Pod が RUNNING ステータスで、各サービスについて 1/1 の準備状態であることを示しています。

  1. HTTPS_PROXY=localhost:8888 kubectl get pods

6. アプリケーションの IP アドレスを見つけてから、アプリケーションを調べてインストールを確認します。

  1. HTTPS_PROXY=localhost:8888 kubectl get service/frontend-external

https://storage.googleapis.com/gweb-cloudblog-publish/images/4_frontend-external.max-1500x1500.jpg

7. セットアップが正しく動作すれば、外部 IP アドレスに移動し、デモ用の Online Boutique アプリケーションを表示できます。たとえば、次のようになります。

https://storage.googleapis.com/gweb-cloudblog-publish/images/5_microservices_demo_app_using_Terraform.max-2000x2000.jpg

これで、Terraform を使用するマイクロサービスのデモアプリをデプロイできました。

次のステップ

安全な Google Cloud 基盤の上にワークロードをデプロイする方法を学んだので、次に Terraform または自分の好きな方法を使用して、独自のワークロードをデプロイします。

自分の好きな Cloud Foundation Toolkit リポジトリを確認、またはスターを付け、対応するリポジトリでイシューを発行してフィードバックを行ってください。


-Cloud テクニカル レジデント Kelly Dodson

-テクニカル ソリューション エンジニア Nancy Liu

投稿先