GitHub ActionsからECSにコンテナをデプロイする #2  GitHub ActionsとAWSの接続

AWS

初めに

この記事はGitHub ActionsからECSにコンテナをデプロイするの1つ目の記事Github ActionsとAWSの接続する工程を行う記事になります。

上記の赤い枠の部分で、GitHubにPushしGitHub Actionsを利用してAWSに接続を行います。

概要

本記事では以下のようなことについて解説します。

・GitHub ActionsでAWSに接続するための設定
・AWSでGitHub Actionsからの接続を許可する設定

前提条件

以下の準備が行えていることを前提として説明を行います。

・GitHubが利用できる
・AWSが利用できる

それでは始めていきます。

Github ActionsとAWSの接続

サンプルソースの取得

今回はサンプルとしてAngularのを利用しようと思います。Angularで利用する場合は、以下のGitHubから取得をお願いします。

Build software better, together
GitHub is where people build software. More than 150 million people use GitHub to discover, fork, and contribute to over...

特にソースの内容などは理解する必要はありません。内容もng newして作成した、初期のソースです。

GitHub Actionsを実行する

次にGitHub Actionsで利用する設定ファイルを追加していきます。

以下のようなファルダを作成します。

プロジェクトフォルダ/.github/workflows

次にworkflowsフォルダ下に、workflow.ymlを作成します。

workflow.ymlに次のように追加します。

name: test workflow

on: push

jobs:
  build:
    runs-on: ubuntu-latest

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

これで、GitHub Actionsを利用する設定は完了です。ソースコードをPushしてみましょう。

実行後、ブラウザでGitHubを開いてください。以下の「Actions」をクリックし、GitHub Actionsが実行されていることを確認します。

workflow run resultsの中に、コミット時にコメントした、workflowが動いていることを確認します。

これでGitHub Actionsが利用できることが確認できました。

AWSを設定する

次にGitHub ActionsからAWSに接続するためにAWSの設定を行っていきます。

まずどのようにGitHub ActinosとAWSを接続するかというと、OIDC(OpenID Connect)という方法を利用して接続します。OIDCについて内容を細かく知る必要はありません。簡単に言うと一時的に認証情報を取得し、それを用いてアクセスする方法になります。詳細は以下の記事を確認してください。

ERROR: The request could not be satisfied

それでは実際にAWSで設定を行っていきましょう。

IDプロバイダを作成する

まず、AWS IAMにアクセスしアクセス管理→IDプロバイダを開きます

次に「プロバイダを追加」をクリックします。

Add Identity provider画面で以下のように入力し、プロバイダを追加をクリックする。

項目
プロバイダのタイプOpenID Connect
プロバイダのURLhttps://token.actions.githubusercontent.com
対象者sts.amazonaws.com
ロールを追加する

次にロールを作成します。

アクセス管理→ロール→ロールを作成をクリックします。

信頼されたエンティティを選択の画面で次のように、入力する。

項目
信頼されたエンティティタイプカスタム信頼ポリシー
カスタム信頼ポリシー以下のJSON

カスタム信頼ポリシー

以下のようなJSONとなります。Federatedの<AWSアカウントID>と、token.actions.githubusercontent.com:subの<GitHubユーザー名>/<GitHubリポジトリ名>は自身のものに変更お願いします。

{
    "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": {
                "StringLike": {
                    "token.actions.githubusercontent.com:aud": "sts.amazonaws.com",
                    "token.actions.githubusercontent.com:sub": "repo:<GitHubユーザー名>/<GitHubリポジトリ名>:*"
                }
            }
        }
    ]
}

入力が完了したら次へをクリック

許可を追加画面では、今回は特に許可を追加せず次へを押してください。

次に、「名前、確認、および作成」画面でロールに名前を付けます。今回私は「sample-ECR-deploy-role」と名前を付けましたが、任意の名前でOKです!

入力が完了次第ロールを作成ボタンをクリックし完了する。

これでAWS側の設定を完了です!

GitHub ActionsとAWSを接続する

再度GitHub Actionsに戻りAWSとの接続を確認します。

プロジェクトフォルダ/.github/workflows/workflow.ymlを以下のように書き換えます。

name: test workflow

on: push

jobs:
  build:
    runs-on: ubuntu-latest

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

      - uses: aws-actions/configure-aws-credentials@v4
        with:
          aws-region: '<リージョン>' 
          role-to-assume: 'arn:aws:iam::<AWSアカウントID>:role/<ロール名>' 

そのまま実行し、以下のようにbuildが成功すればAWSとの接続は完了です!

最後に

以上今回はGitHub ActionsとAWSとの接続を行いました。次回は#3として、Github ActionsからECSへのPushを行っていきます!

以下から次の記事を読んでみてください!

プロフィール

SIer勤めのエンジニア
アプリケーションエンジニアとして、WebやiOSなどのアプリ開発をメインにしてます

tomaをフォローする
AWSCI/CDGitHub Actions