はじめに
こんにちは!エンタープライズクラウド事業部の永井です。
当記事では、AWSで完結するプライベートなGit環境(EC2 on Gitea)の構築手順について記載します。
※前回の記事で作成したリソースを利用します。まずはこちらをご参照ください。
概要
全体の構成図は下記の通りです。
当記事では、赤破線で囲われているリソースを構築します。
※出来るだけ要点をかいつまんで記載します。

ざっくりまとめ
- プライベートサブネット上へGitea用EC2を作成
- IDE稼働環境(EC2)との通信用にSecurity Groupも穴あけ
- マネージメントコンソールからEC2へSession Managerでログインし、Giteaを導入
- ローカル端末からSession Managerを利用したポートフォワーディングを実行し、GiteaのWebUIへブラウザからアクセス
- ローカル端末へAWS CLIとSSMプラグイン導入が必要
EC2作成
下記リソースを作成します
- IAMロール(Session Manager接続用)
- セキュリティグループ(EC2/VPCエンドポイント用)
- VPCエンドポイント(Session Manager接続用)
- EC2(Gitea稼働用)
- IAMロール作成
- IAMロール1
- 信頼関係:EC2
- IAMポリシー:AmazonSSMManagedInstanceCore
- IAMロール1
- セキュリティグループ作成
- セキュリティグループ1(EC2用)
- VPC:SageMakerUnifiedStudioVPC
- アウトバウンドルール:デフォルト(すべて)
- インバウンドルール1
- タイプ:HTTPS
- プロトコル:TCP
- ポート範囲:443
- ソース:利用するVPCのCIDR
- インバウンドルール2
- タイプ:カスタムTCP
- プロトコル:TCP
- ポート範囲:3000(Gitea用※デフォルトポート番号)
- ソース:利用するVPCのCIDR
- セキュリティグループ2(VPCエンドポイント用)
- VPC:SageMakerUnifiedStudioVPC
- アウトバウンドルール:デフォルト(すべて)
- インバウンドルール
- タイプ:HTTPS
- プロトコル:TCP
- ポート範囲:443
- ソース:利用するVPCのCIDR
- セキュリティグループ1(EC2用)
- VPCエンドポイント作成
- VCPエンドポイント1
- タイプ:AWSのサービス
- サービス:com.amazonaws.<region>.ssm
- VPC:SageMakerUnifiedStudioVPC
- サブネット:SageMakerUnifiedStudioPrivateSubnet1
- セキュリティグループ:セキュリティグループ2
- VCPエンドポイント2
- タイプ:AWSのサービス
- サービス:com.amazonaws.<region>.ssmmessages
- VPC:SageMakerUnifiedStudioVPC
- サブネット:SageMakerUnifiedStudioPrivateSubnet1
- セキュリティグループ:セキュリティグループ2
- VCPエンドポイント1
- EC2作成
- AMI:Amazon Linux 2023 kernel-6.1 AMI(al2023-ami-2023.9.20251020.0-kernel-6.1-x86_64)
※SSMエージェント導入済み - インスタンスタイプ:t3.small
- キーペア名:なし
- セキュリティグループ:既存のセキュリティグループを選択する(セキュリティグループ1)
- VPC:SageMakerUnifiedStudioVPC
- サブネット:SageMakerUnifiedStudioPrivateSubnet1
- ストレージ:20GiB
- IAMインスタンスプロフィール:IAMロール1
- AMI:Amazon Linux 2023 kernel-6.1 AMI(al2023-ami-2023.9.20251020.0-kernel-6.1-x86_64)
Gitea導入
マネージメントコンソールから、EC2へSession Manager経由で接続してGiteaを導入します。
- EC2接続
- Gitea導入
- 下記コマンドを実行してGiteaダウンロード&権限設定
# gitとwgetをインストール(Amazon Linux 2023ではdnfを使用) $ cd ~ $ sudo dnf update -y $ sudo dnf install git wget -y # -r: システムアカウント, -m: ホームディレクトリ作成, -d: ホームディレクトリパス指定 $ sudo useradd -r -m -d /var/lib/gitea -s /bin/bash gitea # ダウンロード $ sudo wget -O gitea https://dl.gitea.com/gitea/main-nightly/gitea-main-nightly-linux-amd64 # 実行可能な場所に移動し、実行権限を付与 $ sudo mv gitea /usr/local/bin/gitea $ sudo chmod +x /usr/local/bin/gitea $ sudo chmod 757 /usr/local/bin # -p: 存在しない親ディレクトリも作成 # {custom, log}: custom と log ディレクトリを /var/lib/gitea の下に作成 $ sudo mkdir -p /var/lib/gitea/{custom,log} # 設定ファイル格納ディレクトリは慣例的に /etc に作成 $ sudo mkdir -p /etc/gitea # Giteaのデータ/ログディレクトリの所有者を gitea ユーザーに変更 $ sudo chown -R gitea:gitea /var/lib/gitea $ sudo chown -R gitea:gitea /etc/gitea # /var/lib/gitea に適切なパーミッションを設定 $ sudo chmod -R 750 /var/lib/gitea - 自動起動設定(systemd)~Giteaサービス起動
# systemdファイル作成 $ sudo vi /etc/systemd/system/gitea.service # 以下を記載 ----------------------------------------------------- [Unit] Description=Gitea (Git with a cup of tea) After=network.target Requires=network.target[Service] # Giteaが実行されるユーザーとグループ Type=simple User=gitea Group=gitea # 実行環境の指定 WorkingDirectory=/var/lib/gitea # 実行コマンドと引数 # Webインストール画面で /etc/gitea/app.ini が作成されます ExecStart=/usr/local/bin/gitea web --config /etc/gitea/app.ini # サービスの再起動設定 Restart=always RestartSec=3 # 標準出力とエラー出力の設定 StandardOutput=journal StandardError=journal # 環境変数の設定 (SQLiteを使用する場合に重要) Environment=USER=gitea HOME=/var/lib/gitea[Install] WantedBy=multi-user.target ----------------------------------------------------- # viは[:wq]で保存して閉じる # systemdに新しいサービスファイルを認識させる $ sudo systemctl daemon-reload # サービスを有効化し、再起動後も自動起動するように設定 $ sudo systemctl enable gitea.service # サービスを起動 $ sudo systemctl start gitea.service # サービス稼働確認 $ sudo systemctl status gitea.service
- 下記コマンドを実行してGiteaダウンロード&権限設定
Giteaアクセス
EC2上にホスティングしているGiteaへアクセスし、Giteaユーザとリポジトリを作成します。
上記作業は、ブラウザからWebUIページへアクセスして実施します。
WebUIページへアクセスするためには、事前作業としてローカル端末でポートフォワーディングの実行が必要となります。

