さてと、2ヶ月ぶりのブログとなります(冷汗)。今までは以下CircleCIによるECS/Fargateのデプロイを実装していましたが、今回始めて、GitHub Actionsを利用してデプロイを実装してみました。CircleCIと比べてみると悩むことなく非常に簡単に作れてしまったので解説していきたいと思います。

[CircleCI][ECS/Fargate]API v2を使って気楽にステージング環境をデプロイさせる

[ECS/Fargate][run-task][Rails]CircleCI Orbsを使ってdb:migrateを行う


デプロイフロー

  • Stg
    • リモートブランチとworkflow_dispatchを利用して手動でデプロイとマイグレーション
  • 本番
    • Masterマージでデプロイとマイグレーション

CircleCIとデプロイフローは同じで、ローリングアップデートですね。また、今回のAppコンテナはRailsとしましょう。


Stg

  • .github/workflows/deploy-stg-app.yaml

https://github.com/aws-actions/amazon-ecr-login
https://github.com/aws-actions/amazon-ecs-render-task-definition
https://github.com/aws-actions/amazon-ecs-deploy-task-definition
https://github.com/yyoshiki41/ecs-run-task-action

37行目ではGitHubでクレデンシャルを管理したくないため、OIDCを設定しています。初期設定に関しては以下を参考にしてください。

[AWS]GitHub ActionsでOIDCの設定

44行目ではRailsの.envをS3で管理しているため、ソースコード先にコピーしています。52行目はコンテナのbuildをするために環境変数とImage TagでGitHubのshaを利用しています。62行目ではタスク定義を更新しなければならないのですが、ECS/FargateはTerraformで管理しており、Terraformで管理しているタスク定義とは別にGitHub Actionsで利用するAppコンテナのタスク定義を以下に準備しました。CircleCIの場合、Orbsでタスク定義の更新はよしなにやってくるので、ちょい手間がかかるかもしれません。

  • terraform/stg/files/taskdefinitions/githubactionsapp.json

70行目ではタスク定義からローリングアップデートを実施します。 wait-for-service-stability をtrueにすることで、ECSサービスの安定稼働するために実行完了を待つようになります。ですが、Stg環境であれば安定稼働必須ではないはずなのと、完全に切り替わるまで少し時間がかかるので、この設定は不要かもしれないですね。と思いきや、単純にfalseにするとローリングアップデートの処理を実行してActions側は終了になってしまいます。なので、切り替わるのが終わるまで待ったほうが分かりやすいのでtrue必須になりますね。

最後に92行目で、コンテナが切り替わった後にrun-taskでマイグレーションを実行して完了となります。

実際にデプロイしてみましょう。

  • 動作確認


本番

  • .github/workflows/deploy-prd-app.yaml

本番は以下branchesをMasterマージで発動でStgとコードは同様なため、割愛させていただきます。


まとめ

CircleCIで慣れちゃってるのもありますが、GitHub Actionsでは初だったのでいい経験だった!学習コストは低いのでお試しあれ!あとはデプロイの高速化かな。wikiに書いておきました。

[ECS/Fargate][GitHub Actions]コンテナデプロイ高速化の工夫点

コンテナ分離する場合は以下を参考に。

[AWS][GitHub Actions]ECS/Fargateで複数のコンテナをデプロイする場合



adachin

1989年生まれのFindy/SRE。ホスティングから大規模なアドテクなどのインフラエンジニアとして携わる。現在はサービスの信頼性向上、DevOps、可用性、レイテンシ、パフォーマンス、モニタリング、オブザーバビリティ、緊急対応、AWSでのインフラ構築、Docker開発環境の提供、IaC、新技術の検証、リファクタリング、セキュリティ強化、分析基盤の運用などを担当している。個人事業主では数社サーバー保守とベンチャー企業のSREインフラコンサルティングやMENTA/TechBullで未経験者にインフラのコーチング/コミュニティマネージャーとして立ち上げと運営をしている。また、過去「脆弱性スキャナVuls」のOSS活動もしており、自称エバンジェリスト/技術広報/テクニカルサポート/コントリビュータでもある。

0件のコメント

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください