概要
GitHub Actionsの学習のためにテストしてみました。
やりたいこととしてはシンプルで
GitHubで管理しているhtmlファイルに変更を加える
→ その変更内容がAWS S3上のhtmlファイルに反映される
です。
それを実現するために必要なサービスは
- GitHub
- GitHub Actions ※以下GHAと記載
- AWS S3
- OpenID Connect ※以下OIDCと記載
になります。
構成と運用フロー
運用フローとしては以下となります。
- ユーザーがGitHub上のhtmlに変更を加え、その内容をマージ
- マージをトリガーとしてGHAが起動
- GHAがOIDC経由でAWS認証し、S3へのアクセス権限を持ったRoleを取得
- GHAがS3へアクセスし、マージされたhtmlをデプロイ
構築
※本記事内で作成したウェブサイト、GitHubリポジトリ等は全て削除済のため
現在はアクセス不可となっています
S3にhtmlを配置
test-gha-2023-s3
というバケットを作成し、index.html
を配置します。
静的ウェブサイトとして表示されればOKなので、index.html
は簡素な内容でいきます。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
Hello World!
</body>
</html>
S3バケットのパブリックアクセスもろもろを設定し、ウェブサイトとして表示されました。
GitHubにhtmlを配置
test-gha-2023
というリポジトリのmainブランチに同じindex.html
を配置します。
OIDCの設定
AWSのIAMでGitHub向けのIDプロバイダを設定します。
ロールの設定
作成したIDプロバイダを使用して、GHAに付与するロールを作成します。
カスタム信頼ポリシー
の内容はこちらです。
{
"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
にしました(テストだし)。
当然ながら、実際には必要な権限のみに絞るべきです。
GHAを設定
GHAで使用するymlを配置します。
test-gha-2023
リポジトリのmainブランチにあるActions
タブを開き
set up a workflow yourself
をクリックします。
エディタ画面に遷移するのでDeployToS3.yml
を作成します。
(テストなので直コミットしています)
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
が作成され、これで全ての準備は整いました。
テスト
test-gha-2023
リポジトリのmainブランチ上でindex.html
に変更を加えます。
変更内容はこれまたシンプルに、青文字にして文字サイズを大きくしただけです。
(そして懲りずに直コミット。あくまでもテストなので)
すると変更がコミットされたことをトリガーに、GHA(作成したDeployToS3.yml
)が動き始めました。
そしてOIDCによるAWS認証等もろもろが動き、S3へのデプロイまでステータスが全て完了となっています。
ウェブサイトを確認すると・・・変更した内容がちゃんと反映されていますね。
Done!
CI/CDツールは今となってはかなりの数が存在しますが、今回はその中でGitHub Actionsのご紹介でした。
GHAは無料で2000分/月が使用可能なので、まだ使ったことない方は是非検討してみてはいかがでしょうか。