📐
GitHub Actionsを使ってECS(Fargate)にCI/CDパイプラインを構築する
1. AWSアカウント & IAMの設定
AWSアカウント作成
最低限デプロイが可能なIAMユーザーやロールが必要なので、以下を参考に作成する。
以下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タスクを作成する。
- 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.
- AWS マネジメントコンソールにログイン
- AWS マネジメントコンソールにログインします。
- IAM サービスに移動
- 上部の検索バーに「IAM」と入力し、IAM サービスを選択します。
- ロールの作成
- 左側のメニューから「ロール」を選択し、「ロールの作成」をクリックします。
- ユースケースの選択
- 「ユースケースの選択」画面で「Elastic Container Service」を選びます。
- 「Elastic Container Service タスク」を選択し、「次のステップ: 権限」をクリックします。
- 権限ポリシーのアタッチ
- AmazonECSTaskExecutionRolePolicy を選択します。
- このポリシーには、ECR からのイメージプルや CloudWatch Logs へのログ送信に必要な権限が含まれています。
- AmazonECSTaskExecutionRolePolicy を選択します。
- ロールの名前付け
- 「ロール名」に「ecsTaskExecutionRole」などわかりやすい名前を入力します。
- 必要に応じてタグを追加し、「ロールの作成」をクリックして作成を完了します。
上記を実行し、実行ロールを作成したうえで、task定義に以下を追加しておく。
"executionRoleArn":"arn:aws:iam::xxxxxxxxxxxxx:role/ecsTaskExecutionRole",
3. GitHub Actions の準備
GitHub Actions yamlファイルの作成
.github/workflows/aws.yml
で作成する。
main ブランチに push
git push origin main
をすると、github actionが実行される
次やること
正直なところロール周りがちゃんと理解できていなかったので勉強がてらまとめてみようと思う。
参考
Discussion