📐

GitHub Actionsを使ってECS(Fargate)にCI/CDパイプラインを構築する

2025/01/14に公開

1. AWSアカウント & IAMの設定

AWSアカウント作成

最低限デプロイが可能なIAMユーザーやロールが必要なので、以下を参考に作成する。
https://dev.classmethod.jp/articles/githubactions-ecs-fargate-cicd-beginner/
以下2つのポリシーをアタッチする。

  • ECR用:AmazonEC2ContainerRegistryFullAccess
    (※ 上記サイトではAmazonEC2ContainerRegistryPowerUserであるが、aws ecr create-repositoryするためにはFullAccessでなければならない。)
  • ECS用:AmazonECS_FullAccess

Githubでリポジトリの作成

Githubでリポジトリを作成(github-action-initとしてみた)

GitHub Secretsに登録

GitHub Actionsで利用するIAMユーザのアクセスキーIDとシークレットアクセスキーを設定する。
Settings > Secrets and variables > Actionsを選択。
New repository secretから以下2つのシークレットを、先ほど作成したIAMユーザにてアクセスキーを発行し、登録する

  • AWS_ACCESS_KEY_ID
  • AWS_SECRET_ACCESS_KEY

2. ECR及びECSのセットアップ

ECRリポジトリの作成

GitHub ActionsでビルドしたイメージをPushする先として、ECRリポジトリが必要。
AWSコンソール or CLIで githubactions-httpd 等の名前でリポジトリを作成。
リポジトリ名はワークフロー内の ECR_REPOSITORY と合わせる必要がある。

aws ecr create-repository \
  --repository-name githubactions-httpd \
  --region ap-northeast-1

Amazon ECS タスク定義、クラスター、サービスを作成

以下を参考にFargateのECSタスクを作成する。
https://docs.aws.amazon.com/AmazonECS/latest/developerguide/getting-started-fargate.html

  • Public IPを設定
  • セキュリティグループのインバウンド設定に80と433を穴あけ

ECS Fargate タスク定義に実行ロールの作成

ECS Fargate タスク定義に実行ロール(Execution Role)を設定する。実行ロールを設定しておかないと以下のようなエラーが出る。

Error: Failed to register task definition in ECS: Fargate requires task definition to have execution role ARN to support ECR images.
Error: Fargate requires task definition to have execution role ARN to support ECR images.
  1. AWS マネジメントコンソールにログイン
    • AWS マネジメントコンソールにログインします。
  2. IAM サービスに移動
    • 上部の検索バーに「IAM」と入力し、IAM サービスを選択します。
  3. ロールの作成
    • 左側のメニューから「ロール」を選択し、「ロールの作成」をクリックします。
  4. ユースケースの選択
    • 「ユースケースの選択」画面で「Elastic Container Service」を選びます。
    • 「Elastic Container Service タスク」を選択し、「次のステップ: 権限」をクリックします。
  5. 権限ポリシーのアタッチ
    • AmazonECSTaskExecutionRolePolicy を選択します。
      • このポリシーには、ECR からのイメージプルや CloudWatch Logs へのログ送信に必要な権限が含まれています。
  6. ロールの名前付け
    • 「ロール名」に「ecsTaskExecutionRole」などわかりやすい名前を入力します。
    • 必要に応じてタグを追加し、「ロールの作成」をクリックして作成を完了します。

上記を実行し、実行ロールを作成したうえで、task定義に以下を追加しておく。

"executionRoleArn":"arn:aws:iam::xxxxxxxxxxxxx:role/ecsTaskExecutionRole",

3. GitHub Actions の準備

GitHub Actions yamlファイルの作成

https://docs.github.com/ja/actions/use-cases-and-examples/deploying/deploying-to-amazon-elastic-container-service#creating-the-workflow
こちらを参考に、タスク定義やクラスタ、サービス名を先ほど設定したもので
.github/workflows/aws.ymlで作成する。

main ブランチに push

git push origin main
をすると、github actionが実行される

次やること

正直なところロール周りがちゃんと理解できていなかったので勉強がてらまとめてみようと思う。


参考

https://qiita.com/mkin/items/75a4928a1fafe5eacd17

Discussion