2
2

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.

GitHub ActionsAdvent Calendar 2021

Day 13

AWS S3+GitHub Actions+IP制限でwebサイトをホスティングする

Last updated at Posted at 2021-10-31

前置き

  • AWS S3の静的ホスティングの設定〜GitHub Actionでデプロイが走るとS3にアップロードしてくれるパイプライン構築までの手順を自分用にまとめました。
  • IP制限もかけられるようにしました。

AWS側の設定

S3の設定

  1. https://s3.console.aws.amazon.com/s3/home?region=ap-northeast-1へアクセスし、バケットを作成をクリックする。
    スクリーンショット 2021-10-31 19.18.28.png

  2. 任意のバケット名を入力し、リージョンを選択(ap-northeast-1)し、パブリックアクセスを全てブロックのチェックを外す
    スクリーンショット 2021-10-31 19.08.30.png

  3. 最下部の「バケットを作成」ボタンをクリックする。

  4. 作成したバケットをクリックして、詳細画面にいく。
    スクリーンショット 2021-10-31 19.18.57.png

  5. 最下部にある「静的webホスティング」の編集をクリックする。
    スクリーンショット 2021-10-31 19.18.42.png

  6. 画像のように、静的ウェブホスティングを有効にする。(インデックスドキュメントはindex.htmlで良い)
    スクリーンショット 2021-10-31 19.14.23.png

  7. 詳細画面に戻り、「アクセス許可」タブのバケットポリシーを編集する。

    • JSONの記述が難しい場合は、「Generate Policy」で作成すると良い。
    • 以下では特定のIPアドレスからのアクセスのみ許可するポリシーを設定。
    • CIDR表記がわからない場合は、ネットワーク計算ツールで確認すると良い。
{
    "Version": "2012-10-17",
    "Id": "{任意のIDを記述する}",
    "Statement": [
        {
            "Sid": "{任意のIDを記述する}",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::{先ほど作成したバケット名を記述する}/*",
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": "{自分のIPアドレスをCIDR形式で記述する}"
                }
            }
        }
    ]
}
  • これでS3の設定は全て完了です。

IAMの設定

  1. https://console.aws.amazon.com/iamv2/home#/usersにアクセスし、GitHubと連携するためのCLIのIAMユーザーアカウントを作成する

スクリーンショット 2021-10-31 19.55.12.png

  1. 「アクセスキー - プログラムによるアクセス」にのみチェックを入れる
    スクリーンショット 2021-10-31 19.55.31.png

  2. ポリシーは「AmazonS3FullAccess 」を選択する。

  3. 認証情報をcsvダウンロードする。(GitHub Actionで使用するのでちゃんとメモっておく

  4. これでIAMの設定は全て完了です。

GitHub Actionの設定

  1. GitHub上でリポジトリを作成する。

  2. SettingタブのSecretsをクリックから、「New Repository Secret」をクリックし以下の3つを登録する。

    Name
    AWS_ACCESS_KEY_ID 先ほど控えておいたAccess key IDを入力する
    AWS_SECRET_ACCESS_KEY 先ほど控えておいたSecret access keyを入力する
    S3_BUCKET 先ほどの手順で作成したバケット名を入力する

    スクリーンショット 2021-10-31 19.48.35.png

  3. Actionsタブへ行き、「set up a workflow yourself」をクリックし、「Edit new file」をクリックする。

  4. yamlは以下を入力し、「Start commit」をクリックしてから、「Commit new file」をクリックする。

name: Amazon S3 Upload

on:
  push:
    branches:
      - master

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout
        uses: actions/checkout@v2

      - name: Configure AWS credentials
        uses: aws-actions/configure-aws-credentials@v1
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws-region: ap-northeast-1

      - name: Upload to S3
        env: 
          S3_UPLOAD_BUCKET: ${{ secrets.S3_BUCKET }}
        run: |
          aws s3 sync . s3://$S3_UPLOAD_BUCKET/ --delete --exclude "README.md" --exclude ".git/*" --exclude ".github/*" --exclude ".gitignore"
  • s3 sync時に静的ファイルだけS3にアップロードしたい場合は、以下のようにdist/のみを指定してください。
    • dist/ は、$ npm run buildでビルドした際に生成されるフォルダです。
      - name: Upload to S3
        env: 
          S3_UPLOAD_BUCKET: ${{ secrets.S3_BUCKET }}
        run: |
          aws s3 sync dist/ s3://$S3_UPLOAD_BUCKET/ --delete --exclude "README.md" --exclude ".git/*" --exclude ".github/*" --exclude ".gitignore"

  • これでGitHub Actionの設定は完了です。

パイプラインが走る

  • エディタ(vscode)からGitHubへプッシュすると、GitHub Actionがキックされ、パイプラインが回ります。
    スクリーンショット 2021-10-31 20.22.38.png
    スクリーンショット 2021-10-31 20.23.17.png

最後に

2
2
1

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
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?