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

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

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

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

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

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

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

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

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

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

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

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

概要

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

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

目標

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

料金

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

始める前に

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

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

    プロジェクトに、名前と一意の project-id がされます。project-id を記録します。これは、Google Cloud Platform Console の [ホーム] の [プロジェクト情報] パネルで確認できます。

    [プロジェクト情報] パネル

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

    課金を有効にする方法について

  3. Compute Engine and Cloud 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 にアクセスできることを前提としています。

デプロイ アーキテクチャ

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

デプロイ環境

GCP 作業環境の準備

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

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

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

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

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

    cd autonetdeploy-startup
    

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

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

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

フィールド名 GCP 値

Region Name

us-west1

Location

The Dalles, Oregon, USA

Zone

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 を更新します。その後、Terraform が動作していることを確認します。

    terraform --help
    

    出力結果:

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

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

アクセス認証情報の作成

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

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

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

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

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

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

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

  2. [サービス アカウント] メニューで [Compute Engine default service account] を選択し、キーのタイプでは [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. [閉じる] をクリックします。

  8. Cloud Shell でメニュー展開ボタン メニュー展開 をクリックしてから、[ファイルをアップロード] をクリックして、認証情報ファイルをホーム ディレクトリ(~)にアップロードします。

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

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

    ./aws_set_credentials.sh ~/accessKeys.csv
    

    出力結果:

    Created ~/.aws/credentials_autonetdeploy.

プロジェクトの設定

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

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

  1. プロジェクト ID をします。[YOUR-PROJECT-ID] を実際のプロジェクト 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 つのファイル(deploymentmanager/autonetdeploy_config.yamlterraform/terraform.tfvars)を調べて、project-id 値が挿入されたことを確認します。

  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 インスタンスへの接続

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

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

鍵ペアの生成

  1. Cloud Shell で ssh-keygen を使用して新しい鍵ペアを生成します。[USERNAME] を実際の GCP ログインに置き換えてください。ユーザー名が不明な場合は、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
    

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

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

  1. gcloud を使用する: GCP に公開鍵を登録します。

    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 を使用する: プロジェクトの Compute Engine [メタデータ] ページを開きます。

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

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

  4. 次のコマンドを使用して、ページから鍵データ文字列をコピーします。文字列の形式は ssh-rsa [KEY_DATA] [USERNAME] です。GCP では、文字列全体が入力されることが想定されています。文字列全体を入力しないと、赤色のエラーテキスト [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 への公開鍵のインポート

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

  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 の動作は GCP とは異なります。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 Platform のその他の機能を試す。チュートリアルをご覧ください。

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...