Perl Hackers Hub

第61回 GitHub ActionsとAmazon ECSを使ったDockerアプリケーションの自動デプロイ(1)

この記事を読むのに必要な時間:およそ 3 分

Amazon ECSへデプロイしよう

では,作成したPerlアプリケーションをECSにデプロイしましょう。ECSでは,アプリケーションはタスク定義を用いて定義します。

ECSにおけるタスク定義は,docker-composeにおけるdocker-compose.ymlに該当する概念です。タスク定義は,タスクがどのようなコンテナを持ち,どのようなDockerイメージを使うのか,メモリやCPUリソースをどの程度割り当てるのかなどを定義します。そのタスク定義をインスタンス化し,ECSの基盤上に動作させたものがタスクです。

以降では,ECSにタスクをデプロイする方法を解説します。

ecs-cliコマンドのインストール

タスクのECSへのデプロイは,今回はAWSが提供しているecs-cliコマンドを用いて行います。公式ドキュメントを参考に,ecs-cliコマンド注5をインストールしておいてください。

プロファイルの設定

次に,ecs-cliコマンドが使うプロファイルを設定し,AWSにアクセスできるようにします。

$ ecs-cli configure profile \
  --profile-name プロファイル名 \
  --access-key $AWS_ACCESS_KEY_ID \
  --secret-key $AWS_SECRET_ACCESS_KEY
INFO[0000] Saved ECS CLI profile configuration プロファイル名.
ECSクラスタの作成

ECSクラスタを事前に作成しましょう。既存のクラスタを使う場合は,この作業は不要です。

$ ecs-cli up --vpc VPCのID \
  --subnets サブネットID[,サブネットID...] \
  --launch-type FARGATE \
  --region ap-northeast-1 \
  --cluster クラスタ名

このクラスタをecs-cliコマンドのデフォルトとして使うことを指定します。

$ ecs-cli configure \
  --cluster クラスタ名 \
  --default-launch-type FARGATE \
  --region ap-northeast-1 \
  --config-name クラスタ設定に付ける名前
Amazon ECSタスク定義の作成

そして,ecs-cliコマンドがどのクラスタをコンテナの起動先に指定するのか,どの起動タイプを選ぶのかをまとめた設定を,ecs-params.ymlに記述します。

version: 1
task_definition:
  # ↓あらかじめ実行ロールを作成しておくこと
  task_execution_role: ecsTaskExecutionRole
  ecs_network_mode: awsvpc
  task_size:
    mem_limit: 0.5GB
    cpu_limit: 256
run_params:
  network_configuration:
    awsvpc_configuration:
      subnets:
        - "subnet-xxxxxx"
      security_groups:
        - "sg-xxxxxxxxxxxx"
      assign_public_ip: ENABLED

これで,ECSにタスクをデプロイし,パブリックIPアドレスを経由してアクセスする準備が整いました。

いざデプロイ

次のコマンドを実行すると,PerlアプリケーションがECSクラスタにデプロイされます。

$ ecs-cli compose \
  -f docker-compose-ecs.yml \
  --project-name サービスに付ける名前 service up \
  --create-log-groups \
  --cluster-config クラスタ設定名 \
  --ecs-profile プロファイル名

コンテナが動作しているかを確認しましょう。

$ ecs-cli compose \
  --project-name サービスに付けた名前 service ps \
  --cluster-config クラスタ設定名 \
  --ecs-profile プロファイル名
Name      State    Ports  TaskDefinition  Health
..../app  RUNNING  xxx.yyy.zzz.aaa:80->80/tcp  app:1  UNKNOWN

公開IPアドレスが表示されていればアプリケーションはECS上で動作しています。

$ curl http://xxx.yyy.zzz.aaa/
Hello, Plack!
注5)
執筆時点で最新のecs-cli 1.18.1を使用しています。

<続きの(2)こちら。>

WEB+DB PRESS

本誌最新号をチェック!
WEB+DB PRESS Vol.123

2021年6月24日発売
B5判/168ページ
定価1,628円
(本体1,480円+税10%)
ISBN978-4-297-12207-2

  • 特集1
    ついに登場!!! より速く,より安全に,より効率的に
    HTTP/3入門
  • 特集2
    Reactベースの柔軟・省設定フレームワーク
    いまどきNext.js
  • 特集3
    脆弱性への緊急対応の手立て
    実践WAF

著者プロフィール

野口啓介(のぐちけいすけ)

大学在学中に『はてなサマーインターン』に参加し,卒業後の2016年に株式会社はてなに入社。型のパワフルさを活かした開発が得意。

入社後はScalaによる『はてなブックマーク』のリプレイスメントプロジェクトや,『はてなブログ』の開発に参加。

アプリケーションエンジニアとしてバックエンド部分を主に担当しつつも,趣味で運用している自宅サーバで培ったインフラ寄りの知識でチームをサポートしている。

2018年8月より同社のマンガビューワの開発に携わっている。

GitHub:windymelt
Twitter:@windymelt
Hatena:id:Windymelt