- クラウド技術
【AWS】GitlabをNATインスタンスを使ってプライベートサブネット内のEC2にインストールする【Linux】
- #AWS
こんにちは!株式会社Smallitの橋本です。
今回は、インフラエンジニアが絶対に通るであろう
AWS上にGitlabを構築するという記事です。
インフラエンジニアであれば、githubかgitlabの構築しますよね!
この記事ではgitlabの構築です。
インフラエンジニアの宿命の1つとも言えるのが、CI/CD環境の構築。
私も2~3か月以内にCI/CD環境を構築しなければいけないので、
日々分からないことの連続の中で奮闘中です。
こういう場合、非常に覚えたことを忘れやすい状態なので、
復習&備忘録としてこの記事を書いています。
構築したいシステムの全体像
【エンジニア募集中】フルリモート可◎、売上/従業員数9年連続UP、平均残業8時間、有給取得率90%、年休124日以上 etc. 詳細はこちらから>
この記事で作成するのは赤枠で囲っている部分です。
そのほかの構築についても、随時更新予定です。
【更新記事一覧】
この記事でgitlabの環境を整える前に、まずはネットワークの構築を行ってください。
【AWS】初心者がDocker上にJenkinsを構築してみた【Linux】
また、docker上にjenkins環境を構築する記事もありますので、
上記CI/CD環境を構築したい場合も参考にしてみてください。
構築したいGitlabの全体像
より詳しいネットワークは上記のようになります。
この記事では、赤枠で囲った部分の構築方法を紹介をしています。
gitlabはインターネットからアクセスされたくないので、
プライベートな空間(プライベートサブネット)にあるEC2にインストールします。
プライベートサブネットはインターネットに接続できませんが、
gitlabをインストールする必要があります。
そのため中から外のみの通信を可能にするNATインスタンスを
パブリックサブネットに設定します。
その後、ネットワークロードバランサーを使用し、
他のメンバーからgitlabが使用できるようにします。
ネットワークロードバランサの設定は、別の記事で紹介します。
EC2の設定
まずは、EC2の設定を行います。今回設定するEC2は全部で3つです。
-
Gitlabサーバー:プライベートサブネットに設定します。
-
踏み台サーバー:プライベートサブネットにあるGitlabサーバーに接続するために、
パブリックサブネットに設定します。 -
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接続します。念のために
1 |
sudo yum update -y |
を行ってください!
設定 → SSH転送をクリックします。
追加ボタンをクリックします。
ローカルのポート:22 + 任意の値(私は10000にしました)
リモート側のホスト:gitlabサーバーのプライベートIPアドレス
ポート:22(SSH接続なので)
これで「OK → OK」を押します。
踏み台サーバーに接続した状態のTeratermを立ち上げたまま、
もう一つTeratermを立ち上げます。
(SSH接続できるのであれば、ソフトウェアは何でも構いません。)
新しく立ち上げたTeratermで、上記のように設定します。
これで、踏み台サーバーを経由して
プライベートサブネット内のEC2にアクセスできるようになりました。
次に以下のコードを順番に実行します。
-
1sudo yum update -y
バージョン管理を行うためのコマンドです。
-
12curl 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です。 -
12sudo yum install -y gitlab-ee
ダウンロードしたgitlabをインストールするコマンドです。
「Complete!」と表示されたらOkです。
これでプライベートサブネット内のEC2にgitlabのインストールが完了しました。
まだネットワークロードバランサの設定が完了していないため、
ブラウザでのアクセスはできませんが、インストールは完了しています。
まとめ
今回はプライベートサブネット内のEC2(Linux)にgitlabをインストールする記事でした。
手順を振り返ると
-
踏み台サーバーの設定
-
gitlabサーバーの設定
-
NATインスタンスの設定
-
SSHポートフォワーディング
-
gitlabのインストール
ただインストールするだけなのに結構な手順があります。
しかし、セキュリティを意識するなら大事なことです・・・。
ネットワークロードバランサの設定の記事を書いたら、
gitlabをメンバーで利用できるようになるので、ぜひ記事をみてみてください。
【エンジニア募集中】フルリモートも◎(リモート率85.7%)、平均残業8時間、年休124日以上、有給取得率90% etc. 詳細はこちらから>