初心者インフラエンジニアが困ったときに試行錯誤するブログ

インフラエンジニアが,開発の勉強をするときのログを残します

DockerでRailsを動かす その4 番外編

実現したいこと

DockerでRailsアプリを動かし,それをAWSのECS上で実行するところまでを完成させたいと思います.

前回までの戦いはこちら...

DockerでRailsを動かす その3 - 初心者インフラエンジニアが困ったときに試行錯誤するブログ

やったこと

前回,拾ってきたRailsサンプルをうまく動かせなかったので,今回は別のサンプルを作成したいと思います.

まず,RDSを使うコンテナの勉強から..

RDSにとりあえずPostgre入れてみよう

RDSのコンソールからポチポチで作成.特に設定をいじった部分もなく,ほとんどデフォルトでいきました.KnowledgeというDockerでQiita:Teamのオープンソースクローンを使用してみたいと思います!これ使えれば本番運用もありかもしれない

$ git clone https://github.com/support-project/docker-knowledge.git
$ vi volumes/knowledge/custom_connection.xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<connectionConfig>
        <name>custom</name>
        <driverClass>org.postgresql.Driver</driverClass>
        <URL>[DBのエンドポイント]/URL>
        <user>[ここにユーザー名]</user>
        <password>[ここにパスワード]</password>
        <schema>public</schema>
        <maxConn>0</maxConn>
        <autocommit>false</autocommit>
</connectionConfig>
~

Dockerfileに設定を反映させます.

# Dockerfile for Knowledge

FROM tomcat:jre8

# ==== dumb-init ====
RUN apt-get update && \
    apt-get install -y dumb-init && \
    apt-get clean

# ==== environment ====
RUN rm -rf /usr/local/tomcat/webapps/ROOT \
  && update-ca-certificates -f

# ==== add Knowledge ====
ADD https://github.com/support-project/knowledge/releases/download/v1.13.1/knowledge.war \
      /usr/local/tomcat/webapps/ROOT.war

VOLUME [ "/root/.knowledge" ]
COPY ./volumes/knowledge/custom_connection.xml /root/.knowledge/
EXPOSE 8080

CMD [ "dumb-init", "/usr/local/tomcat/bin/catalina.sh", "run" ]

さて,設定が完了したところで,イメージを作成し,ECRにpushしたいと思います!!

$ docker build -t knowledge .
$(aws ecr get-login --no-include-email --profile <ユーザー名>) #これでAWS CLIからECRにログイン
$ docker tag knowledge:latest <ECRリポジトリのURI>:latest
$ docker push <ECRリポジトリのURI>:latest

さて,これでECRにDockerイメージを置くことができました.

それでは,早速起動していきたいと思います.

ECSでタスク定義を適当に作り,Fargateで適当に起動...

あれ?PENDINGになりますね.なんでだ...セキュリティグループなど間違っているのか?果たしてそうだったとしてもコンテナ自体立ち上がらないのか?

もう少し待ってから見てみよう...と思ったら!!!起動している!!

IPで接続しても全然つながりませんが,とりあえずコンテナの立ち上げはうまく行ったみたい

よかったー.

これから,ネットワーク周りの構築に移行します.

ALBを新規に作成しました.この辺はもう適当.とりあえずつながればいいのでセキュリティなどもテスト用で設定.

ここまでやっておきながら,やっぱりセキュリティグループ的にポート空いていればアクセスできるはずじゃ?と思い,やっぱりそのまま接続に挑戦.

接続に失敗するエラーはでるけど,Fargateのサンプルアプリはそのまま繋げるしなーと.やはり,アプリ側の設定ミスの模様.

ローカルでの実行を試す

$ docker compose up -d

コンテナが起動.localhost:8080に接続してみるが...

...動かない

なんで!?せめてどこでエラーになっているのかのログだけでも教えてくれ!

再度,git cloneし,そのまま起動してみると,接続に成功.

ということは,DB周りの設定がおかしいことは確か.RDSにつなぎたいんだけどなーー

参考

以下の記事を参考にさせていただきました.

dev.classmethod.jp

Amazon Fargate でコンテナを動かす - Qiita

本記事について

本記事は,学習を目的に書かれています.

間違い,改良案などございましたら,コメントしていただけると幸いです.

基本的に編集途中ですので,何を書いてほしいかもコメントいただけると,

その情報を中心に追記します.