自動ネットワーク デプロイ: 概要

このチュートリアルでは、Cloud Deployment Manager と HashiCorp の Terraform を使用して Google Cloud リソースの作成と管理を自動化する方法について説明します。

  • Deployment Manager は、Google Cloud に組み込まれているインフラストラクチャ デプロイ サービスです。
  • Terraform は、実験や運用のためのデプロイを自動化できるオープンソース ツールです。

このチュートリアルは、一般的なネットワーク リソース パターンの自動デプロイについて説明する 3 回シリーズの最初の記事です。

パブリック クラウドに移行するときに、インフラストラクチャに関して最初に取り組むべき作業は、ネットワーク リソースの計画とデプロイです。初期の試験段階または概念実証には、ネットワークを稼働させることが常に含まれます。これらのチュートリアルでは、プロジェクトのリファレンスとして使用できるいくつかの一般的なネットワーク構成を示します。

このチュートリアルでは、Deployment Manager および Terraform で機能するファイルベースの認証方式を使用します。設定した構成を再利用できるので、アプリケーションに関する重要なリソース要件に集中して取り組むことができます。

このシリーズの構成は次のとおりです。

  1. これは「概要」です。このチュートリアルに沿って、Google Cloud プロジェクトの認証情報を含むオペレーション環境をセットアップします。このシリーズの他のチュートリアルは、ここで説明する認証構成に基づいています。また、gcloud コマンドライン ツールを使用する代替的な認証方式もあります。
  2. 次に、スタートアップ チュートリアルで Deployment Manager と Terraform について説明します。比較のために、各ツールで提供される単純なデプロイを実行できます。また、構成ファイルを参照してさまざまな方式を調べ、実際の要件に適した方式を把握することもできます。スタートアップ チュートリアルを開始する前に、概要チュートリアルを完了しておく必要があります。
  3. Google Cloud と AWS の間での VPN の構築は、高度なチュートリアルです。スタートアップ チュートリアルを完了している必要はありませんが、概要チュートリアルを完了していることが前提となります。この高度なチュートリアルでは、次の手順について説明します。

    • マルチクラウド アプリケーションをデプロイする、またはオンプレミス インフラストラクチャへの接続を備えたハイブリッド環境を構築する。
    • ネットワーク インフラストラクチャと仮想マシン(VM)インスタンスを Google Cloud と Amazon Web Services(AWS)の両方にデプロイする。
    • 両方のプロバイダ間の接続をセットアップする。これにより、デプロイしたリソースを分散させて、信頼性と可用性の要件を満たすことができます。

自動ネットワーク デプロイを行う理由

開発と運用を効率的に行い、アプリケーションの品質を最大限に引き出すには、自動化戦略が重要です。自動ネットワーク デプロイには次のメリットがあります。

  • 予測可能なプロセスと信頼性のある運用に貢献する、段階別環境(開発、テスト、ステージング、本番)とさまざまなアプリケーションをサポートします。コードベースの構成ファイルを使用する場合、環境のコピーの作成と破棄は容易です。
  • コードベースの自動デプロイにより、組織内の共通インフラストラクチャ パターンを再利用できます。
  • コードベースのデプロイにより、チームの調整と予期しない問題の回避に役立つ体系的なレビュー プロセスがサポートされます。このプロセスでは、セキュリティ運用、ネットワーク運用、プロジェクト管理、品質チームなど、さまざまな部門の担当者と協力できます。

概要

Deployment Manager と Terraform は複雑な依存関係チェックを実行します。これにより、可能な場合には常に、環境の評価とリソースの効率的な作成を並列的に実行できます。このシリーズの他のチュートリアルでは、これらのツールを使用してより複雑なネットワーク構造をデプロイします。

このチュートリアルでは関連ツールを扱いますが、このチュートリアルの目的は、詳細情報をまとめることです。これにより、多数のページやウェブサイトを参照することなく、有用な稼働環境を構築できます。

目標

  • Google Cloud と AWS で自動化のためのアクセス認証情報を作成する。
  • Deployment Manager と Terraform を使用するための機能環境を作成する。
  • Secure Shell(SSH)を使用して VM インスタンスと通信するために必要な鍵ペアを生成する。

