GitHub EnterpriseをAWSで使おう – インストール編

2016.10.25

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

こんにちは、中山です。

弊社のブログを読んでいる方の中にはGitHubを利用している方は多いと思います。もはやコード共有サービスとしてデファクトスタンダードと言って良いほど沢山のユーザから利用されているサービスです。さまざまなツール/サービスと連携してソフトウェアを作成することができるので、個人/組織を問わず日々利用されている方は多くいるのではないでしょうか。私自身ほぼ毎日使っているサービスの1つです。

そのGitHubにはEnterprise版であるGitHub Enterprise(以下GHE)というプロダクトが存在します。GHEはサービスではなくソフトウェアとしてサーバ上にインストールできるため、より自分の環境に合った利用が可能になります。

GHEを利用するメリットはさまざまあると思いますが、主な導入理由として以下を上げる方は多いのではないでょうか。

  • 規則により社内で利用しているコードを外部サービス上に置きたくない/置けない
  • GitHubの障害やメンテナンスに巻き込まれたくない

GitHubにはプライベートリポジトリ機能があるので、公開したくないコードを置くことは可能ですが、誤ってパブリックにしてしまう可能性などを理由として、大事なコードを外部サービスに置きたくないと考える方はいると思います。また、GitHubとCI/CDを連携させている場合、GitHubが何らかの理由でダウンしているとデプロイができないなど開発フローに影響が出てしまう可能性もあります。

こういったことを懸念されている方にとってGHEは魅力的な選択肢の1つになるはずです。という訳で、今回さまざまな理由でGHEの導入を検討されている方々向けにAWS上でGHEを利用する方法をご紹介しようと思います。

GHEをAWSで利用するメリット

GHEをAWS上で利用するメリットはどういったものがあるでしょうか。私が考える主なメリットは以下のものがあると思います。

  • 導入が容易
  • 運用コストの低減が期待できる
  • セキュアに利用できる
  • 他AWSリソースとの連携

それぞれの理由をご紹介します。

導入が容易

GHEをAWSで使う方法はとても簡単です。GitHub社が公式のAMIを用意してくれているので、基本的にそれを起動させるだけで利用できます。インストールに関わる作業はマネジメンコンソールで操作可能なので、AWSの利用経験のない方でも簡単に構築できると思います。

運用コストの低減が期待できる

GHEはサーバ上にインストールして利用するため、運用は自分たちで実施する必要があります。バックアップの設定、障害発生時の対応などなどできるだけこういった運用コスト(人的コストも含む)は低減したいはずです。AWSにはさまざまなフルマネージドサービス、つまり運用面をまるっとAWSにおまかせしたサービスが豊富に提供されています。

例えばEBSのスナップショットを取得してバックアップしたい場合。実装方法はさまざまありますが、CloudWatch Eventで定期的に起動させたLambdaで取得すれば簡単に実装可能です。障害対応はどうでしょうか。さすがにインスタンスにログインしてシェルコマンド叩くまで作り込むのはいろいろと試行錯誤が必要ですが、障害が発生したインスタンスの再起動程度であれば、CloudWatchのアラートにリブート機能を追加すればお手軽に設定可能です。

こういったフルマネージドサービスを利用すれば運用コストを低減した形でGHEを利用できます。

セキュアに利用できる

GHEに保存されるコードは社外秘のものが多いのではないでしょうか。つまり、それによって会社が支えられている重要な資産です。こういった重要なデータが保存されることが多いのでデータの漏洩は絶対に避けたい事態だと思います。そのため、GHEを利用する方にとってセキュリティは重要な要素になると思います。

AWSにはさまざまなセキュリティ関連のサービスがあります。GHE関連で言うと、AWS上にプライベートなNWを構築できるVPC、自社NWとVPCを暗号化して通信可能なハードウェアVPN、または専用線を経由してVPCと接続するDirect Connectなどを利用できます。例えば以下のような構成で簡単にかつセキュアなNWを構築することができます。

ghe-vpn

VPCと自社NW間はIPSecを利用した暗号化通信が可能です。ルータの設定は必要ですが、それ以外はマネジメントコンソールから簡単に構築できます。

厳密に言うとAWSも「外部サービス」ですが、こういったサービスを利用すれば自社NWとセキュアに接続できるので、情報漏えいの可能性が極めて低いシステムが構築可能です。

他AWSリソースとの連携

GHE単体をAWS上に置くだけでもさまざまなメリットを享受できますが、すでにAWSを利用しているユーザにとってそれらと連携できるとうれしいと思います。例えばVPC Peeringを利用して、既存サービスが設置されているVPCとGHEが設置されているVPCを接続すれば、プライベートIPアドレスを利用して接続することが可能です。

ghe-vpc-peering

社内NW内にいるエンジニアがGHEにpushするとCI/CDが走り、既存サービスへデプロイといった構成が簡単に構築可能です。

使ってみる

GHEをAWS上で構築する方法はInstalling GitHub Enterprise on AWSというドキュメントに丁寧にまとめられています。お使いになる際はまずこちらのドキュメントを読むことをオススメいたします。GHEを利用するにはライセンスの購入が必要ですが、45日間であれば無料で利用可能です。

