12
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

RailsをAWS ECS(Fargate)でホストする環境構築のすべて【3. ECSへのデプロイ、SSMによる接続】

Last updated at Posted at 2020-08-18

前記事

RailsをAWS ECS(Fargate)でホストする環境構築のすべて【2. Docker定義、ECRの設定】
https://qiita.com/polar_bear_tech/items/87f5795346d246a1e07c

ECRにコンテナイメージをプッシュするまでを書きました。
今回はECS周辺の設定を行い、デプロイします。
加えて、SSMを使用した操作も行います。

下準備

ECS用セキュリティグループの作成

ECS用のセキュリティグループを作成します。
インバウンドはALBから80ポートと、VPC endpointを介してSSMからの接続のため443ポートを開けています。
スクリーンショット 2020-08-18 21.00.58.png

タスク実行ロールの作成

IAM>ロール>ロールの作成から、タスク実行用のロールを作成していきます。

ECSTask用のユースケースを選択して次へ。
スクリーンショット 2020-08-18 19.01.11.png

スクリーンショット 2020-08-18 19.01.30.png

ECSのタスクを制御するのと、SSMによる操作を行うため、以下のポリシーをアタッチします。

  • AmazonECSTaskExecutionRolePolicy
  • AmazonSSMManagedInstanceCore
  • AmazonSSMAutomationRole
  • AmazonSSMDirectoryServiceAccess

スクリーンショット 2020-08-18 19.01.51.png

スクリーンショット 2020-08-18 19.02.50.png

"ecsTaskExecutionRole"みたいな名前を付けて保存します。

SSMアクティベーションコードの発行

System Manager>ハイブリッドアクティベーションから、アクティベーションの作成を行います。
スクリーンショット 2020-08-18 19.23.14.png

説明と、管理できるインスタンス数(30くらいあれば良いかと思います)、有効期限を入力して作成。
スクリーンショット 2020-08-18 19.24.02.png

作成したら、画面上部にアクティベーションコードとIDが表示されるので控えておいてください。
控え忘れた場合は、もう一度作成すれば大丈夫です。
スクリーンショット 2020-08-18 19.24.10.png

ECSタスク定義

ECS>タスク定義から、新しいタスク定義の作成を押下し、作成していきます。

起動タイプはFargateを選択。
スクリーンショット 2020-08-18 19.04.38.png

タスク定義名を入力。
スクリーンショット 2020-08-18 19.08.01.png

タスク実行ロールに、先ほど作成したタスクを設定。
タスクサイズは、EC2のmedium規模で設定しています。ここは任意のサイズです。
スクリーンショット 2020-08-18 19.08.28.png

コンテナの追加ボタンから、ECRにプッシュしたコンテナイメージを追加していきます。
まずはnginxから、イメージ欄にはECRの一覧画面に表示されているURIをコピーして貼り付けます。
メモリ制限を4GiB、CPUユニット数を1024(1vCPU)に設定します。
スクリーンショット 2020-08-18 19.10.15.png

次はrailsコンテナを追加します。
nginx同様にURIをペーストし、メモリ制限を4GiB、CPUユニット数を1024(1vCPU)に設定します。
起動時に実行するシェル(エントリポイント)もコマンドをカンマ区切りで記載。
スクリーンショット 2020-08-18 19.15.51.png
スクリーンショット 2020-08-18 19.17.06.png

環境変数を設定します。
スクリーンショット 2020-08-18 19.25.08.png

ここで、先ほど取得したSSMのアクティベーションコード・IDを下記の変数名でそれぞれ設定します。

  • SSM_ACTIVATION_CODE
  • SSM_ACTIVATION_ID

その他、必要に応じて下記を設定します。

database.ymlで環境変数からロードするようにしておく値

  • DATABASE_HOST
  • DATABASE_PORT
  • DATABASE_USER
  • DATABASE_PASSWORD

image.png

AWSのAPIアクセス用のキー情報

  • AWS_ACCESS_KEY_ID
  • AWS_SECRET_ACCESS_KEY

最後にスタートアップ依存順序をnginxのコンテナ側に追加します。
スクリーンショット 2020-08-18 19.26.24.png

コンテナを追加できたらこんな感じになります。
スクリーンショット 2020-08-18 19.27.02.png

以降は初期値のままで、作成まで進めます。

ECSクラスタ作成

ECS>クラスターからクラスターの作成を押下して、作成していきます。