費用

この概要チュートリアルでは、課金対象の Google Cloud リソースを使用しません。このシリーズの他のチュートリアルでは、Google Cloud と AWS に課金対象のリソースをデプロイします。

始める前に

  1. Google Cloud Console で、gcp-automated-networks という名前の Google Cloud プロジェクトを作成します。

    プロジェクト ページに移動

    プロジェクトに名前と一意の Google Cloud プロジェクト ID が設定されます。Google Cloud プロジェクト ID をメモしておきます。この ID は Google Cloud Console ホーム画面の [プロジェクト情報] パネルに表示されています。

    プロジェクト名と ID が表示されている [プロジェクト情報] パネル。

  2. Cloud プロジェクトに対して課金が有効になっていることを確認します。プロジェクトに対して課金が有効になっていることを確認する方法を学習する

  3. Compute Engine and Deployment Manager API を有効にします。

    API を有効にする

  4. Cloud Shell インスタンスを起動します。このチュートリアルでは、Cloud Shell からすべてのターミナル コマンドを実行します。

    Cloud Shell を開く

    Cloud Shell のプロビジョニングには数分かかります。プロセスが完了すると、次のようなウェルカム メッセージが表示されます。

    Welcome to Cloud Shell! Type "help" to get started.

このシリーズのチュートリアルは、GitHub を十分に理解していること、AWS Management Console にアクセスできることを前提としています。

デプロイ アーキテクチャ

このチュートリアルでは、次の図に示すデプロイ環境を構築します。

デプロイ アーキテクチャのコンポーネント。

上の図は、このチュートリアルで使用するコンポーネントを示しています。

  • Google Cloud の認証情報。
  • デプロイ構成ファイル。
  • SSH 認証鍵。
  • AWS 認証情報。
  • Google Cloud プロジェクト。
  • VPC ネットワーク。

Google Cloud の作業環境の準備

このセクションでは、次の操作を行います。

  • チュートリアル コードのクローンを作成する。
  • Google Cloud のリージョンとゾーンを選択する。

チュートリアル コードのクローンの作成

  1. Cloud Shell で、GitHub からチュートリアル コードのクローンを作成します。

    git clone https://github.com/GoogleCloudPlatform/autonetdeploy-startup.git
  2. チュートリアル ディレクトリに移動します。

    cd autonetdeploy-startup
    

リージョンとゾーンの検証

このチュートリアルの特定のクラウド リソース(Compute Engine インスタンスなど)では、意図する配置リージョンまたはゾーン、またはその両方を明示的に宣言する必要があります。詳細については、Google Cloud のリージョンとゾーンをご覧ください。

このチュートリアルでは、1 つのリージョンだけが必要です。チュートリアル ファイルでされる値を示す値を、次の表で確認してください。

フィールド名 Google Cloud の値
リージョン名

us-west1
ロケーション オレゴン州ダラス(米国)
ゾーン

us-west1-b

AWS の準備

このセクションでは、このシリーズの他のチュートリアルで必要となる AWS リージョンを選択します。AWS リージョンの詳細については、AWS のリージョンとアベイラビリティー ゾーンをご覧ください。

  1. AWS Management Console にログインします。
  2. [VPC Dashboard] に移動して、[Oregon] リージョンを選択します。
  3. [EC2 Dashboard] と [VPC Dashboard] で、このチュートリアルで使用するリソースを確認します。

Deployment Manager の準備

Deployment Manager は、Cloud SDK と一緒に Cloud Shell にプリインストールされています。gcloud deployment-manager --help コマンドを実行すると、実行構文の概要を確認できます。

Terraform の準備

このセクションでは、Terraform をダウンロードしてインストールします。

  1. Cloud Shell で次のスクリプトを実行します。

    ./get_terraform.sh
    

    このスクリプトは、Terraform ツールの実行可能バイナリを ~/terraform ディレクトリにダウンロードして解凍します。スクリプト出力には、PATH を更新するためのエクスポート コマンドが表示されます。

  2. エクスポート コマンドを実行して PATH を更新します。

  3. Terraform が動作していることを確認します。

    terraform --help
    

    出力結果:

    Usage: terraform [--version] [--help] [command] [args]
    ...
    

