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

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

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

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

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

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

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

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

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

【更新記事一覧】

【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接続します。念のために

sudo yum update -y

を行ってください!

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

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

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

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

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

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

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

  1. sudo yum update -y

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

  2. curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.rpm.sh | sudo bash
    

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

  3. sudo yum install -y gitlab-ee
    

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

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

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

まとめ

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

手順を振り返ると

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

  2. gitlabサーバーの設定

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

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

  5. gitlabのインストール

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

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

 

Smallitのサービス