Dockerこの広告は、90日以上更新していないブログに表示しています。CLIを用いてRailsをFargateにデプロイする方法について書きます。イメージのビルドや自動デプロイの仕組みはまた別で書こうと思っています。今回は、MacOSで実行することを想定しています。Migration等のコマンドについてCLIツールのインストールターミナルでAWSを操作できるように、CLIツールをインストールします。今回はbrewを使ってインストールします。他の方法は以下を参照してください。--versionIAMアカウントおよびロールの作成ターミナルでAWSを操作するためのアカウントを作成します。こちらは、画面上で行います。IAMのページにアクセスして行ってください。初めにポリシー(アカウントがどの操作を行えるかを制限するもの)を紐づけたグループを作成します。今回の要件で必要となるポリシーは以下です。続いてIAMユーザーを作成します。先ほど作ったグループを紐づけてユーザーアカウントの作成を完了させてください。完了したら、以下を必ず控えておいてください。最後にロールの作成を行います。Fargateでは、ecsTaskExecutionRoleが必要となります。以下を参考にして、作成を行ってください。ESC設定ターミナル上で操作するための情報が出揃ったので、続いてAWSのアカウントの設定およびESCを操作するための設定を行います。先ほど作成したIAMの認証情報を設定します。PROFILE_NAMEのところには、サービス等の名前を入れておくと管理しやすいと思います。jsonこれを実行すると、~/.aws以下にconfigとcredentialの2つのファイルが作成されます。configureだけを実行して設定をするパターンがありますが、それだと複数のアカウントで運用する場合に切り替えが面倒になるので、私はprofile名を設定して運用しています。CLIの設定も行います。CLUSTER_NAMEとCONFIG_NAMEには、PROFILE_NAMEと同様にサービス等の名前を入れておくと管理しやすいと思います。※もし本番環境とテスト環境を分ける場合などはそれも含めておくと管理しやすくなります。PushビルドしたDockerイメージはECRにPushするようにします。ECRでリポジトリを作成し、URLを控えてください。ComposeのVersion3の記述を使うことができます。以下のように作成することができます。PREFIXこの場合、ECS上ではbuildは無視されます。ローカルでのbuildのために定義しています。ECRへのPush以下のコマンドを実行してECRへのPushを行うことができます。Groupを事前に作成しておく必要があります。クラスタを作成する際に指定をしなければ自動で作成されるのですが、自分で作成しておいた方が管理しやすいので、私は事前に作っておくようにしています。VPCとSubnetについては、AWSネットワークルールを参考にして作ってみてください。Fargateで配置するコンテナはPublicなSubnet(インターネットゲートウェイでインターネットとつながっている状態)に配置する必要があるので、そこだけ注意してください。upコマンドを使用します。ESC設定」で指定したものと同じにしてください。CONFIG_NAMEデプロイについてロードバランサーとターゲットグループの作成サービスを起動する際に、ロードバランサーまたはターゲットグループを指定する必要があるので、事前に作成しておきます。作成時の注意としては、ターゲットグループを作成する際に、「ターゲットの種類」の項目で「IP」を指定するようにしてください。Subnetに配置するか等を指定する必要があります。それらを指定するためにecs-params.ymlというファイルを作成します。IDを自分で作成したものに置き換えてください。upコマンドを使用します。--force-deploymentこれでクラスター内にサービスと1つのタスクが起動するようになります。サービスがすでに作成されていた場合は、タスクのみが新規で作成され、立ち上がり次第古いものと入れ替わります。スケールについて先ほどのコマンドでデプロイを行なった場合に、タスクの数は1となります。ここからタスクの数をさらに増やしたいという場合は、スケールさせるためのコマンドを実行する必要があります。CONFIG_NAMEこちらを実行するとタスクが2つに増え、自動で不足している分のタスクが起動します。db:migrate等のコマンドを実行することができません。Composeファイルを作成します。Composeファイル(db-migration.yml)を作成します。app用のRailsイメージのコマンドを上書きすることで同じものを利用することができます。PREFIXコマンド先ほど作成したdb-migration.ymlを指定して、タスクを実行します。ここで、PROJECT_NAMEの部分は通常のappとは別の名前にしてください。同様の名前で実行してしまった場合に、app用のタスク定義が変わってしまい、アプリケーションが起動しなくなってしまいます。CLIを使用)Tweet広告を非表示にするもっと読むコメントを書く2019-04-01AWSネットワークルールAWS個人メモ。Development)にVPCを作成する。例10.0.0.0/16をVPCのアドレスとして指定した場合。10.2.0.0/16サブネットについて以下の条件の掛け合わせで分割する。Zone例10.0.0.0/16をVPCのアドレスとして指定した場合。Gatewayを割り当てたもの2つを用意してそれぞれをサブネットにアタッチする。React.jsRailsでReact.jsを使う時に使用するミニマムの設定を紹介します。}]package.json以下の内容を追記する。javascript)の構成等についてまとめました。※yarnを使ったパターンは、別途まとめたいと思います。Boostrapの導入bootstrap-sassというgemを利用します。installを行ってください。variables.scssまた、application.scss、base.scss、partials/_text.scssの内容は、以下を参考にしてください。sample.js.coffeeページ毎にjavascriptを呼び出せるように、config/initialiers/assets.rbに以下を追記してください。)また、application.jsの内容は以下を参考にしてください。ActiveModel::Serializerを使ったものを紹介する。installを実行する。以下のコマンドにてSerialize用のファイルを作成する。今回はUserモデルに対してのSerializer用のファイルを作成する。Userこれを実行すると、app/serializers/user_serializer.rbというファイルが生成される。以下のようにattributesで指定した値がJSONのレスポンスとして返却される。関連レコードを含めたい時は、通常のModel同様リレーションを設定する。UserモデルにProfileモデルが紐付いていると仮定した場合、そのリレーションの設定は以下のようになる。:profileend実際に使用してみるcontrollerで以下のようにレスポンスをJSONで返すように記述すると、作成したSerializerのファイルがうまいこと結果を整形してくれる。@userネストの指定このままでは、Serializerファイルで記述したリレーションがそのまま実行され、関連レコードがすべて取得されてしまう。ならないために、返却時にincludeを指定する。[:profile]このようにすることで指定したリレーションのみ適用される。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。