不明な点がある場合は、Terraform のダウンロードTerraform のインストールのトピックをご覧ください。

アクセス認証情報の作成

このセクションでは、次の操作を行います。

  • Google Cloud と AWS のアクセス認証情報をダウンロードする。
  • テンプレートでこれらのアクセス認証情報を指し示す。

Deployment Manager と Terraform には、Google Cloud および AWS 内のプロジェクトと環境へのアクセスが必要です。Terraform については、サポートされるプロバイダの詳細をオンライン ドキュメントで確認できます。Terraform Google Cloud プロバイダでは認証情報を指定する方法が複数ありますが、このチュートリアルでは Google Cloud と AWS から認証情報ファイルをダウンロードします。Google Cloud 認証情報のダウンロードは、サービス アカウント認証を使用する方法であり、ベスト プラクティスです。

Compute Engine のデフォルト サービス アカウント認証情報のダウンロード

Linux 環境である Cloud Shell では、~/.config/gcloud ディレクトリ内の認証情報ファイルが gcloud によって管理されます。

Compute Engine のデフォルト サービス アカウント認証情報をする手順は次のとおりです。

  1. Cloud Console で、[サービス アカウント キーの作成] ページに移動します。

    [サービス アカウント キーの作成] ページに移動

  2. [サービス アカウント] プルダウンから Compute Engine のデフォルトのサービス アカウントを選択し、キーのタイプでは JSON を選択したままにします。

  3. [作成] をクリックします。これにより、認証情報が [PROJECT_ID]-[UNIQUE_ID].json という名前のファイルとしてダウンロードされます。

  4. ローカルマシンから Cloud Shell 環境にこの JSON ファイルを移動するには、Cloud Shell で [その他] をクリックして、[ファイルをアップロード] をクリックします。

  5. ダウンロードした JSON ファイルに移動し、[開く] をクリックしてアップロードします。このファイルはホーム ディレクトリ(~)に配置されます。

  6. 提供されている ./gcp_set_credentials.sh スクリプトを使用して ~/.config/gcloud/credentials_autonetdeploy.json ファイルを作成します。また、このスクリプトでは新しい認証情報を参照する terraform/terraform.tfvars も作成されます。

    ./gcp_set_credentials.sh ~/[PROJECT_ID]-[UNIQUE_ID].json
    

    出力結果:

    Created ~/.config/gcloud/credentials_autonetdeploy.json from ~/[PROJECT_ID]-[UNIQUE_ID].json.
    Updated gcp_credentials_file_path in ~/autonetdeploy-startup/terraform/terraform.tfvars.
    
  7. Deployment Manager で、サービス アカウントの認証情報を、gcloud により管理される既存の一連の認証情報に追加します。Terraform 構成ではこのロケーションからファイルが直接読み取られるため、Terraform ではこの操作が不要です。

    gcloud auth activate-service-account --key-file ~/.config/gcloud/credentials_autonetdeploy.json
    
  8. 次に cat コマンドと grep コマンドを使用して、サービス アカウント メールアドレスをファイルから取得し、メール文字列を表示します。

    cat ~/.config/gcloud/credentials_autonetdeploy.json | grep client_email
    
  9. gcloud 認証の設定を調べ、サービス アカウント メールアドレスがリストされてアクティブであることを確認します。

    gcloud auth list
    

    出力結果:

    ACTIVE  ACCOUNT
    *       ###-compute@developer.gserviceaccount.com
    

AWS アクセス認証情報のダウンロード