- AWS CLIとSession Manager プラグインの導入
- ポートフォワーディングはAWS CLIからSession Manager プラグインを利用して実行するため
それぞれ下記公式ページなどを参照し、ローカル端末へのインストールを実施してください
- ポートフォワーディングはAWS CLIからSession Manager プラグインを利用して実行するため
- クレデンシャル情報(アクセスキー/シークレットキー)の設定
- AWS CLIへ対象AWSアカウントのクレデンシャル情報を設定します
- ポートフォワーディングの実行
- 下記フォーマットでポートフォワーディングコマンドを実行します
# コマンド雛型 aws ssm start-session --target "<EC2インスタンスID>" --document-name "AWS-StartPortForwardingSession" --parameters '{"portNumber":["<server port>"],"localPortNumber":["<local port>"]}' - ターミナル毎のサンプルは下記です
# <server port>と<local port>は、Giteaのデフォルトポート3000を設定しています # Linux ターミナル/Windows powershell aws ssm start-session --target "<EC2インスタンスID>" --document-name "AWS-StartPortForwardingSession" --parameters '{"portNumber":["3000"],"localPortNumber":["3000"]}' # Windows cmd aws ssm start-session --target "<EC2インスタンスID>" --document-name "AWS-StartPortForwardingSession" --parameters "{\"portNumber\":[\"3000\"],\"localPortNumber\":[\"3000\"]}"
- 下記フォーマットでポートフォワーディングコマンドを実行します
- GiteaのWebUIへアクセス(初回セットアップ)
- 個人用アカウント作成
- Gitリポジトリ作成
- Gitリポジトリアクセス
- 作成したリポジトリのクローンURLを利用可能です
- 前回の記事で作成したAmazon SageMaker Studio Code Editor(VSCode)でクローンする際は、URLの”localhost”部をGiteaが稼働しているEC2のプライベートIPアドレスへ置換してください
※プライベートサブネットの中で通信が可能です
- 前回の記事で作成したAmazon SageMaker Studio Code Editor(VSCode)でクローンする際は、URLの”localhost”部をGiteaが稼働しているEC2のプライベートIPアドレスへ置換してください
- 作成したリポジトリのクローンURLを利用可能です












