Pocket

[AWS][EC2]GitHub Actionsで気楽にステージングと本番をrsyncデプロイしてみた

さて、以前にGitHub Actionsを利用してEC2のデプロイ方法をブログしましたが、今回は独自コンテナイメージを利用してAWS Lambdaにデプロイするように試してみました。

ちなみにLambdaのデプロイはCircleCIでも作っていましたね。

[AWS]LambdaをCircleCIで自動デプロイする


構成

  • ディレクトリ構成

  • Dockerfile

  • lambda/hogeディレクトリ配下にPythonのソースコードが管理されている前提
  • LambdaはAPI Gatewayと連携
  • Python imageのdocker build,push、aws-cliでイメージの更新
  • Stg環境はworkflow_dispatchで手動デプロイ
  • 本番環境はmasterマージでデプロイ
    • paths を利用してディレクトリ配下に差分が出た場合に
  • 準備

まずはAWSと連携したいため、OIDCの設定をしましょう。クレデンシャルを環境変数として管理するとセキュリティ面が下がりますし、管理が煩雑になりますからね。

[AWS]GitHub ActionsでOIDCの設定


GitHub Actions Workflow

  •  .github/workflows/deploy-stg-lambda.yml

https://github.com/aws-actions/configure-aws-credentials

Stg環境ではほとんどEC2のデプロイ方法と変わりなく、 workflow_dispatch で手動デプロイをしています。32行目OIDCになったことで aws-actions/configure-aws-credentials を利用して事前に作成したロールを指定しています。あとはbuild、push、aws-cliでLambdaのコンテナイメージを切り替えるだけです。push時にECRのIMAGE_TAGもshaで変数にできますが、latestで問題ないでしょう。

  • .github/workflows/deploy-prd-lambda.yml

https://docs.github.com/ja/actions/using-workflows/workflow-syntax-for-github-actions#onpushpull_requestpull_request_targetpathspaths-ignore

本番環境では毎回masterマージでデプロイされないように、7行目の  paths: を指定するだけで簡単に差分検知でマージ時にデプロイすることができるため、デバッグ等の工数がかかりませんでした。CircleCIでは path-filtering を利用していましたが、実装の手間が色々とかかっていましたね。

[CircleCI][Orbs][path-filtering]特定ディレクトリに差分が出たらterraform applyを適用するように実装してみた

  • 動作確認

stg

本番


まとめ

差分検知はCircleCIよりGitHub Actionsの方が便利で感動した…!次はTerraformのCI/CD環境も作ってみたいと思います。

Pocket

カテゴリー: AWSGitHub Actions

adachin

1989年生まれのSRE。 ホスティングから大規模なアドテクなどのインフラエンジニアとして携わる。好きなツールはAnsible,Terraform,CircleCIで、ECS/Fargateでのインフラ構築を得意とする。副業では数社サーバー保守とベンチャー企業のインフラコンサルティングやMENTAで未経験者にインフラのコーチングを実施している。また、「脆弱性スキャナVuls」のOSS活動もしており、自称エバンジェリスト/技術広報/テクニカルサポート/コントリビュータでもある。現在はサービスの信頼性向上、DevOps、可用性、レイテンシ、パフォーマンス、モニタリング、緊急対応、インフラコード化、リファクタリング、セキュリティ強化、新技術の検証、Docker開発環境の提供、AWSでのインフラ構築、GCPでのGKE/Kubernetes保守などを担当している。

0件のコメント

コメントを残す

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