Skip to content
Latchkey

DNS とは? インターネットの住所録

DNS(Domain Name System)は、api.example.com のようなホスト名を、クライアントが実際に接続する IP アドレスに変換する、インターネットの住所録です。

コンピューターは数値の IP アドレスを使ってトラフィックをルーティングしますが、人間や設定ファイルは名前を使います。DNS は、名前をオンデマンドでアドレスに解決することで両者の橋渡しをします。依存関係を取得したり、イメージを pull したり、API を呼び出すすべてのパイプラインは、まず DNS ルックアップを行うため、DNS は目立たないながらも CI の flakiness の頻繁な原因となります。

ルックアップの仕組み

クライアントは resolver にホスト名のアドレスを問い合わせます。resolver は DNS 階層をルートから top-level domain、そして権威 name server まで辿り、答えを返します。結果は time-to-live の間キャッシュされるため、繰り返しのルックアップは高速です。

一般的なレコードの種類

  • A および AAAA レコードは、名前を IPv4 または IPv6 アドレスにマッピングします。
  • CNAME レコードは、ある名前を別の名前のエイリアスにします。
  • MX レコードはメールサーバーを指します。
  • TXT レコードは検証やポリシーのデータを保持します。

キャッシュと TTL

各レコードは、resolver にどれだけの間キャッシュするかを伝える TTL を持ちます。短い TTL は変更を素早く反映させますがルックアップの量が増えます。長い TTL は効率的ですが更新が遅くなります。

CI/CD における DNS

DNS 解決が失敗すると、job は接続を開くことすらできず、いかなる HTTP リクエストが送信される前にエラーになります。デプロイ先を新しいホストに切り替えるには、多くの場合 DNS の変更が必要で、その変更が反映されるまでパイプラインは失敗することがあります。

DNS エラーが flaky に見える理由

resolver は、特にレコードが変更された直後に、時折 timeout したり古い答えを返したりします。"could not resolve host" で失敗した job が、コードを一切変更せずに次の実行では通ることがあり、これは一時的な DNS 不具合の典型的な兆候です。

runner での対処

信頼できる runner は、安定した resolver と妥当な timeout を使用します。Latchkey では、一般的なエンドポイントへの断続的な解決失敗が自動的にリトライされるため、1 回の flaky なルックアップが、それ以外は健全な build を沈めることはありません。

重要なポイント

  • DNS は、人間が読める名前を、クライアントが接続する IP アドレスに解決します。
  • レコードは TTL の間キャッシュされるため、変更の反映には時間がかかります。
  • ルックアップの失敗は、いかなる HTTP リクエストよりも前に job をブロックし、多くの場合一時的です。

関連ガイド