GitHub Actionsを活用したAWS(EC2)自動デプロイ

## はじめに

この記事では、Ubuntu 22.04.3 LTS環境でGitHubリポジトリへのSSH接続の設定と、GitHub Actionsを使用したEC2サーバー上のプロジェクトの自動デプロイについて解説します。このプロセスは、開発者が継続的インテグレーション（CI）や継続的デプロイメント（CD）を実現するのに役立ちます。

---

こちらの記事もおすすめ

https://hamaruki.com/gitlab-a-simple-guide-to-using-docker-compose/

https://hamaruki.com/how-to-create-luminous-object-animations-with-blender-4-0-even-for-beginners/


## Ubuntu環境の確認

まず、使用しているUbuntuのバージョンを確認します。以下のコマンドを実行してください：

```bash

cat /etc/os-release
---
ubuntu@ip-172-31-45-101:~$ cat /etc/os-release 
PRETTY_NAME="Ubuntu 22.04.3 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04.3 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy
```



このコマンドは、Ubuntuのバージョンやその他のシステム情報を表示します。

## Gitのインストールと確認

次に、Gitがインストールされていることを確認します。以下のコマンドでGitのバージョンを確認できます：

```bash

git --version
```



もしGitがインストールされていない場合は、以下のコマンドでインストールします：

```bash

sudo apt update
sudo apt install git
```


## SSHキーの生成

GitHubにSSHで接続するためには、SSHキーを生成する必要があります。以下の手順でキーを生成します：

```bash

ssh-keygen -t rsa
---
Generating public/private rsa key pair.
Enter file in which to save the key (/home/ubuntu/.ssh/id_rsa): github_key
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
```



キーの名前とパスフレーズを求められたら、適切なものを入力します。ここでは、例として`github_key`という名前を使用します。
## SSH設定の追加

生成したSSHキーを使ってGitHubへの接続を設定します。`.ssh/config`ファイルを編集し、以下の内容を追加します：

```config

Host github
    HostName github.com
    IdentityFile ~/.ssh/github_key
    User git
```


## GitHubへのSSHキーの追加

生成した公開キー（`github_key.pub`）をGitHubアカウントに追加します。これはGitHubのユーザー設定ページで行えます。

![](https://hamaruki.com/wp-content/uploads/2023/12/image-1701822078190-1024x646.png)

## SSH接続のテスト

GitHubへのSSH接続が正しく設定されたかを確認します：

```bash

ssh -T github
```



成功すれば、GitHubからの認証成功メッセージが表示されます。

## GitHub Actionsの設定

GitHubリポジトリにGitHub Actionsのワークフローを設定します。以下のワークフロー定義を`.github/workflows/deploy.yml`としてリポジトリに追加します：

```yaml

name: ClimbCraft_EC2 auto deploy
on:
  push:
    branches: [ "main" ]
  workflow_dispatch:
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
     - name: Deploy
       run: |
         echo "${{ secrets.PRIVATE_KEY }}" > private_key
         chmod 600 private_key
         ssh -oStrictHostKeyChecking=no ${{ secrets.USER_NAME }}@${{ secrets.HOST_NAME }} -i private_key "cd ~/prj/ClimbCraft && git fetch github:Sunwood-ai-labs/ClimbCraft.git && git pull github:Sunwood-ai-labs/ClimbCraft.git"
```



このワークフローは、`main`ブランチへのプッシュ時、または手動でワークフローを実行したときに、指定されたEC2サーバーにSSHで接続し、リポジトリの最新の変更をプルします。

## GitHub Secretsの設定

GitHubリポジトリのSettingsタブからSecretsを設定します。`PRIVATE_KEY`、`USER_NAME`、`HOST_NAME`に適切な値を設定します。

![file](https://hamaruki.com/wp-content/uploads/2023/12/image-1701822469642.png)

これで、Ubuntu 22.04.3 LTS環境でのGitHubリポジトリへのSSH接続の設定とGitHub Actionsを使用したEC2サーバー上の自動デプロイの設定が完了しました。これにより、開発プロセスがより効率的かつ安全になります。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">Github action 連携完了<br>これでローカル&#x1f449;Github&#x1f449;AWSのフローが完成 <a href="https://t.co/w3Jcd0uqF1">pic.twitter.com/w3Jcd0uqF1</a></p>&mdash; Maki@Sunwood AI Labs. (@hAru_mAki_ch) <a href="https://twitter.com/hAru_mAki_ch/status/1732190826867093513?ref_src=twsrc%5Etfw">December 6, 2023</a></blockquote>


## 参考URL

https://qiita.com/Kintech/items/6c5bde142b25293cd6d2

https://qiita.com/shizuma/items/2b2f873a0034839e47ce

https://qiita.com/shuncask/items/db41ec7cc4d4f23b1a28


 <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>