[WIP]EC2に開発環境構築

背景

EC2にdockerもinstallできたし、ローカルのvs codeも接続できた!
さて、java開発していくか!

…ん?コード補完ができない。
エラーを見ると、なになに。コードを予測するためのjdkが見当たらない。

なるほど、、ローカルにはjdk8しか入れていないし、ローカルのvscodeからEC2にあるdockerのjdkにはdevcontainer接続するのは難しそうだ。
※要は[vscode(local)]-(SSH)-[EC2]-(internal)-[docker]になっているけど、EC2を踏み台にdockerに直接入る形でないと、devcontainerできない。

devcontainerでやり切る方法を探してもいいけど、もともとローカル環境に依存しない開発環境を作りたかったので、複雑なdevcontainer設定せずに解決できる方法は無いものか…

やっぱりcode-serverをEC2に立てて、code-serverからdockerに入るかな。

⇒この後調べたが、docker-in-docker(多分やりたいのは、正確にはdocker-outside-of-docker)をすれば、code-serverをdocker化して、さらにそこからdockerアプリの開発をすることもできる

作業

どんな選択肢があるかの比較など、ベースとなる動き方で参考にしたサイト

code-server 構築の茨の道と、その近道 - Qiita
ながらくCodeanywhereを住処にしてきたものの、実はここ半年ほどフラフラしていました。VS Code Remote を使ったり、ほかに浮気したりと。しかし、最近になってようやくエディタ環境が…

EC2にcode-serverをインストール

AWS EC2 に Code Server を構築する
プログラミング関連の備忘録。AI関連APIの解説等を行っています。 少しでも誰かの役に立てれれば嬉しいです。

通信経路をSSL化

AWS運用には無料のSSL証明書を活用しよう!(取得も簡単、難易度低です) | AWS運用最適化サービス cloud link (クラウドリンク)
「AWSでHTTPS通信のセキュリティが高いwebサイトを構築しよう」と決まった方へ、SSL証明書の購入先を検
EC2のWEBサイトをロードバランサーの配下に再配置し、AWSのSSL証明書を使って暗号化する - Qiita
AWSのEC2をELB(ALB)配下にしてSSL化今までEC2でWEBサーバを立てて公開する際はlet's encryptをインストールをしていましたが、AWS Certificate Manag…

nginxのインストール

【AWS EC2】Amazon Linux2にnginxをインストールする方法 - Qiita
概要AWS EC2(AMI: Amazon Linux 2)にnginxをインストールする環境AWS EC2OS: Amazon Linux 2AMI: amzn2-ami-hvm-2.0…

/index.htmlの表示
・ELBのヘルスチェックは問題なし
・インスタンスのパブリックIPからアクセスすると正常に表示
・ALB経由でインスタンスアクセスするとアクセスログが文字化け

172.17.3.58 – – [24/Jan/2023:17:56:33 +0900] “GET /index.html HTTP/1.1” 200 615 “-” “ELB-HealthChecker/2.0” “-“
172.17.1.214 – – [24/Jan/2023:17:56:34 +0900] “GET /index.html HTTP/1.1” 200 615 “-” “ELB-HealthChecker/2.0” “-“
172.17.3.58 – – [24/Jan/2023:17:56:55 +0900] “\x16\x03\x01\x00\xA3\x01\x00\x00\x9F\x03\x03\x131\xD2\xEA\xC6\x1A\x95~\x95\x1E\x82\xAB\x19H8\xCF\xF2\xD9\xDD\xA0\xCC\xEC%\xF7\xD3D:\xAAIV\x18S\x00\x00&\xC0+\xC0/\xC0#\xC0’\xC0\x09\xC0\x13\xC0,\xC00\xC0$\xC0(\xC0\x14\xC0” 400 157 “-” “-” “-“
172.17.3.58 – – [24/Jan/2023:17:56:55 +0900] “\x16\x03\x01\x00\xA3\x01\x00\x00\x9F\x03\x03q\xB9\x07$\xBDO\xCF\xF5x\xEA\xE3\x0Fh\xE5li\x02C\xF2\xF2\xA2\x83\xCC\x902\xAB%fmx\x09\xDA\x00\x00&\xC0+\xC0/\xC0#\xC0’\xC0\x09\xC0\x13\xC0,\xC00\xC0$\xC0(\xC0\x14\xC0” 400 157 “-” “-” “-“

