【AWS】GitlabをNATインスタンスを使ってプライベートサブネット内のEC2にインストールする【Linux】

こんにちは!株式会社Smallitの橋本です。

今回は、インフラエンジニアが絶対に通るであろう
AWS上にGitlabを構築するという記事です。

インフラエンジニアであれば、githubかgitlabの構築しますよね!
この記事ではgitlabの構築です。

インフラエンジニアの宿命の1つとも言えるのが、CI/CD環境の構築。

私も2~3か月以内にCI/CD環境を構築しなければいけないので、
日々分からないことの連続の中で奮闘中です。

こういう場合、非常に覚えたことを忘れやすい状態なので、
復習&備忘録としてこの記事を書いています。

構築したいシステムの全体像

【エンジニア募集中】フルリモート可◎、売上/従業員数9年連続UP、平均残業8時間、有給取得率90%、年休124日以上 etc.  詳細はこちらから>

この記事で作成するのは赤枠で囲っている部分です。
そのほかの構築についても、随時更新予定です。

【更新記事一覧】

【AWS】ネットワーク構築手順

この記事でgitlabの環境を整える前に、まずはネットワークの構築を行ってください。

【AWS】初心者がDocker上にJenkinsを構築してみた【Linux】

 

また、docker上にjenkins環境を構築する記事もありますので、
上記CI/CD環境を構築したい場合も参考にしてみてください。

 

構築したいGitlabの全体像

より詳しいネットワークは上記のようになります。
この記事では、赤枠で囲った部分の構築方法を紹介をしています。

gitlabはインターネットからアクセスされたくないので、
プライベートな空間(プライベートサブネット)にあるEC2にインストールします。

プライベートサブネットはインターネットに接続できませんが、
gitlabをインストールする必要があります。

そのため中から外のみの通信を可能にするNATインスタンスを
パブリックサブネットに設定します。

その後、ネットワークロードバランサーを使用し、
他のメンバーからgitlabが使用できるようにします。
ネットワークロードバランサの設定は、別の記事で紹介します。

EC2の設定

まずは、EC2の設定を行います。今回設定するEC2は全部で3つです。

  1. Gitlabサーバー:プライベートサブネットに設定します。

  2. 踏み台サーバー:プライベートサブネットにあるGitlabサーバーに接続するために、
    パブリックサブネットに設定します。

  3. NATインスタンス:パブリックサブネットに設定します。
    プライベートサブネット内にあるEC2は、インターネットに接続できないため、
    その中継を行うためのNATインスタンスを構築する必要があります。

     

Gitlabサーバー用のEC2の設定

Gitlabサーバは、あまりにも低いスペックのサーバーで構築を行うと、
インストールが途中で止まってしまいます。
そのため、t2.midiumで構築を行います。

STEP1 AMI:Linux 2を選択します。

STEP2 インスタンスタイプ:t2.midiumを選択します。

STEP3 インスタンスの詳細の設定:gitlabはプライベートサブネットに設定します。
また、インターネットから直接アクセスはしないので、パブリックIPアドレスは不要です。

また、VPCのCIDRは10.0.0.0/16、プライベートサブネットのCIDRは、10.0.20.0/24なので
プライベートIPアドレスは10.0.20.10としました。

インスタンスの詳細の設定の他の項目設定はデフォルトです。

STEP4 ストレージの追加:とりあえず無料なので、8GB → 30GBに変更しました。

STEP5 タグの追加:タグには「Name:分かりやすい名前」を付けておきます。
私の場合はprac-gitlab-serverにしました。

STEP6 セキュリティグループの設定:新しいセキュリティグループを作成を選択し、
分かりやすいセキュリティグループ名や説明を付けます。

開放するポートは、SSH(22ポート)のみです。

あとは、SSH接続のためのキーを作成します。

 

踏み台サーバーのEC2の設定

次に踏み台サーバー用のEC2の設定を行います。

STEP1 AMI:Linux2を選択します。

STEP2 インスタンスタイプの選択:t2.microを選択します。

STEP3 インスタンスの詳細の設定:作成したVPCを選択し、
パブリックサブネットを選択します。
また、自動割り当てパブリックIPを有効にします。

プライベートIPアドレスは、VPCのCIDRは10.0.0.0/16、
パプリカサブネットのCIDRは10.0.10.0/24なので、10.0.10.10としました。

STEP4 ストレージの追加:とりあえず無料なので、8GB → 30GBに変更しました。

STEP5 タグの追加:「Name:分かりやすい名前」を設定します。
ここでは、踏み台サーバーは英語でJumpServerと呼ばれるようなので、
「prac-jump-server」としました。

