概要
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のダッシュボードよりインスタンスを選択、「インスタンスの起動」をクリック
名前を入力(任意)、マシンイメージはAmazonLinuxを選択する
インスタンスタイプは「t2,micro」を選択、キーペアは前回記事で作成したものを指定する
ネットワーク設定の「編集」をクリック
VPC、サブネットは作成したものを選択、パブリックIPの自動割り当ては「有効化」、「既存のセキュリティグループを選択する」にチェックを入れて、作成したセキュリティグループを選択する
必要であればストレージ容量を変更後、「インスタンスを起動」をクリックして完了
作成したインスタンスのページに表示されているパブリックIPとキーペアに指定した秘密鍵を使用してSSH接続をテストする
@の前のどフォルトユーザーはAmazonLinuxの場合はec2-user(CentOS7の場合はcentos)
$ ssh -i "AmazonLinux-001.pem" ec2-user@xxx.xxx.xxx.xx
ログイン出来れば接続テストOK
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のダッシュボードよりアカウントを選択、「ユーザーを追加」をクリック
ユーザー名(任意)を入力、「アクセスキー・プログラムによるアクセス」にチェック
「既存のポリシーを直接アタッチ」を選択、「AdministratorAccess」にチェック
必要ならタグを入力して、「ユーザーの作成」をクリック
アクセスキーとシークレットアクセスキーは控えておく
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」をクリック
名前(任意)を入力し、作成したキー(id_rsa.pub)の中身をコピーしてGitHubに登録する
6. リモートリポジトリのシークレットの登録
GitHubのリモートリポジトリのページのsettingsを選択、secretのactionsを選択する、「New Repository secret」をクリック
「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のシークレットアクセスキー
を登録する
7. workflowファイル(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 が実行される