注意点として今回は現在(2016年10月25日)の最新バージョンである2.7の利用を前提とします。バージョンがアップデートされた場合、このエントリの情報とは異なる内容になる可能性もあるので、常に最新の情報を参照するようにしてください。

1. ライセンスの取得

GHEを利用するためにはライセンスを取得する必要があります。こちらのページから必要事項を記入の上ダウンロードします。

ghe2

2. GHEインスタンスの構築

ライセンスのダウンロード画面にはGitHub社が用意してくれたCloudFormationの実行コマンドも同時に記載されています。このコマンドを実行すれば簡単にGHEインスタンスが構築可能です。デフォルトVPCが利用されるので、その点ご注意ください。またセキュリティグループは「0.0.0.0/0」のフルオープンで構築されます。あくまでトライアルのために構築するものであるとご認識した方がよいです。

ghe8

上記画面に表示されているコマンドではキーペアが指定されていません。SSHを利用してGHEインスタンスにログインしてみたい場合は以下のようにパラメータにキーペア名を指定してください。

$ aws cloudformation create-stack \
  --region <region> \
  --stack-name GitHubTrial \
  --template-url https://github-enterprise.s3.amazonaws.com/cloudformation/trial-**********.template \
  --parameters \
    ParameterKey=Instance,ParameterValue=r3.large \
    ParameterKey=Data,ParameterValue=50 \
    ParameterKey=KeyName,ParameterValue=<keypair-name>

GHEインスタンスを構築する上でGitHub社が公開しているシステム要件が幾つかあります。以下に現時点の情報をまとめますが、実際に構築する際は最新の情報を参照するようにしてください。公開されている情報は先程のドキュメント上に記載されています。

  • インスタンスタイプ
ユーザ数 vCPU Memory GitHub社推奨
0 - 500 2 16GB r3.large(vCPU: 2, Memory: 15.25GB)
500 - 3000 4 32GB r3.xlarge(vCPU: 4, Memory: 30.5GB)
3000 - 5000 8 64GB r3.2xlarge(vCPU: 8, Memory: 61GB)

GHEはt2系など一部のインスタンスタイプをサポートしていないのでご注意ください。

  • EBSサイズ
ユーザ数 追加したEBS ルート用EBS
0 - 500 100GB 80GB
500 - 3000 250GB 80GB
3000 - 5000 500GB 80GB

EBSはルート用とは別にデータ用のEBSを追加する必要があります。

  • セキュリティグループ
ポート プロトコル 用途
8443 HTTPS HTTPSを利用したGHEのマネジメントコンソールログイン。少なくとも初期構築時に利用します。
8080 HTTP HTTPを利用したGHEのマネジメントコンソールログイン。SSLが無効化されている場合に利用可能です。
122 SSH SSHログイン用。22番ポートはgit+ssh用途に利用されます。
1194/UDP VPN GHEのレプリケーション機能で利用。
161/UDP SNMP GHEのメトリクスをSNMP経由で取得する場合に利用。
443 HTTPS GHEのアプリケーションとGit over HTTPSで利用。
80 HTTP SSLが無効化されている場合にGHEのアプリケーションで利用。
22 SSH Git over SSHで利用。パブリック/プライベート両方のリポジトリで利用可能です。
9418 Git Gitプロトコル。パブリックリポジトリのみ利用可能です。トラフィックは暗号化されません。
25 SMTP 暗号化(STARTTLS)されたSMTPで利用。

GHEは上記ポートを利用するので、ご利用の際はご注意ください。なるべくHTTPではなくHTTPSのご利用をオススメします。

3. 初期設定

GHEインスタンスを構築したら「https://<IPアドレス>」にアクセスしてください。以下のように8443番ポートにリダイレクトされます。この段階ではSSL証明書をまだ設置していないのでデフォルトで用意されている自己証明書が表示されます。例外に登録してそのまま進めてください。

ghe1

取得したライセンスをアップロードし管理者用パスワードを入力すると、新規インストールか別のGHEから移行するか選択する画面が表示されます。今回は新規インストールなので「New Install」を選択してください。

ghe3

続いて以下のように各種設定画面が表示されます。今回はデフォルト設定のままにして、別エントリでご紹介させていただこうと思います。緑色の「Save Settings」を押下してください。

ghe4-960x5751

すると以下のように「Configuring your instance」と表示され、各種設定の保存とアプリケーションの再起動がスタートします。しばらく待つと先程までグレーアウトされていた「Visit your instance」が緑色に変化し、クリック可能になるので押下してください。

ghe5

最後に管理者用ユーザの作成画面が表示されるのでユーザ名/メールアドレス/パスワードを入力すれば初期インストールは完了です。

ghe6

「Start a project」を押下すればすぐに使い始められます。

ghe7

まとめ

いかがだったでしょうか。

以前私は別のクラウドサービス上にGHEをインストールしたことがあるのですが、それと比較するとかなり簡単にインストールできるなと感じました。ライセンスのところでご紹介したように45日間は無料で利用可能です。まずはお気軽に使ってみることをオススメします。

次回以降ではより踏み込んだGHE on AWSの情報をご紹介しようと思います。

本エントリがみなさんの参考になれば幸いです。