STEP6 セキュリティグループの設定:
自分のPCからのみSSH接続できるように、マイIPを選択します。
SSH接続用のSSH-Keyを作成・ダウンロードし、インスタンスの作成ボタンを押します。

 

NATインスタンス作成

最後にNATインスタンスをパブリックサブネットに作成します。

STEP1 AMI:コミュニティ AMI → 上記のamiを選択します。

STEP2 インスタンスタイプの選択:t2.microを選択します。

STEP3 インスタンスの詳細の設定:
パブリックサブネットを選択し、自動割り当てパブリックIPを有効にします。

念のためプライベートIPアドレスも設定しておきます。

STEP4 ストレージの追加:こちらも念のために8GB → 30GBに変更しておきます。

STEP5 タグの追加:「Name:分かりやすい名前」でタグを付けます。
(私の場合は、Name prac-nat-serverにしました。)

STEP6 セキュリティグループの設定:以下のように設定します。

SSH:マイIP
HTTP:プライベートサブネットのCIDR(私の場合は、10.0.20.0/24)
HTTPS:プライベートサブネットのCIDR(私の場合は、10.0.20.0/24)

一番上を選択し、次へを押します。

SSH接続のためのKeyを作成します。

STEP7 セキュリティグループのアウトバウンドルールの設定:
作成したnatインスタンスを選択し、セキュリティ → セキュリティグループを押します。

アウトバウンドルール → アウトバウンドルールの編集を押します。

上記のようにHTTP、HTTPSの通信を許可する設定します。

STEP8 送信元/送信先チェックの停止:
NATインスタンスは、データの中継を行う機能であるため、
送信元でも送信先でもありません。
そのため送信元/送信先チェックの停止を行います。

停止の左側にあるチェックボックスにマークを入れて、保存ボタンを押します。

STEP9 ルートテーブルの設定:
プライベートサブネットを選択し、「ルート → ルートを編集」を押します。
「ルートを追加 → 送信先に0.0.0.0/0 →
→ターゲットでインスタンスを選択 → natインスタンス」を選択し、変更を保存を押します。

これで、NATインスタンスの設定は完了ですし、
プライベートサブネット内のEC2からgitlabをインストールできるようになりました。

Gitlabのインストール

プライベートサブネットにあるEC2にgitlabをインストールするためには、
SSHポートフォワーディングを利用します。

SSHポートフォワーディングとは、私も詳しくありませんが、
パブリックサブネットにあるEC2を利用することで、
プライベートサブネットのEC2にアクセスできることだと思ってます。

詳しくは調べてくださいw

踏み台サーバーにSSH接続します。念のために

を行ってください!

設定 → SSH転送をクリックします。

追加ボタンをクリックします。

ローカルのポート:22 + 任意の値(私は10000にしました)
リモート側のホスト:gitlabサーバーのプライベートIPアドレス
ポート:22(SSH接続なので)

これで「OK → OK」を押します。

踏み台サーバーに接続した状態のTeratermを立ち上げたまま、
もう一つTeratermを立ち上げます。
(SSH接続できるのであれば、ソフトウェアは何でも構いません。)

新しく立ち上げたTeratermで、上記のように設定します。

これで、踏み台サーバーを経由して
プライベートサブネット内のEC2にアクセスできるようになりました。
次に以下のコードを順番に実行します。

  1. バージョン管理を行うためのコマンドです。

  2. gitlabをダウンロードするコマンドです。
    「The repository is setup! You can now install packages.」と表示されたらOkです。

  3. ダウンロードしたgitlabをインストールするコマンドです。
    「Complete!」と表示されたらOkです。

これでプライベートサブネット内のEC2にgitlabのインストールが完了しました。

まだネットワークロードバランサの設定が完了していないため、
ブラウザでのアクセスはできませんが、インストールは完了しています。

まとめ

今回はプライベートサブネット内のEC2(Linux)にgitlabをインストールする記事でした。

手順を振り返ると

  1. 踏み台サーバーの設定

  2. gitlabサーバーの設定

  3. NATインスタンスの設定

  4. SSHポートフォワーディング

  5. gitlabのインストール

ただインストールするだけなのに結構な手順があります。
しかし、セキュリティを意識するなら大事なことです・・・。

ネットワークロードバランサの設定の記事を書いたら、
gitlabをメンバーで利用できるようになるので、ぜひ記事をみてみてください。

 

【エンジニア募集中】フルリモートも◎(リモート率85.7%)、平均残業8時間、年休124日以上、有給取得率90% etc. 詳細はこちらから>

Smallitのサービス