LoginSignup
8
11

More than 1 year has passed since last update.

GitHub ActionでAWS EC2にデプロイを実行する(Amazon Linux)

Posted at

概要

AWS EC2でAmazon linuxの仮想サーバーを作成
GitHubActionsを使って作成したAmazon linuxの仮想サーバーへデプロイを実行する

前回

参考にした記事
[初心者向け]VPC作成からEC2インスタンス起動までを構成図見ながらやってみる(その1)
[初心者向け]VPC作成からEC2インスタンス起動までを構成図見ながらやってみる(その2)

前提

AWSのアカウント作成済み
GitHubのアカウント作成済み

目次

1. インスタンスを作成する
2. node.jsのインストール
3. gitのインストール
4. AWSCLIの初期設定
5. GitHubとAWSCS2のSSH接続の設定
6. リモートリポジトリのシークレットの登録

1. インスタンスを作成する

EC2のダッシュボードよりインスタンスを選択、「インスタンスの起動」をクリック

20221027-001.jpg

名前を入力(任意)、マシンイメージはAmazonLinuxを選択する

20221027-002.jpg

インスタンスタイプは「t2,micro」を選択、キーペアは前回記事で作成したものを指定する

20221027-003.jpg

ネットワーク設定の「編集」をクリック
VPC、サブネットは作成したものを選択、パブリックIPの自動割り当ては「有効化」、「既存のセキュリティグループを選択する」にチェックを入れて、作成したセキュリティグループを選択する

20221027-004.jpg

20221027-005.jpg

必要であればストレージ容量を変更後、「インスタンスを起動」をクリックして完了

20221027-006.jpg

作成したインスタンスのページに表示されているパブリックIPとキーペアに指定した秘密鍵を使用してSSH接続をテストする
@の前のどフォルトユーザーはAmazonLinuxの場合はec2-user(CentOS7の場合はcentos)

20221027-007.jpg

$ ssh -i "AmazonLinux-001.pem" ec2-user@xxx.xxx.xxx.xx

ログイン出来れば接続テストOK

20221027-008.jpg

2. node.jsのインストール

AmazonLinuxにnode.jsをインストールする

$ curl -sL https://rpm.nodesource.com/setup_14.x | sudo bash -
$ sudo yum -y install nodejs

「node -v」でバージョンが確認できればOK

$ node -v
v14.20.1

3. gitのインストール

AmazonLinuxにgitをインストールする
参考

依存関係のあるライブラリをインストール

$ sudo yum -y install gcc curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-ExtUtils-MakeMaker autoconf```

gitをインストール

$ npm install git

「git -v」でバージョンが確認できればOK

$ git -v
git version 2.37.1

4. AWSCLIの初期設定

IAMのダッシュボードよりアカウントを選択、「ユーザーを追加」をクリック

20221031-001.jpg

ユーザー名(任意)を入力、「アクセスキー・プログラムによるアクセス」にチェック

20221031-002.jpg

「既存のポリシーを直接アタッチ」を選択、「AdministratorAccess」にチェック

20221031-003.jpg

必要ならタグを入力して、「ユーザーの作成」をクリック

20221031-004.jpg

アクセスキーとシークレットアクセスキーは控えておく

20221031-005.jpg

awscliの設定を行う
AWSにSSH接続し下記コマンドを実行する

$ aws configure --profile 管理したいプロファイル名
AWS Access Key ID [None]: アクセスキー
AWS Secret Access Key [None]: シークレットアクセスキー
Default region name [None]: ap-northeast-3
Default output format [None]: json

5. GitHubとAWSCS2のSSH接続の設定

参考

AWSにSSH接続し下記コマンドを実行する
鍵を入れるフォルダに移動

$ cd ~/.ssh

鍵を生成

$ ssh-keygen -t rsa

GitHubの「SSH and GPG keys」のページを開いて、「New SSH key」をクリック

20221031-006.jpg

名前(任意)を入力し、作成したキー(id_rsa.pub)の中身をコピーしてGitHubに登録する

20221031-007.jpg

6. リモートリポジトリのシークレットの登録

GitHubのリモートリポジトリのページのsettingsを選択、secretのactionsを選択する、「New Repository secret」をクリック

20221031-008.jpg

20221031-009.jpg

「Name」「Secret」にそれぞれ
EC2_USER_NAME → EC2のユーザー情報
EC2_HOST_NAME → EC2のホスト情報
EC2_SECURITY_GROUP_ID → EC2のセキュリティグループID
GIT_PRIVATE_KEY → EC2でkeygenしたgithub用の秘密鍵
AWS_ACCESS_KEY → AWS CLIのアクセスキー
AWS_SECRET_ACCESS_KEY → AWS CLIのシークレットアクセスキー

を登録する

20221031-010.jpg

7. workflowファイル(ymlファイル)を作成する

ワークフローファイルを作成する

AmazonLinux001.yml
# ワークフロー名(任意)
name: AmazonLinux001

# トリガーとなる GitHub イベント
on:
  # workflow_dispatchを指定しておくとGitHubのコンソールから実行可能になる
  workflow_dispatch:

# ワークフローの実行処理
jobs:
  # ジョブ名(任意)
  build:
    # ジョブが実行されるランナー(仮想デバイス)の種類
    runs-on: ubuntu-latest
    # タイムアウトの時間を設定しておく
    timeout-minutes: 10

    # ジョブのステップ
    steps:
     # IP取得ライブラリをインストール
     - name: Public IP Install
       id: ip
       uses: haythem/public-ip@v1.2

     # BranchをCheckout
     - name: Checkout
       uses: actions/checkout@v2

     # AWS CLIをインストールする
     - name: AWS CLI install
       run: |
         curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
         unzip awscliv2.zip
         sudo ./aws/install --update
         aws --version

     # AWS CLIにキーを設定をする
     - name: AWS set Credentials
       uses: aws-actions/configure-aws-credentials@v1
       with:
         aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY }}
         aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
         aws-region: ap-northeast-3

     # デプロイする
     - name: Deploy
       run: |

         # SSHのセキュリティグループを開放する
         aws ec2 authorize-security-group-ingress --group-id ${{ secrets.EC2_SECURITY_GROUP_ID }} --protocol tcp --port 22 --cidr ${{ steps.ip.outputs.ipv4 }}/32

         # SSH接続して、git pullする
         echo "${{ secrets.GIT_PRIVATE_KEY }}" > private_key
         chmod 600 private_key
         ssh -oStrictHostKeyChecking=no ${{ secrets.EC2_USER_NAME }}@${{ secrets.EC2_HOST_NAME }} -i private_key "cd React && git pull origin main"
         # 処理を実行
         
         # SSHのセキュリティグループを閉じる
         aws ec2 revoke-security-group-ingress --group-id ${{ secrets.EC2_SECURITY_GROUP_ID }} --protocol tcp --port 22 --cidr ${{ steps.ip.outputs.ipv4 }}/32

上記ymlファイルではコンソールからの手動実行で、AWSサーバーのReactフォルダでgit pull が実行される

8
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
11