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 LambdaとAPI GatewayでサーバレスなAPIを実装

1 はじめに2 AWS Lambdaとは2.1 利用できる言語2.2 Lambdaの制約3 LambdaでAPIをリリースするためにやること4 Lambda関数の作成4.1 関数の作成4.2 ランタイ ...

aws

Amazon Linux 2でLet’s Encryptが使えない

1 はじめに2 Amazon Linux 22.1 Amazon Linux Extras Library3 Let’s Encrypt4 本題5 さいごに はじめに 知人からタイトルのよ ...

同じレコードがないときだけインサートする!

はじめに あるアイテムを持っていない人だけ、別のアイテムをあげたい! もしくはその逆で、あるアイテムを持っている人に追加でアイテムをあげたい! そういうことってないでしょうか? 先日、僕がそのような状 ...

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

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

aws

LocalStackのLambdaをホットリロードさせる

1 はじめに2 全体の流れ2.1 コードの変更を検知する2.2 ファイルをビルドしてdeployする3 ホットリロードを実現する3.1 deployスクリプトを作成する3.2 Watchmanのラッパ ...

フォロー

blog-page_side_responsive

2023年1月
1234567
891011121314
15161718192021
22232425262728
293031  

アプリ情報

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