Server

Amazon ECSでGoアプリケーションのデプロイとALB設定をやる

投稿日:

はじめに

前回、前々回とAmazon ECSについて紹介してきました。今回はその応用として、以下の内容について書きたいと思います。

  • ALBからECSタスクにリクエストを流す
  • ALBに独自ドメインを紐付ける
  • ECSタスクで機密データを扱う
  • オートスケーリング
  • GitHub Actionsでデプロイする

ECSの概要については、Amazon ECSでGoのEchoサーバを立ち上げるをご覧ください。こちらで構築した環境を元に作業を進めていきます。

また、タスク定義については、Amazon ECSのタスク定義についてをご覧ください。

独自ドメインを取得する

後々、ALBの作成にあたり証明書が必要になってくるので、予めドメインを取得し、証明書を取得しておきます。

ドメインを取得する

ドメインはRoute53で取得します。

サイドメニューの「ドメイン」の「登録済みドメイン」をクリックします。

「ドメインの登録」をクリックし、任意の名前と拡張子を選択し、「続行」をクリックします。

住所等を入力し、ドメインの自動更新を無効にして登録します。

メールが送られてくるので、リンクをクリックして暫く待つとドメインの取得が完了します。

証明書を取得する

ドメインが取得できたら証明書を発行します。

証明書はCertification Managerから取得することができます。

「リクエスト」をクリックし、パブリック証明書を選択して「次へ」をクリックします。

取得したドメイン名を入力し、リクエストをクリックします。

証明書一覧に戻り、作成した証明書IDをクリックします。

「Route53でレコードを作成」をクリックし、「レコードを作成」をクリックします。

暫くすると証明書が発行されます。

ALBからECSタスクにリクエストを流す

ALBからECSにリクエストを流すには、以下の手順が必要になります。

  • ターゲットグループを作成する
  • ALBを作成する
  • ALBを紐付けたECSサービスを作成する

順番に見ていきます。

ターゲットグループを作成する

ALB関連の設定はコンソールのEC2の画面から行います。

サイドメニューにある「ロードバランシング」の「ターゲットグループ」をクリックします。

「Create target group」をクリックし、以下のように設定してターゲットグループを作成します。

  • ターゲットタイプで「IP address」を選択する
  • 任意のグループネームを入力する
  • VPCを選択する

作成に成功すると以下のようになっていると思います。

alb

ALBを作成する

サイドメニューにある「ロードバランシング」の「ロードバランサー」をクリックします。

「Create load balancer」をクリックし、「Application Load Balancer」の「Create」をクリックします。

以下のように設定してALBを作成します。

  • Load balancer nameに任意の名前を入力する
  • VPCを選択する
  • Subnetにチェックを入れる
  • Security groupsを選択する
    • 事前にインバウンドルールにHTTPSを追加しておく
  • Listeners and routingを設定する
    • HTTPのDefault actionに先程作ったターゲットグループを選択する
    • HTTPSを追加し、HTTPと同様の設定にする
  • Secure listener settingsで先程作った証明書を選択する

Listeners and routingの設定では以下のようになっているはずです。

ALBを紐付けたECSサービスを作成する

ALBに紐付けたECSサービスを作成します。

クラスターのサービスタブから「作成」をクリックし、以前の設定と同様に入力していきます。

「ロードバランシング」の項目で、「Application Load Balancer」を選択します。

「ロードバランサー用のコンテナのロードバランサーに追加」をクリックし、ターゲットグループ名で作成したターゲットグループを選択します。

AutoScalingは設定せずに、サービスを作成します。

タスクが立ち上がると、ALBのDNS名でアクセスできるようになっているはずです。

ALBに独自ドメインを紐付ける

ALBへのドメインの紐付けはRoute53で行います。

Route53のホストゾーンから、作成したホストゾーン名をクリックします。

レコードを作成をクリックします。

エイリアスをONにし、以下のように選択します。

  • Application Load BalancerとClassic Load Balancerへのエイリアス
  • ap-northeast-1
  • 作成したALBのDNS名

レコードを作成をクリックします。これで、ドメイン名でアクセスできるようになっているはずです。

ECSタスクで機密データを扱う

ECSタスクで機密データを扱うには以下の手順が必要になります。

  • System Managerのパラメータストアに機密データを登録する
  • タスク実行ロールにパラメータストアへのアクセス権限を付与する
  • タスク定義でコンテナの環境変数に機密データを埋め込む

順番に見ていきます。

機密データの登録

機密データの登録はSystem Managerで行います。

サイドメニューの「アプリケーション管理」の「パラメータストア」をクリックします。

パラメータの作成をクリックし、以下のように設定してパラメータを作成します。

  • 名前と値を入力する
  • タイプで「安全な文字列」を選択する

IAMロールの修正

