LINEで送る
Pocket

[CircleCI][AWS][Rails]OrbsのCommandsをつかってECR/ECS/Fargateにデプロイする

前回はAWS FargateでCircleCIのOrbsを使ってRails環境のデプロイを実装しましたが、今回はWordPressとなります。PHPでのECS/Fargateは初!上記の記事よりめちゃくちゃシンプルなデプロイとなるので、まずは環境から紹介したいと思います。


■環境

  • DBはRDS(Aurora)
  • 画像はS3に保存(WP Offload S3 Lite)
  • それ以外のコードはリポジトリ化
  • Docker imageは php:7.3-fpm-alpine を使用
  • その中にNginxとsuperviserをインストール

■デプロイの構成

前回と変わったところは②のS3からwp-config.phpをcopyしてくるというところで、以前は  echo.env に環境変数を吐くように書いていましたが、メンテしづらいということや、CircleCIのconfig.ymlも見づらいということもあって今回S3から取ってくるように作ってみました。デプロイはdevelopブランチにマージするとstg環境がデプロイされ、masterマージすると本番反映されます。以下はディレクトリ構成となります。

  • ディレクトリ構成

  • nginx/default.conf

  • ping.php

このdefault.confはELBのヘルスチェックで/ping.phpにアクセスするとレスポンスを返すようにステータスチェックをしていますが、ELBのログはCloudWatchLogsに出したくないので404を返すようにELB側で制御しています。これでコンテナが落ちることはない!

余談ですが、AWSのWordPressはロードバランサー挟むと真っ白になるので以下を参考に。

[AWS]WordPressにCloudfrontとALBを挟むと想像以上に動かなくてハマった!


■CircleCI

  • config.yml

  • Dockerfile

 CircleCIではS3からwp-config.phpを持ってきてDockerfileからbuildとECR、ECSタスク定義、サービスの更新をするという非常にシンプルな作りとなっています。ただ、wp-config.phpをコピーした後にCircleCIでcheckoutされてしまうので、Dockerfileでmvでファイルを移動しています。(ここらへん気持ち悪いけど何かいい方法ないものか..) あとはDocker imageがAlpineのphp-fpmを使っているということで、phpの設定ファイルの場所(/usr/local/etc/)が変わっていたり、優先順位などで反映されずphp-fpm.d/zz-docker.confなどは削除しています。これでデプロイの時間は約2分くらい。


■まとめ

CircleCIのデバッグに時間取られたけど、前回の経験もあってすんなり実装することができたので良き!CakePHPの場合は composer install 入れるだけなのでこのDockerfile使いまわせそうですね。

余談だけど aws configure ってワンライナーでいけることを知った。

[aws-cli][クレデンシャル]aws configureをワンライナーで実行する

LINEで送る
Pocket


adachin

1989年生まれのLancers SRE。 ホスティングから大規模なアドテクなどのインフラエンジニアとして携わり、AnsibleやTerraformでのインフラコード化を推進。副業では数社サーバー保守、未経験によるエンジニアのメンターなども実施している。また、「脆弱性スキャナVuls」のOSS活動もしており、自称エバンジェリスト/技術広報/テクニカルサポート/コントリビュータでもある。現在はサービスの信頼性向上、可用性、レイテンシ、パフォーマンス、モニタリング、緊急対応、インフラコード化、リファクタリング、セキュリティ強化、新技術の検証、Docker開発環境の提供、AWSでのインフラ構築、グループ会社のインフラをECS/Fargateへ移行、CakePHP4での管理画面作成、メンター、分析基盤の運用を担当している。

0件のコメント

コメントを残す

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