FargateECRtechはじめにEC2(Nginx)->EC2というプロキシ構成は以下記事で行ったことはありましたが、Fargate(Nginx)->EC2という構成でしてみたかったのでやってみました。事前にFargateとEC2用のセキュリティグループを作成しておきます。以下の設定で作成しました。Linux2023選択したらデフォルトで選択されるAMI)al2023-ami-2023.3.20240108.0-kernel-6.1-x86_64パブリックIPアドレスあり本来ならEC2はプライベートサブネットに置くと思いますが、NginxインストールにNATゲートウェイの料金がかかるのでパブリックサブネットに置きます事前作成したEC2用のセキュリティグループSessionManagerで接続できるIAMロールアタッチt2.microEC2にNginxインストール・設定まずNginxのインストールから起動確認まで行います。process"起動確認ができたので、ドキュメントルートの場所を確認の上、ドキュメントを単純な内容に変更します。catの出力内容は関係箇所のみ抜粋しています。Nginx!!」が返却されます。Fargate用のDockerイメージ作成プロキシに利用するのもEC2と同じくNginxです。適当なディレクトリを作成し、同ディレクトリに移動した上でDockerfileを作成します。/etc/nginx/conf.d/Nginx用の設定ファイルdefault.confをDockerfileと同じ階層に置きます。execして確認した内容を流用しています。/をコメントアウトしています。1箇所のlocationをコメントアウトしているのは、重複してエラーが発生するからです。#}}階層構造は以下になります。default.conf次に、イメージを作成し、正常に作成できたかチェックしていきます。exit上記ではイメージ作成後、コンテナを立ち上げコンテナに入っています。localhostを実行してエラーのドキュメントが返ってきています。この挙動は、Nginxコンテナがプロキシ先のIPアドレス10.0.0.120に到達できないので想定通りの挙動になります。念のため、10.0.0.120に接続しようとしてエラーになっているかNginxコンテナのログを確認します。my-nginx想定通りログからも10.0.0.120への接続に失敗している状況がわかったので、コンテナを停止・削除します。ECRリポジトリにプッシュ想定通りのDockerイメージが作成できたので、今度はFargateで利用するためにECRにプッシュします。ECRのプライベートリポジトリを作成します。my-nginxとしました。リポジトリを作成するとプッシュコマンドが確認できるので、そのコマンドを参考にDockerイメージをプッシュしていきます。xxx.dkr.ecr....のxxxはAWSアカウントIDです。1985以上のコマンドによりECRへイメージのプッシュが完了しました。本当にプッシュが完了したかはAWSマネジメントコンソールからECRリポジトリを確認しましょう。Fargateタスク作成まずはECSクラスターを作成します。次に、タスク定義を作成します。作成はコンソール上でぽちぽち行いましたが、JSONにすると以下の内容です。主な設定は次のとおりです。[]}最後に、ECSサービスを作成してタスクを起動します。主な設定は次のとおりです。オンネットワーキングの設定さえ間違えなければ問題ありません。ECSサービスを作成すると、少し時間をおいてタスクが起動されます。疎通確認タスクが起動されたら、パブリックIPアドレスをメモしましょう。ローカルPCからタスクのパブリックIPアドレス宛にcurlを実行します。ブラウザからのアクセスでも問題ありません。Nginx!!EC2に設定した内容が返却されたので、Fargate(Nginx)->EC2でプロキシできたことが確認できました。続いて、EC2インスタンスのアクセスログ/var/log/nginx/access.logも確認してみましょう。"-"実際はブラウザからもアクセスしているので上記より多くのアクセスログがありましたが、可視性を考慮し省略しています(以降同様)。10.0.0.174からアクセスされていますが、これはタスクのプライベートIPアドレスです。自宅のIPアドレスではないので、絶対に自分が接続したという実感が湧きません。実際のクライアントのIPアドレスを知りたい場合は事前にプロキシのFargateのNginxの設定を変更する必要があります。https://qiita.com/yakumo3/items/dc38a9b6c19194a88922上記記事を参考にしてイメージを作り直せばできると思いますが、今回はUserAgentを変更して自分がアクセスしたという実感を得ようと思います。ローカルPCでcurlを実行します。Nginx!!上記でUserAgentを指定したので、アクセスログにはOreOreが残っているはずです。EC2のアクセスログを確認します。"-"UserAgentがOreOreになっていました。これで自分がアクセスしたログであることが一目瞭然ですね。おわりにこの記事が誰かのお役に立てれば幸いです。kazu.oバッジを贈って著者を応援しようバッジを受け取った著者にはZennから現金やAmazonギフトカードが還元されます。Proよくある質問LinksX(Twitter)GitHubメディアキットLegal利用規約プライバシーポリシ。