こんにちは、@Manabu です。
AWSを活用してプロジェクトを進めていると、コードの管理に悩むことはありませんか?
特にEC2インスタンス内のソースコードを効率的にバージョン管理する方法を模索している方も多いと思います。
そんな時に便利なのが、AWS CodeCommitです。
CodeCommitを使うことで、GitリポジトリをAWS上にホスティングし、EC2インスタンス内のソースコードを安全かつ効率的に管理することができます。
今回は、EC2内のソースについて、Codecommitを使用してバージョン管理するためのセットアップ方法について紹介していきます。
この記事は、以下のような方におすすめです。
ぜひ参考にしてください。
はじめに
AWS CodeCommitを使ってソースコードのバージョン管理を行う前に、基本的な概念と前提条件について説明します。
Gitとは?
※画像はイメージです。
Gitは、分散型バージョン管理システムであり、プロジェクトのソースコードの変更履歴を効率的に扱うために設計されています。
個々の開発者がローカルで完全なリポジトリのコピーを持ち、変更を行ってそれをほかのリポジトリと同期することができます。
複数人での開発にも便利で、Gitはその速さ、データの整合性、そして分散型の特徴により、小規模から大規模なプロジェクトまで幅広く利用されています。
AWS Codecommitとは?
AWS Codecommitは、Amazon Web Servicesが提供するセキュアなソースコード管理サービスです。
プライベートなGitリポジトリを無制限にホスティングできるマネージドサービスで、個人開発から大規模なチームのプロジェクトのバージョン管理に最適です。
AWSSの強力なインフラストラクチャー上で動作するため、高い可溶性とスケーラビリティを提供します。
前提条件
Codecommitを使用する前に、以下の準備が必要になります。
手順
セットアップの手順を記載していきます。
※gitのインストールなど、すでに対応済みの方はスキップして下さい。
Codecommitのリポジトリ作成
AWSのマネジメントコンソールよりログインし、Codecommitのコンソールからリポジトリを作成します。
設定値としては、「リポジトリ名」と「説明」のみになります。
入力したら「作成」ボタンから、リポジトリを作成します。
IAMユーザーの作成
codecommit用のユーザーを作成します。
コンソールにログインするためのユーザーでも設定可能ですが、セキュリティ的に適切な権限を付与することが推奨されているため、新規に専用のユーザーを作成することをお勧めします。
AWSのマネジメントコンソールから、IAMのコンソールに移動しユーザーを作成します。
以下の値を設定し、確認できたら作成します。
許可ポリシー:ポリシーを直接アタッチする⇨AWSCodeCommitFullAccess
EC2でsshキーを作成
ソースを管理したいEC2にターミナルからssh接続します。
gitを操作するユーザーで、パブリックキーとプライベートキーを作成します。
私は、rootユーザーで操作したいので、rootユーザーのホームディレクトリに保存しています。
以下のコマンドを実行します。
# gitコマンドを実行するユーザーのホームディレクトリに移動
cd /root/.ssh
# キー作成コマンドを実行
ssh-keygen
# 最初の質問で以下を入力し、最後までエンターを押す
codecommit_rsa
実行すると、/root/.ssh配下に「codecommit_rsa」と「codecommit_rsa.pub」が作成されます。
IAMユーザーにSSHのパブリックキーをアップロード
先ほど作成した「codecommit_rsa.pub」の中身を、作成したIAMユーザーの「AWS CodeCommit の SSH 公開キー」に入力して、アップロードします。
アップすると「SSH キー ID」が作成されます。
EC2からcodecommitに接続
gitコマンドを操作するユーザーのホームディレクトリ内にある、.sshフォルダに設定ファイルを作成します。
cd /root/.ssh
vi config
# 以下の値をコピーし貼り付けて保存します。
Host git-codecommit.*.amazonaws.com
User APKAUWHZW3IJTWCMSPBF #こちらの値はIAMユーザーのSSH キー ID
IdentityFile ~/.ssh/codecommit_rsa
# 保存後ファイルの権限を変更します。
chmod 600 config
ここまで設定すると、codecommitとの接続が可能になっていると思います。
以下のコマンドを実行して、接続を確認します。
ssh git-codecommit.us-east-2.amazonaws.com
# 以下のような実行結果になれば接続可能
The authenticity of host 'git-codecommit.us-east-2.amazonaws.com (52.95.20.253)' can't be established.
RSA key fingerprint is SHA256:3lBlW2g5xn/NA2Ck6dyeJIrQOWvn7n8UEs56fG6ZIzQ.
RSA key fingerprint is MD5:a9:6d:03:ed:08:42:21:be:06:e1:e0:2a:d1:75:31:5e.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'git-codecommit.us-east-2.amazonaws.com,52.95.20.253' (RSA) to the list of known hosts.
You have successfully authenticated over SSH. You can use Git to interact with AWS CodeCommit. Interactive shells are not supported.Connection to git-codecommit.us-east-2.amazonaws.com closed by remote host.
Connection to git-codecommit.us-east-2.amazonaws.com closed.
Codecommitにソースをプッシュ
gitをインストールして、プッシュするまでのコマンドを以下にまとめています。
# gitをインストール
sudo yum install git -y
# 管理したいディレクトリに移動(例)
cd /var/www/html
# リポジトリの初期化
git init
# 追加したいファイルをステージングエリアに追加
git add .
# コミットの作成
git commit -m "最初のコミット"
# リモートリポジトリの作成(origin以降は、codecommitのリポジトリから取得します。)
git remote add origin ssh://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/test
# リモートリポジトリの確認
git remote -v
origin ssh://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/test (fetch)
origin ssh://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/test (push)
# コミットのプッシュ
git push origin master
これでcodecommit上にEC2内で管理されているコミットがプッシュされました。
codecommit上のコンソールからプッシュされたか確認しましょう。
最後に
AWS CodeCommitとgitの基本を学んできましたが、これらのツールを使ってバージョン管理を行うことは、開発プロセス全体にわたってその利点を理解し、適用することにあります。
特に、AWSのAuto Scaling Groups(ASG)のようなサービスを使用する際や、デプロイメントプロセスを最適化する場合には、バージョン管理が重要な役割を果たします。
Auto Scalingグループとバージョン管理
ASGを使用してアプリケーションをスケールする場合、複数のインスタンスにわたって一貫したソースコードのバージョンを保持することが必須です。
CodeCommitを利用することで、すべてのインスタンスが最新の安定したコードバージョンを実行していることを保証し、開発と運用の両方で一貫性を確保できます。
また、何か問題が発生した場合には、以前の安定したバージョンに迅速にロールバックすることが可能になります。
バージョン管理が特に必要なシナリオ
- 複数環境での開発: 開発、ステージング、本番など、複数の環境で作業する際、各環境で実行されているコードのバージョンを管理することが重要です。
- チーム開発: 複数の開発者が同時に同じプロジェクトに取り組む場合、コードの変更を追跡し、衝突を防ぐためにバージョン管理システムが不可欠です。
- 継続的インテグレーション/継続的デリバリー(CI/CD): CI/CDパイプラインを通じて自動的にコードをビルド、テスト、デプロイするプロセスでは、バージョン管理が中心的な役割を果たします。
これらのシナリオでは、バージョン管理を効果的に活用することで、開発プロセスの透明性が向上し、エラーの特定と修正が容易になり、最終的には製品の品質とチームの生産性が向上します。