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


関連記事

WordPressとRailsアプリケーションを相乗りさせた時の話

1 はじめに1.1 前提条件2 サブドメインを設定する3 Nginxの設定3.1 ステージング環境用の設定3.2 ステージング環境の設定を読み込ませる3.3 Nginxの再起動4 SSL化する4.1 ...

aws

Amazon ECSでGoのEchoサーバを立ち上げる

1 はじめに2 全体の流れ3 サービスの概要3.1 IAM(Identity and Access Management)3.2 VPC(Virtual Private Cloud)3.3 ECR(E ...

CentOS6のLAMP環境でTLS1.2対応

1 はじめに2 業界団体レベルでのTLS1.2移行3 構成4 ssl.confを編集する5 ジェネレータ任せでOK6 設定変更の影響7 さいごに はじめに ものすごくひさしぶりにLAMP環境のSSL設 ...

icon

ブログ運営で最も気をつけること(障害報告)

1 お詫び2 障害報告書2.1 障害内容2.2 障害期間2.3 障害の原因2.4 障害の長期化の原因2.5 詳細3 対応3.1 決済に使用するクレジットカードを変更する3.2 一つ前のOSバージョンで ...

DockerでRails + Vue.jsの環境を作ってみる

1 はじめに1.1 前回までのあらすじ1.2 今回の趣旨1.3 環境2 MySQLのUTF-8対応3 Node.jsをRubyコンテナに組み込む4 Webpackerを使用してVue.jsをインストー ...

フォロー

blog-page_side_responsive

2023年1月
1234567
891011121314
15161718192021
22232425262728
293031  

アプリ情報

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