AWSお勉強 ECS

2023-11-04

サボり始めるとやる気が起きなくなる久々のパクリ13発目!

パクリ元

内容

CodeCommitにソース等を登録 → CodeBuildでコンテナ等作成してECRに登録 → ECSで起動(★今回ココ) の流れ。

ECS クラスター

ECSはDockerコンテナイメージをダウンロードしてきて起動する。まずクラスターという親玉を定義、その中で一つ一つのやる事を定義したタスク定義を起動するサービスを作成する流れ。「EcsTest」というクラスターを作成する。インフラストラクチャはチェック済みの「AWS Fargate(サーバーレス)」としておく。いろんな参考ページとはあちこち変わっているようで周回遅れ感が否めないのがパクリ学習にはつきもの。

ECS タスク定義

左のメニューから「タスク定義」を選択し、「新しいタスク定義の作成」ボタンを押下し、「NginxTaskTest」というタスク定義を作成する。起動タイプは「AWS Fargate」、オペレーティングシステム/アーキテクチャには「Linux/x86_64」、CPU・メモリはテストなので「.5vCPU」「1GB」に設定、タスク実行ロールは「新しいロールの作成」とする。クラスター作成時に定義したインフラストラクチャ「AWS Fargate(サーバーレス)」とこの起動タイプ「AWS Fargate」の違いがよく分からない。ここで指定した「Linux/x86_64」はDockerコンテナ内のOSと合わせるようにとはいろんなページに書いてある。

コンテナには「NginxTaskContainer」と名前を付け、イメージURIにはECRリポジトリエンドポイント(<AWSアカウントID>.dkr.ecr.ap-northeast-1.amazonaws.com/ecr-test:latest)を設定、その他はデフォルトのまま作成。

ここではコンテナが複数定義できるようだけど、一つのコンテナのタスク定義を複数サービスで起動させるのとどう違うんだろ。細かい個所は触り程度だと分からないな。

ロール

自動的に登録された「ecsTaskExecutionRole」ロールだが、ECRから読み取るポリシーが足りないようなので追加する。IAM>ロールから「ecsTaskExecutionRole」を検索し、クリックする。

「許可を追加」ボタン押下、「ポリシーをアタッチ」を押下する。「AmazonEC2ContainerRegistryPowerUser」でフィルタリングして、チェックをつけて「許可を追加」ボタンを押下する。

ECS サービス

クラスターからタスク定義を実体化してデプロイするサービスを作成する。クラスターをクリックしてサービスタブの「作成」ボタンを押下する。
 クラスター>サービス>タスク(タスク定義から) という関係性と理解。

タスク定義のファミリーは「NginxTaskTest」を選択、サービス名は「NginxTaskServiceTest」とする。

デプロイに時間がかかるようで、少し待って作成成功。

ECS タスク

作成されたサービスをクリックしてタスクタブからタスクをクリックして確認。

このパブリックIPというのがURLで確認できるIPとなる。が、そのままだとつながらないので、セキュリティグループの80番を許可する必要がある。セキュリティグループのリンクをクリック。ここからは何の情報をマスクすればいいかよく分からなかったので黒塗りが多くなる、、

セキュリティグループ

指定されているセキュリティグループの「インバウンドのルールを編集」ボタンを押下。

「ルールを追加」ボタンを押下し、ポート範囲に80、許可IPに「0.0.0.0/0」を設定して「ルールを保存」ボタン押下。このルールは確認後に必ず消すようにする。

Nginx 確認

満を持してECSで管理されているコンテナ内のNginxを確認する。先ほどのパブリックIDをブラウザで確認!

ここで文字化け!!「Hello 周回遅れのパクリ学習」と出るはずだが CodeCommit に上げた index.html には確かに何も考慮してなかったな!めんどくさいのでこれで良しとする。

後片付け

さきほど追加したデフォルトセキュリティグループへのルールを削除する。無制限にアクセス可能の状態を残しておくとよくないため。

今立ち上げたECS サービスを削除しておく。立ち上げっぱなしだと料金がかかるため。
サービスにチェックを入れて、「サービスの削除」ボタンを押下する。

強制削除にチェックを入れ、テキストボックスに「削除」と入力して「削除」ボタンを押下する。

とりあえず終了。
本番環境として使用するにはロードバランサー、バッチ、DB、スケール等も考慮すべきなのでここから繋げていこうと思う。

雑感

Docker で確認しておかないとダメだったパターン。
今まで EC2 でしか Docker 管理していなかったがセキュリティグループとかも管理する必要があるので今回は省略していたが、ローカルででも確認しておくべきだった。ローカル Docker でも入れようか。

AWS,Docker,ECR,ECS

Posted by ak