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をワンライナーで実行する

Pocket


adachin

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

0件のコメント

コメントを残す

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