Cloud Shell で、AWS は認証情報ファイルを ~/.aws に保存します。

  1. AWS Management Console で自分の名前をクリックし、[My Security Credentials] をクリックします。

  2. [Users] をクリックします。

  3. 該当するユーザー名をクリックします。

  4. [Security credentials] をクリックします。

  5. [Create Access Key] をクリックします。

  6. [Download .csv file] をクリックして、ローカル システムに accessKeys.csv ファイルを作成します。

  7. [Close] をクリックします。

  8. Cloud Shell で [その他] をクリックし、[ファイルをアップロード] をクリックして、認証情報ファイルをホーム ディレクトリ(~)にアップロードします。

  9. ダウンロードした accessKeys.csv ファイルを選択し、[開く] をクリックしてアップロードします。

  10. 提供されているスクリプトを使用して、~/.aws/credentials_autonetdeploy ファイルを作成します。

    ./aws_set_credentials.sh ~/accessKeys.csv
    

    出力結果:

    Created ~/.aws/credentials_autonetdeploy.

プロジェクトの設定

このセクションでは、デプロイ テンプレートでプロジェクトを指し示します。

Google Cloud は、自動化ツールで使用する Google Cloud プロジェクトを指定するためのいくつかの方法を提供しています。単純化のために、環境からプロジェクト ID を取得する代わりに、テンプレート ファイル内の文字列変数によって Google Cloud プロジェクトを明示的に示します。

  1. Google Cloud プロジェクト ID を設定します。[YOUR_PROJECT_ID] は、実際の Google Cloud プロジェクト ID に置き換えます。

    gcloud config set project [YOUR_PROJECT_ID]

    出力結果:

    Updated property [core/project].
    
  2. 提供されているスクリプトを使用して、Deployment Manager と Terraform の構成ファイル内のプロジェクト値を更新します。

    ./gcp_set_project.sh
    

    出力結果:

    Updated project_id: gcp-automated-networks in ~/autonetdeploy-startup/deploymentmanager/autonetdeploy_config.yaml.
    Updated gcp_project_id in ~/autonetdeploy-startup/terraform/terraform.tfvars.
    
  3. 更新された 2 つのファイルを調べて、[PROJECT_ID] 値が deploymentmanager/autonetdeploy_config.yamlterraform/terraform.tfvars へ挿入されたことを確認します。

  4. 1 回限りの terraform init コマンドを実行して、このデプロイ用の Terraform プロバイダをインストールします。

    pushd ./terraform && terraform init && popd > /dev/null
    

    出力結果:

    Initializing provider plugins...
    - Checking for available provider plugins on https://releases.hashicorp.com...
    - Downloading plugin for provider "google" (0.1.3)...
    Terraform has been successfully initialized!
  5. Terraform plan コマンドを実行して認証情報を検証します。赤色のエラーテキストが表示されない場合は、認証が正しく機能しています。

    pushd ./terraform && terraform plan && popd > /dev/null
    

    出力結果:

    Refreshing Terraform state in-memory prior to plan...
    ...
    +google_compute_instance.gcp-vm
    ...
    Plan: 1 to add, 0 to change, 0 to destroy.
    

SSH 認証鍵を使用した VM インスタンスへの接続

Google Cloud では、Cloud Console と gcloud ツールがバックグラウンドで SSH 認証鍵の管理を行います。鍵ファイルの生成やアップロードを行わずに Compute Engine インスタンスと通信するには、ssh コマンドを使用します。

ただしマルチクラウドの演習では、Amazon Elastic Compute Cloud(EC2)で VM インスタンスに接続するために公開鍵 / 秘密鍵のペアが必要です。

鍵ペアの生成

  1. Cloud Shell で ssh-keygen を使用して新しい鍵ペアを生成します。[USERNAME] は Google Cloud ログイン情報で置き換えます。ユーザー名が不明な場合は、Cloud Shell の whoami コマンドの出力を [USERNAME] に使用します。チュートリアルでは、パスフレーズを空にしても問題ありません。

    ssh-keygen -t rsa -f ~/.ssh/vm-ssh-key -C [USERNAME]
    

    出力結果:

    Generating public/private rsa key pair.
    ...
    
  2. 秘密鍵へのアクセスを制限します。これはベスト プラクティスです。

    chmod 400 ~/.ssh/vm-ssh-key
    

Google Cloud への公開鍵のインポート