テンプレートはFargate用の「ネットワーキングのみ」を選択。
スクリーンショット 2020-08-18 19.27.51.png

クラスター名を入力し、
CloudWatchでハードウェア監視を行いたい場合はCloudWatch Container Insightsにチェックします。
スクリーンショット 2020-08-18 19.28.51.png

作成したら、クラスターの管理画面になります。
スクリーンショット 2020-08-18 19.29.10.png

ECSサービス定義

最後!クラスター管理画面のサービスタブにある作成ボタンから、作成していきます。

起動タイプはFargate、タスク定義に先ほど作成したタスク定義を選択します。
リビジョンはlatestを選択。
タスク定義はバージョン管理されているので、これを更新したら最新を選んだり、前のリビジョンに戻したりできます。
サービス名を任意の内容で入力。
スクリーンショット 2020-08-18 19.29.54.png

タスク数は2とかにするとバランシングしてくれます。任意の個数指定してください。
デプロイに関してはCodeDeployを使用する場合はB/Gにするなど、任意です。
スクリーンショット 2020-08-18 19.30.29.png

ネットワークは最初に作成しておいたVPCを選択。
サブネットもECSコンテナをのせる予定の2つのサブネットを設定。
セキュリティグループは1つ目の記事で作っておいた、ECS用のセキュリティグループを適用。
パブリックIDの自動割り当ては、有効。(有効じゃないとSSMで接続できなかった気がする)
スクリーンショット 2020-08-18 19.31.09.png

ロードバランサも作っておいたものを選択しましょう。
ロードバランス用のコンテナは、nginxのコンテナを選択し、ロードバランサーに追加ボタンを押します。
スクリーンショット 2020-08-18 19.31.37.png
スクリーンショット 2020-08-18 19.31.58.png

ターゲットグループ名を作っておいたもので選択すると、全部自動入力されるかと思います。
スクリーンショット 2020-08-18 19.32.13.png

サービスの検出オプションは有効にしておきます。
スクリーンショット 2020-08-18 19.32.42.png
スクリーンショット 2020-08-18 19.32.53.png

オートスケーリングは任意で設定してください。
タスク平均のCPU・メモリの使用率や、タスクごとのリクエストの完了数を条件にしてオートスケーリングができます。
スクリーンショット 2020-08-18 19.32.59.png

作成して、タスクタブを開き、しばらくすると、RUNNINGになるかと思います!
スクリーンショット 2020-08-18 19.35.36.png

起動確認

EC2>ロードバランサーからDNS名をコピーして、ブラウザで確認しましょう。
スクリーンショット 2020-08-18 19.36.24.png

ルートはNginxのデフォルトを設定しているので、Nginxの初期画面がでました。
スクリーンショット 2020-08-18 19.37.06.png

SSMの操作

まだもうちょっとだけ。
System Manager>マネージドインスタンスを開くと、SSMで管理されているサーバが表示されます。
アクティベーションコードがうまく設定できていて、entrypoint.shでSSMのエージェントを起動できて、ネットワーク設定も開いていればオンラインとなっているハズです。
スクリーンショット 2020-08-18 19.37.38.png

選択し、アクションから「Start session」を押下すると、
スクリーンショット 2020-08-18 19.37.47.png

CUIが開きます。
Railsのコンテナに入れたので、これで操作可能なのですが、注意点として、ユーザーはssm-userというものになっています。
スクリーンショット 2020-08-18 19.38.36.png

sudoできるユーザーになっていますので、たとえばマイグレーションを行うとしたら、下記のコマンドで実行できます。

$ sudo -E bundle exec rake db:migrate RAILS_ENV=staging

ECSをSSMで管理する場合、課金対象になるかリファレンスから確実なところ読み取れなかったのですが、セッションマネージャでアクセスできるということは課金されると思います。
なので、使い終わったら登録解除しておくと、課金されませんので良いかも。
スクリーンショット 2020-08-18 19.43.06.png

最後に

入門できるまでが遠い門、まさにFargateでした。
こだわると、あとは下記が設定できると良いかと思います。

  • 環境変数はSystemManagerのパラメータストア使ったほうがいいです。
  • CodePipelineで自動デプロイ設定できます。
  • SSM接続のためのアクティベーションコード発行と環境変数への設定は、entrypoint.shでaws-cliつかってできたら手間が減る。

この記事としてはあくまで動作させるまでということで、以上です。

12
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?