60
63

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 ActionsでAWS S3に自動でデプロイする(静的ファイルのディレクトリを丸ごとアップロードする)

Last updated at Posted at 2020-06-17

例えばこんなときに便利

  • Web開発で画像などをassetsstaticといった名前のディレクトリにまとめている
  • それらのファイルはS3でホスティングする

※S3のバケットを公開設定にして画像等をホスティングする想定ですが、もちろん公開設定にしないことも可能です。

Step.1 静的ファイルを1つのディレクトリにまとめる

  • ホスティングするディレクトリstatic-filesを作成
  • サンプル画像yakiniku.jpgを作成
  • 例外的にアップロードしないサンプルファイルREADME.mdを作成(任意)
  • GitHub Actionsのワークフローを書くworkflow.ymlを作成
tree.txt
your-project-dir
├── .github
│   └── workflows
│       └── workflow.yml
└── static-files
    ├── README.md
    └── yakiniku.jpg

Step.2 事前準備

  • GitHub Actions用のIAMユーザーを作成
  • GitHubのSecretsに上記IAMユーザーのシークレットを登録
  • S3のバケットをprojectname-static-filesという名前で作成(ホスティングする場合は公開設定にする)

Step.3 GitHub Actionsのワークフローを書く

はじめに全体像を載せます。

.github/workflows/workflow.yml
name: s3-deploy-sample
on:
  pull_request:
    branches:
      - master
    types: [opened, synchronize, closed] #他のjobがある想定でこの設定にしている

jobs:
  UploadStaticFiles:
    name: Upload static files
    if: github.event.pull_request.merged == true #マージされたときのみこのjobを実行する
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: aws-actions/configure-aws-credentials@v1
        with:
          aws-access-key-id: ${{ secrets.AWS_DEV_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_DEV_SECRET_ACCESS_KEY }}
          aws-region: ap-northeast-1
      - name: S3 sync
        working-directory: static-files
        run: aws s3 sync . s3://projectname-static-files --delete --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsers --exclude "README.md"

  AnotherJob:
    # 以下省略

ポイント

実際にS3へアップロードしているの部分は以下です。

.github/workflows/workflow.yml
      - name: S3 sync
        working-directory: static-files
        run: aws s3 sync . s3://projectname-static-files --delete --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsers --exclude "README.md"

working-directoryでカレントディレクトリをstatic-filesにした上で、

aws s3 syncを使用してカレントディレクトリとバケットを同期させています。

※他のいくつかの記事(Google検索結果)ではaws s3 cpを用いていますが、cpではファイルの追加はされますが、削除を行うことができません。

オプションの解説

  • --deleteは、バケットには存在するがディレクトリにはないファイルがあった場合に、バケットのファイルを削除する
  • --grants {}は、ファイルのアクセス権限を設定する
    • バケットの公開設定を変更しただけではファイルは公開されない。ファイルごとにアクセス権限を設定する必要がある
    • read=uri=http://acs.amazonaws.com/groups/global/AllUsersPublic Readにする定義済みURI(公式ドキュメントの「Amazon S3 の定義済みグループ」を参照)
  • --exclude {}は、例外的にアップロードしないファイルを指定する

サンプルはこちら

類似の公開Action

AWSのクレデンシャルの設定とs3 syncをまとめて行うアクションが既に存在します。やってることはおそらくほぼ同じです。

60
63
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
60
63

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?