SSLの復号化ができていない…?
ということで、SSL設定を入れていないALB作成し、やってみる。
ん?ターゲットグループにHTTPSって書いてあるぞ、もしやターゲットグループのINがHTTPSになっている?
⇒ターゲットグループのINをHTTPに変更。うまくいった~~

172.17.1.214 – – [24/Jan/2023:18:37:54 +0900] “GET / HTTP/1.1” 200 615 “-” “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36” “125.199.50.139”

websocketに対応できていないエラーが発生
⇒web socketを通せるようにnginx.conf修正

NginxのリバースプロキシでWebソケットを通す際の設定 - Qiita
Webソケットを利用するサービスをNginx経由で動作させるための最低限の設定と、設定項目の意味を整理しました。前提本記事はnginxの設定方法をある程度知っていることを前提としています。ディ…

ここまでやってみたけど、結局nginx本当にいるの…?
ということで一旦、nginxを外して直接code-serverつなげてみた。
⇒結果、connection timeout連発。多分、code-serverの処理が遅くてALBが待てないのだろう。keep-aliveとか諸々の設定があるおかげで、nginxを通しているとうまくいくのかもしれない。しばらくはnginxを入れたまま様子見しよ。

Route 53って、ホストゾーン設定すると $0.5 /月 かかるのね…見落としてた

Java導入

java導入した

# rootユーザーログイン
sudo su -

# amazon-correttoの選択肢を確認
yum search java | grep amazon

# java インストール
sudo yum install -y java-17-amazon-corretto.x86_64

インスタンスタイプ変更

拡張機能入れて、java入れて使っていたけど、いきなり応答速度が落ちた。CloudWatch見てもめちゃくちゃ怪しいところはない(しいて言えばCPU使用率60%ぐらいになっていた)
試しに、インスタンスサイズをt2.micro⇒t4g.largeに変更。改善されたが料金もう少し安いのでいけないか探し、t3a.mediumでそれなりに動いたため固定。

nginxログをCloudWatch Logsに転送

ストレージ容量小さいし、ログはEC2に残さず原則転送。残すのは1世代前まで
(これは、CloudWatch転送失敗したときのリカバリ期間による、業務用なら1週間ぐらいかな)

まずはローテ設定。前日の疎通確認していたログは転送してほしくない。
下記を参考にdateextとrotate 1だけ変えて設定をした
あと、なぜかpostscriptは初期設定のままの方がうまくいったので、記事の通りにはしていない

次にCloudWatchLogsへの転送設定
I AMポリシー何もアタッチしていないと転送されないのね。アタッチした瞬間に転送始まった

conf記載内容について書かれているのがこれ

AWS CloudWatch LogsエージェントでAmazon EC2上のNginxのaccess.log , error.log , php-fpm error.log , Linuxのmessages , secureログを収集する
参考ページ クイックスタート: 実行中の EC2 インスタンスに CloudWa ...

フォーマッタの設定(いよいよ)

フォーマッタ設定した

VSCode の Java 開発環境にフォーマッターを設定する - Qiita
はじめに本記事では Google Java Style をサンプルに、フォーマッターを Visual Studio Code に設定する方法を紹介していきます。前提拡張機能 Japanese …

備忘録

  • EC2構築は、EC2の画面「接続」にてweb上からターミナルアクセスが良い。SSH接続試すのは良いけど、外から接続するのは面倒。
    ⇒ただ、SSH接続キーを保管しておけないよね。キーペア保管せず毎度ssh-keygenする方が良いのかな?運用考えよ

コメント

タイトルとURLをコピーしました