4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【CI/CD】GitHub Actionsを使ってAWS S3へ静的ウェブサイトをデプロイしてみる

Last updated at Posted at 2023-05-24

概要

GitHub Actionsの学習のためにテストしてみました。

やりたいこととしてはシンプルで

GitHubで管理しているhtmlファイルに変更を加える

 → その変更内容がAWS S3上のhtmlファイルに反映される

です。

それを実現するために必要なサービスは

  • GitHub
  • GitHub Actions ※以下GHAと記載
  • AWS S3
  • OpenID Connect ※以下OIDCと記載
    になります。

構成と運用フロー

運用フローとしては以下となります。

  1. ユーザーがGitHub上のhtmlに変更を加え、その内容をマージ
  2. マージをトリガーとしてGHAが起動
  3. GHAがOIDC経由でAWS認証し、S3へのアクセス権限を持ったRoleを取得
  4. GHAがS3へアクセスし、マージされたhtmlをデプロイ
    構成図.png

構築

※本記事内で作成したウェブサイト、GitHubリポジトリ等は全て削除済のため
 現在はアクセス不可となっています

S3にhtmlを配置

test-gha-2023-s3というバケットを作成し、index.htmlを配置します。
01.png
静的ウェブサイトとして表示されればOKなので、index.htmlは簡素な内容でいきます。

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
</head>
 
<body>
     Hello World! 
</body>
</html>

S3バケットのパブリックアクセスもろもろを設定し、ウェブサイトとして表示されました。
01-2.png

GitHubにhtmlを配置

test-gha-2023というリポジトリのmainブランチに同じindex.htmlを配置します。
02.png

OIDCの設定

AWSのIAMでGitHub向けのIDプロバイダを設定します。
03.png
04.png

ロールの設定

作成したIDプロバイダを使用して、GHAに付与するロールを作成します。
05.png

カスタム信頼ポリシーの内容はこちらです。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid: "",
            "Effect": "Allow",
            "Principal": {
                "Federated": "arn:aws:iam::{AWSアカウントID}:oidc-provider/token.actions.githubusercontent.com"
            },
            "Action": "sts:AssumeRoleWithWebIdentity",
            "Condition": {
                "StringEquals": {
                    "token.actions.githubusercontent.com:aud": "sts.amazonaws.com"
                    "token.actions.githubusercontent.com:sub": "repo:{GitHubのowner}/test-gha-2023:ref:refs/heads/main"
                }
            }
        }
    ]
}

許可ポリシーは絞るのめんどいのでAdministratorAccessにしました(テストだし)。
当然ながら、実際には必要な権限のみに絞るべきです。
06.png

ロール作成完了。
07.png

GHAを設定

GHAで使用するymlを配置します。
test-gha-2023リポジトリのmainブランチにあるActionsタブを開き
set up a workflow yourselfをクリックします。
08.png

エディタ画面に遷移するのでDeployToS3.ymlを作成します。
(テストなので直コミットしています)
09.png

DeployToS3.ymlの中身はこちらです。

name: DeployToS3

on:
  push:
    branches:
      - main

jobs:
  deploy:
    runs-on: ubuntu-latest
    permissions:
      id-token: write
      contents: read

    steps:
    - name: Checkout repository
      uses: actions/checkout@v3

    - name: AWS set Credentials
      uses: aws-actions/configure-aws-credentials@v1
      with:
        aws-region: 'ap-northeast-1'
        role-to-assume: 'arn:aws:iam::{AWSアカウントID}:role/test-gha-2023-role'

    - name: Build and Deploy to S3
      run: aws s3 cp index.html s3://test-gha-2023-s3 --region ap-northeast-1

DeployToS3.ymlが作成され、これで全ての準備は整いました。
10.png

テスト

test-gha-2023リポジトリのmainブランチ上でindex.htmlに変更を加えます。
変更内容はこれまたシンプルに、青文字にして文字サイズを大きくしただけです。
(そして懲りずに直コミット。あくまでもテストなので)
11.png

すると変更がコミットされたことをトリガーに、GHA(作成したDeployToS3.yml)が動き始めました。
12.png

そしてOIDCによるAWS認証等もろもろが動き、S3へのデプロイまでステータスが全て完了となっています。
13.png

ウェブサイトを確認すると・・・変更した内容がちゃんと反映されていますね。
Done!
14.png

CI/CDツールは今となってはかなりの数が存在しますが、今回はその中でGitHub Actionsのご紹介でした。
GHAは無料で2000分/月が使用可能なので、まだ使ったことない方は是非検討してみてはいかがでしょうか。

4
1
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
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?