次の 2 種類の方法のいずれかを使用して公開鍵をインポートします。

  1. Cloud Shell で、Google Cloud に公開鍵を登録します。

    gcloud compute config-ssh --ssh-key-file=~/.ssh/vm-ssh-key
    

    出力結果:

    Updating project ssh metadata...done.

    このコマンドは Compute Engine VM インスタンスの更新も試行しますが、インスタンスがまだ作成されていないため、No host aliases were added... という警告は無視できます。

  2. Cloud Console で、プロジェクトの [メタデータ] ページを開きます。

    [メタデータ] ページを開く

  3. [SSH 認証鍵] をクリックします。鍵がまだ作成されていない場合は [SSH 認証鍵を追加] をクリックする必要があります。あるいは、[編集] と [項目を追加] をクリックして、メタデータを変更できます。

  4. 次のコマンドを使用して、ページから鍵データ文字列をコピーします。この文字列は、ssh-rsa [KEY_DATA] [USERNAME] という形式になります。Google Cloud では、文字列全体が入力されることが想定されています。文字列全体を含めないと、「Invalid key」というエラーテキストが表示されます。

    cat ~/.ssh/vm-ssh-key.pub
    

    出力結果:

    ssh-rsa [KEY_DATA] [USERNAME]
  5. [保存] をクリックします。

    これで、Cloud Shell の ssh コマンドを使用して、作成した VM インスタンスへのアクセスを確認できます。プロジェクト内のすべての VM インスタンスへのアクセスに使用できるプロジェクト全体の鍵を使用していることに注意してください。

    ssh -i ~/.ssh/vm-ssh-key [EXTERNAL_IP]

    デバッグするには、ssh コマンドに -v を追加します。

AWS への公開鍵のインポート

Google Cloud で生成された公開鍵ファイルは再利用できます。

  1. Cloud Shell から公開鍵ファイルをダウンロードするには、[さらに表示] をクリックし、[ファイルをダウンロード] をクリックします。
  2. 完全修飾パスを入力します(先ほどと同様に [USERNAME] は置き換えます)。

    /home/[USERNAME]/.ssh/vm-ssh-key.pub
    
  3. [ダウンロード] をクリックします。

  4. AWS Management Console の [EC2 Dashboard] の [NETWORK & SECURITY] で、[Key Pairs] をクリックします。

  5. [Import Key Pair] をクリックします。

  6. [Choose File] をクリックします。

  7. [vm-ssh-key.pub] を選択し、[Open] をクリックします。

  8. コンテンツが ssh-rsa [KEY_DATA] [USERNAME] の形式になっていることを確認します。

  9. [Import] をクリックします。

これで、vm-ssh-key 値の AWS エントリが表示されます。このキーは構成設定で参照できるため、ssh コマンドを使用してアクセスできます。

ssh コマンドを使用して AWS インスタンスに接続する場合、AWS と Google Cloud とで動作が異なります。AWS の場合は、AMI プロバイダでサポートされる汎用ユーザー名を指定する必要があります。このチュートリアルでは、AMI プロバイダはユーザーとして ubuntu を想定しています。

ssh -i ~/.ssh/vm-ssh-key ubuntu@[AWS_INSTANCE_EXTERNAL_IP]

これで、自動化ツールを使用してリソースをクラウドに簡単にデプロイできる環境が完成しました。このシリーズの自動ネットワーク デプロイ チュートリアルを実施する際にはこの環境を使用します。

クリーンアップ

このチュートリアルでは課金対象リソースは生成されないため、クリーンアップを行う必要はありません。

次のステップ

  • このシリーズの他のチュートリアルを試す。

    自動ネットワーク デプロイ: スタートアップ チュートリアルを開始します。このチュートリアルでは、Deployment Manager と Terraform を使用して、GCP でデフォルト ネットワークに VM インスタンスをデプロイする方法を説明します。

  • Deployment Manager と Terraform についての詳細を参照する。

  • 高度な gcloud 構成についての詳細を参照する。

    複数の認証情報セットを使用する場合、gcloud構成によってそのような使用をサポートします。個別の認証アカウントを使用して複数の名前付き構成を作成し、gcloud でこれらの構成を切り替える方法について詳細をご覧ください。

  • Google Cloud のその他の機能を試す。チュートリアルをご覧ください。