ハンズラボエンジニアブログAWSの話題を中心に、日々の業務やプログラミングの徒然を綴るエンジニアブログです。清水幸佑Pocketこんにちは、ハンズラボの清水です。東急ハンズのECサイトを担当しています。今回は前回の続き、GitHubのリポジトリにpushしたらECRへpushを行うGitHubActionsを紹介します。前回の記事はこちらバッチ処理をECSに移行した話(GitHubActionsもあるよ)その1前回の記事の追記(Fargateになりました)前回の記事のクラスターを作成にEC2を利用しましたが、その後、NATGatewayにElasticIPをつけることでFargateで出て行くIPアドレスを固定することができたのでFargateになりました。楽天など)のAPIを利用する際、IPアドレスの制限があるのでIPを固定しています。GitHubActionsを作成するここから本題!GitHubのリポジトリにpushしたらECRへpushを行うGitHubActionsを作成していきます。buildを行うdockerにタグをつけるAWSのアカウントにログインECRにpushするGitHubのリポジトリから作成します。作成を行うとプロジェクト内に.github/main.workflowというファイルが作成されます。GitHubActionsのGUIで作成も出来ますし、main.workflowを編集して作成もできます。個人的にはGUIで大まかな流れを作成して、main.workflowを編集するやり方が個人的には作成しやすいです。Branch(prod)の後に実行}がっつりmain.workflowを書くことはありませんが、GUIである程度作成してしまえばいいので編集するのはenvやargsくらいです。ブランチをフィルタリングするpushされたブランチがmasterの時のみ下に処理を流します。GitHubActionsでは条件分岐ができないのでFillterを使用しています。build、ECRへのログイン、slackへの通知を並列で実行します。STAGE=$STAGEのコマンドを実行しています。build同様にawsのコマンドを実行しています。secretsにAWS_ACCESS_KEY_IDとAWS_SECRET_ACCESS_KEYをセットすることでECRにログインできます。secretsの登録は割と簡単です。"push開始(prod)"}slack通知はsecretsにwebhookのURLをセットしてargsにチャンネルに通知するメッセージを設定します。<アカウントID>.dkr.ecr.ap-northeast-1.amazonaws.com/hogehoge:latest行なっていることは上記のコマンドと同じですコマンドではバージョンをlatestとしていますが、GitHubActionsではバージョンにブランチ名が適応されます。"$CONTAINER_REGISTRY_PATH/$IMAGE_NAME"]}dockerイメージのタグ付け、ECRへのログインが終わり次第ECRへpushを行います。<アカウントID>.dkr.ecr.ap-northeast-1.amazonaws.com/test-python:latest行なっているコマンドは同じですがバージョンのlatestは今回masterになっています。ECSのタスク定義でイメージのURLをlatestにしている場合はmasterに変更しましょう。工程で説明を行なっているので省略します。masterへpushを行うと、リポジトリのActionsタブから実行ログを見ることができます。処理の流れが見やすいDockerとの相性が良い悪い点ブランチごとにActionsを定義できない条件分岐が使用できない(失敗したら~~するとか)AWSの複数アカウントに対応できない(Keyを1セットしか登録できない)現在GitHubActionsはPublicBetaなので今後の機能追加に期待しています。