Compute Engine を使用する場合の一般的なヒント

このページでは、Compute Engine を使用して問題が発生した場合に役立つヒントについて説明します。

特定の問題のトラブルシューティングのヘルプについては、次のいずれかのセクションをご覧ください。

別のレスポンス形式を表示する

gcloud コマンドライン ツールは、REST API 呼び出しを行うことにより、ほとんどのアクションを実行します。pretty 形式の結果には、特定のコマンドから返されたレスポンスの最も重要な情報しか表示されません。さまざまなレスポンス形式を表示するには、jsonyamltext などのさまざまな出力形式でレスポンスを表示する --format フラグを使用します。たとえば、インスタンスのリストを JSON 形式で表示するには --format json を使用します。

gcloud compute instances list --format json

gcloud compute のログを表示する

gcloud ツールは、$HOME/.config/gcloud/logs にあるクエリ可能なログファイルにログを作成して保存します。Linux ベースのオペレーティング システムで最新のログファイルを表示するには、次のコマンドを実行します。

$ less $(find ~/.config/gcloud/logs | sort | tail -n 1)

ログファイルには、gcloud compute ツールを使用して送信されたすべてのリクエストとそのレスポンスに関する情報が含まれています。

リソース名を選択する

リソースの名前を選択する際には、Compute Engine のサポート ダッシュボードやオペレーション ダッシュボードにそれらの名前が表示される可能性があるので注意してください。そのため、リソース名には機密情報を含めないようにすることをおすすめします。

インターネットとの通信

以下の両方の条件が満たされる場合のみ、インスタンスはインターネットに直接アクセスできます。

Cloud NAT またはインスタンス ベースのプロキシ経由で接続することで、インターネットに間接的にアクセスすることもできます。ファイアウォール ルールの構成など、その他の考慮事項については、インターネット アクセスの要件をご覧ください。

アイドル状態の接続

Google Cloud VPC ネットワークでは、接続のコンセプトを持つ IP プロトコル(TCP など)に対して 10 分間の接続トラッキングが実装されます。確立済みの接続で 10 分以内にパケットの送受信が発生していれば、その接続に関連付けられた受信パケットは許可されます。接続のパケットが 10 分以上送受信されていない場合、アイドル状態の接続のトラッキング エントリが削除されます。接続のトラッキング エントリが削除された後、少なくとも 1 つの新しい送信パケットが送信されるまで、Google Cloud は追加の受信パケットを許可しません。この接続トラッキングは、すべての送信元と宛先(内部 IP アドレスと外部 IP アドレスの両方)に適用されます。

アイドル状態の接続を防ぐには、次の操作を行います。

  • オペレーティング システムの TCP keep-alive パラメータに 10 分未満の間隔を設定します。これにより、時間枠内に少なくとも 1 つのパケットが送信されます。

  • TCP 接続を開くアプリケーションで SO_KEEPALIVE オプションを有効にしても同じ結果になります。

次の例では、オペレーティング システムの TCP keep-alive パラメータを 1 分に設定しています。SO_KEEPALIVE を使用するように構成する方法については、ご使用のアプリケーションまたはソフトウェア ライブラリのドキュメントをご確認ください。

Linux


次のコマンドを実行します。

$ sudo /sbin/sysctl -w net.ipv4.tcp_keepalive_time=60 net.ipv4.tcp_keepalive_intvl=60 net.ipv4.tcp_keepalive_probes=5
再起動しても設定が失われないようにするには、設定を /etc/sysctl.conf ファイルに追加します。

追加情報については、Linux TCP Keepalive HOWTO をご覧ください。

macOS


次のコマンドを実行します。

$ sudo sysctl -w net.inet.tcp.always_keepalive=1 net.inet.tcp.keepidle=60000 net.inet.tcp.keepinit=60000 net.inet.tcp.keepintvl=60000

Windows


レジストリパス HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\ で、DWORD データ型を使用して次の設定を追加します。設定がすでに存在する場合は値を編集します。

KeepAliveInterval: 1000
KeepAliveTime: 60000
TcpMaxDataRetransmissions: 10

Compute Engine に別の SSH ユーザーとしてアクセスする

gcloud compute では、既定で $USER 変数を使用して /etc/passwd ファイルにユーザーが追加されます。追加されたユーザーは、SSH を使用して仮想マシン インスタンスに接続できます。別のユーザーを指定するには、gcloud compute ssh コマンドを実行するときに --ssh-key-file PRIVATE_KEY_FILE フラグを使用します。次に例を示します。

gcloud compute ssh example-instance --ssh-key-file my-private-key-file

詳細については、gcloud リファレンス ドキュメントをご覧ください。

シリアル コンソールとのやり取り

インスタンスのシリアル コンソールへのインタラクティブ アクセスを有効にすると、シリアル コンソールからインスタンスに接続してトラブルシューティングを行うことができます。

詳しくは、シリアル コンソールとのやり取りをご覧ください。

カスタム イメージから作成されたインスタンスでパケットの断片化を回避する

Linux イメージと Windows Server イメージの場合、VPC ネットワークの最大伝送単位(Maximum Transmission Unit、MTU)は 1460 バイトです。ただし、ネットワーク MTU は変更できます。詳しくは、VPC ドキュメントの最大伝送単位(MTU)をご覧ください。

UDP ソケットで Compute Engine インスタンスと通信するクライアント アプリケーションを作成する際に、UDP データグラムのデータ最大サイズがネットワーク MTU よりも 28 バイト少なく設定されている場合、断片化を回避できます。たとえば、ネットワークの MTU が 1,460 バイトの場合は、パケットあたり 1,432 バイトまでの UDP データは断片化することなく送信できます。ネットワークの MTU が 1,500 バイトの場合は、断片化なしで最大 1,472 バイトの UDP データを送信できます。28 バイトは IPv4 パケット ヘッダー(20 バイト)と UDP データグラム ヘッダー(8 バイト)に使用されます。