ECSのタスクからパラメータストアにアクセスするには、タスク実行ロールに権限を追加する必要があります。

以前作成した「ecsTaskExecutionRole」に「ssm:GetParameters」の権限を付与します。

タスク定義の修正

ECSのタスク定義を修正します。

コンテナ定義のコンテナ名をクリックます。

環境変数の項目を以下のように設定します。

  • Keyに環境変数名を入力する
  • ValueFromを選択する
  • 値にパラメータストアのパラメータ名を入力する(ARNでなくて良い)

オートスケーリング

オートスケーリングの設定は、ECSのサービスの設定から行う事ができます。

Service AutoScalingの項目で、サービスの必要数を調整するを選択します。

タスクの最小数、必要数、最大数、AutoScaling用のIAMロールを選択します。

スケーリングポリシーを以下のように設定します。

  • 任意のポリシー名を入力する
  • ESCサービスメトリクスを選択する
  • ターゲット値、スケールイン/アウトのクールダウン期間を入力する

なお、ESCサービスメトリクスでは「平均CPU使用率」、「平均メモリ使用率」、「ALBのリクエスト回数」が選択できます。

GitHub Actionsでデプロイする

GitHub ActionsでECSにデプロイする方法を紹介します。

GitHub Actionsでデプロイするには、デプロイ対象のリポジトリにActionの定義とECSのタスク定義を追加する必要があります。

Actionの定義

こちらにActionのYAMLのサンプルがあります。

基本的にはこの通りで大丈夫ですが「aws-actions/amazon-ecs-deploy-task-definition」については、サンプルのバージョンには不具合があるようで、デプロイに失敗しました。そこで、バージョンを「v1」にしたところデプロイに成功しました。

タスク定義

プロジェクトルートの「./aws/task-definition.json」にECSから取得したタスク定義を配置しました。

注意点としては、ECSから取得したJSONをそのまま使用したのではなく、

値がnullのものはキーごと削除しました。

さいごに

駆け足でしたが、Webアプリケーションのインフラ構築からデプロイまでは、これでひととり試すことができのではないかと思います。

おすすめ書籍

AWSコンテナ設計・構築[本格]入門 AWSの基本・仕組み・重要用語が全部わかる教科書 (見るだけ図解) AWSで実現するモダンアプリケーション入門 〜サーバーレス、コンテナ、マイクロサービスで何ができるのか

blog-page_footer_336




blog-page_footer_336




-Server
-

執筆者:

免責事項

このブログは、記事上部に記載のある投稿日時点の一般的な情報を提供するものであり、投資等の勧誘・法的・税務上の助言を提供するものではありません。仮想通貨の投資・損益計算は複雑であり、個々の取引状況や法律の変更によって異なる可能性があります。ブログに記載された情報は参考程度のものであり、特定の状況に基づいた行動の決定には専門家の助言を求めることをお勧めします。当ブログの情報に基づいた行動に関連して生じた損失やリスクについて、筆者は責任を負いかねます。最新の法律や税務情報を確認し、必要に応じて専門家に相談することをお勧めします。


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


関連記事

aws

AWSのT3インスタンスの特徴

1 はじめに2 T3インスタンスとは2.1 T3インスタンスのスペック2.2 Unlimited Modeがデフォルトで有効2.3 ハイパーバイザはNitro3 T2インスタンスとの比較3.1 仮想C ...

単体のORMライブラリとしてEloquentを使う

1 はじめに2 Eloquentとは3 導入3.1 Composerインストール3.2 Eloquentインストール4 DB接続4.1 illuminate/database4.2 モデルクラス作成4 ...

InnoDBでauto_incrementの値が戻る?

はじめに 花粉症が辛い季節になりました。 花粉症も困りますが、本日はMySQL関連で困って調べたことをまとめたいと思います。 タイトルですが、InnoDBだとDBを再起動した際にauto_increm ...

DockerでRuby2.5、Rails5.2betaの環境をつくる【Compose file v3】

1 はじめに2 Dockerのインストール3 ファイルの準備3.1 Gemfile3.2 Gemfile.lock3.3 Dockerfile3.3.1 Ruby(Rails)3.3.2 MySQL3 ...

Conohaのサーバーを借りて、CentOS+MySQL+nginxの環境を作ってみた。

1 はじめに1.1 環境2 Conohaでサーバーをレンタル3 サーバーの初期設定3.1 サーバーにrootユーザーでログイン3.2 ユーザー作成3.3 SSHログインを許可3.4 秘密鍵を生成3.5 ...

フォロー

blog-page_side_responsive

2023年1月
1234567
891011121314
15161718192021
22232425262728
293031  

アプリ情報

私たちは無料アプリもリリースしています、ぜひご覧ください。 下記のアイコンから無料でダウンロードできます。