プレスリリースやお知らせ、開発ブログ、会社の活動状況、Mattermost・aws・AI等の技術情報などを発信しています。

AWS CopilotでFocalboardをたててみる

こんにちはエンジニアの sakasai です。

今回はAmazon ECSを使うためのコマンドラインツールAWS Copilotを使ってFocalboardが実行できる環境を作ってみようと思います。


AWS Copilotとは

上述の通りAmazon ECSを使うためのコマンドラインツールです。

いくつかのコマンドを実行するだけでECS上で実行するコンテナアプリケーションのビルド、リリース、運用を実現することが出来ます。

App Runnerにも対応しています。

https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/AWS_Copilot.html

https://aws.amazon.com/jp/blogs/news/introducing-aws-copilot/

AWS Copilotについては下記のLiveDemoがわかりやすいと思います。自分も参考にさせていただきました。


Focalboardとは

こちらのブログでも何度か紹介させていただいてますが、チャットツールのMattermostが開発しているオープンソースのプロジェクト管理ツールです。

https://www.focalboard.com/

https://github.com/mattermost/focalboard

現在GAに向けて開発が行われています。

Mattermostのプラグインとしても開発されていますが、セルフホスト型のツールとしても開発されています。

Dockerイメージも公開されているのでローカル環境でちょっと試してみるなど気軽にできるかと思います。

https://hub.docker.com/r/mattermost/focalboard

今回はこちらを使ってAmazon ECSにデプロイしてみようと思います。


やってみる

それではさっそくやってみます。

今回使用しているDockerfileなどはGithubで公開していますので参照してください。

https://github.com/msakasai/Focalboard-on-Docker

AWS Copilotのインストールなどについては公式ドキュメント等を参照してください。

今回は下記バージョンで実行していきます。

% copilot --version                   
copilot version: v1.9.0

copilot app init

https://aws.github.io/copilot-cli/ja/docs/commands/app-init/

最初にアプリケーションを作成します。

コマンドはDockerfileがあるディレクトリで実行します。

% ls
Dockerfile              LICENSE                 README.md               copilot                 docker-compose.yml
% copilot app init

  What would you like to name your application? [? for help] focalboard-app

最初にアプリケーション名が聞かれるので今回は「focalboard-app」とつけました。

入力するとアプリケションの作成が行われます。

Application name: focalboard-app
✔ Created the infrastructure to manage services and jobs under application focalboard-app.. 

✔ The directory copilot will hold service manifests for application focalboard-app.

AWS Copilotを実行するとCloudFormationでAWS上にリソースが作成されます。

この時点ではアプリケーション用のロールがいくつか作成されています。

copilot env init

https://aws.github.io/copilot-cli/ja/docs/commands/env-init/

次にdevelopmentやstaging、productionなどの環境を作成します。

% copilot env init

  What is your environment's name? [? for help] development

最初に環境名が聞かれるので今回は「development」にしました。

  Which credentials would you like to use to create development?  [Use arrows to move, type to filter, ? for more help]
    Enter temporary credentials
  > [profile default]
    [profile test]

次に環境を作るAWSプロファイルが聞かれます。

ローカルにAWS Configureでセットアップしたプロファイルが複数ある場合はそこから選ぶことが出来ます。

  Would you like to use the default configuration for a new environment?
    - A new VPC with 2 AZs, 2 public subnets and 2 private subnets
    - A new ECS Cluster
    - New IAM Roles to manage services and jobs in your environment
  [Use arrows to move, type to filter]
  > Yes, use default.
    Yes, but I'd like configure the default resources (CIDR ranges).
    No, I'd like to import existing resources (VPC, subnets).

次にVPCやサブネットなどのネットワーク周りの作成について聞かれます。

デフォルトを選択すると作成する環境用に新たにVPCなどが作られます。今回はデフォルトを選択して新たに作りました。

選択後にリソースの作成が行われます。

✔ Proposing infrastructure changes for the focalboard-app-development environment. 
- Creating the infrastructure for the focalboard-app-development environment.  [create complete]  [88.7s]
  - An IAM Role for AWS CloudFormation to manage resources                     [create complete]  [24.6s]
  - An ECS cluster to group your services                                      [create complete]  [10.3s]
  - Enable long ARN formats for the authenticated AWS principal                [create complete]  [3.0s]
  - An IAM Role to describe resources in your environment                      [create complete]  [24.4s]
  - A security group to allow your containers to talk to each other            [create complete]  [5.6s]
  - An Internet Gateway to connect to the public internet                      [create complete]  [17.8s]
  - Private subnet 1 for resources with no internet access                     [create complete]  [16.7s]
  - Private subnet 2 for resources with no internet access                     [create complete]  [16.7s]
  - Public subnet 1 for resources that can access the internet                 [create complete]  [16.7s]
  - Public subnet 2 for resources that can access the internet                 [create complete]  [16.7s]
  - A Virtual Private Cloud to control networking of your AWS resources        [create complete]  [17.8s]
✔ Created environment development in region ap-northeast-1 under application focalboard-app.

完了するとAWS上でも実際に作成されていることが確認できました。(下記画像以外のリソースも作られています)

copilot svc init

https://aws.github.io/copilot-cli/ja/docs/commands/svc-init/

環境ができたらサービスを作っていきます。

まずはinitコマンドを実行します。

% copilot svc init
Note: It's best to run this command in the root of your workspace.

  Which service type best represents your service's architecture?  [Use arrows to move, type to filter, ? for more help]
    Request-Driven Web Service  (App Runner)
  > Load Balanced Web Service   (Internet to ECS on Fargate)
    Backend Service             (ECS on Fargate)

最初にサービスの種類を聞かれます。今回はApp RunnerではなくFargateで実行するサービスでかつロードバランサーからトラフィックを受け取るアプリケーションをデプロイするので「Load Balanced Web Service」を選択します。

  What do you want to name this Load Balanced Web Service? [? for help] focalboard-frontend

次にサービスの名前が聞かれます。今回は「focalboard-frontend」という名前にしました。

  Which Dockerfile would you like to use for focalboard-frontend?  [Use arrows to move, type to filter, ? for more help]
  > ./Dockerfile
    Enter custom path for your Dockerfile
    Use an existing image instead

次に使用するDockerfileを聞かれるのでローカルのファイルパスをそのまま選択します。

Service type: Load Balanced Web Service
Service name: focalboard-frontend
Dockerfile: ./Dockerfile
Note: Architecture type arm64 is currently unsupported. Setting platform linux/amd64 instead.\nSee 'platform' field in your manifest.\n
✔ Wrote the manifest for service focalboard-frontend at copilot/focalboard-frontend/manifest.yml
Your manifest contains configurations like your container size and port (:8000).

✔ Created ECR repositories for service focalboard-frontend.. 

initが終わるとローカルにmanifest.ymlという設定ファイルが作成されます。

% ls copilot/focalboard-frontend 
manifest.yml

ここにサービスの設定などが記述されています。

今回は特に変更しませんが、この中身を書き換えることで各種設定の変更や追加をすることが出来ます。

https://aws.github.io/copilot-cli/ja/docs/manifest/lb-web-service/

copilot svc deploy

https://aws.github.io/copilot-cli/ja/docs/commands/svc-deploy/

initが終わったらサービスをデプロイします。

% copilot svc deploy
Only found one service, defaulting to: focalboard-frontend
Only found one environment, defaulting to: development
Environment development is already on the latest version v1.5.1, skip upgrade.
[+] Building 9.0s (6/6) FINISHED                                                                                                                                                 
...
Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them
Login Succeeded
Using default tag: latest
The push refers to repository
...
✔ Proposing infrastructure changes for stack focalboard-app-development-focalboard-frontend 
- Creating the infrastructure for stack focalboard-app-development-focalboard-frontend  [create complete]  [269.8s]
  - Service discovery for your services to communicate within the VPC                   [create complete]  [1.5s]
  - Update your environment's shared resources                                          [update complete]  [148.9s]
    - A security group for your load balancer allowing HTTP and HTTPS traffic           [create complete]  [6.6s]
    - An Application Load Balancer to distribute public traffic to your services        [create complete]  [121.0s]
  - An IAM Role for the Fargate agent to make AWS API calls on your behalf              [create complete]  [25.6s]
  - A CloudWatch log group to hold your service logs                                    [create complete]  [1.5s]
  - An ECS service to run and maintain your tasks in the environment cluster            [create complete]  [59.1s]
    Deployments                                                                                             
               Revision  Rollout      Desired  Running  Failed  Pending                                             
      PRIMARY  1         [completed]  1        1        0       0                                                   
  - A target group to connect the load balancer to your service                         [create complete]  [1.5s]
  - An ECS task definition to group your containers and run them on ECS                 [create complete]  [2.7s]
  - An IAM role to control permissions for the containers in your tasks                 [create complete]  [25.6s]
✔ Deployed focalboard-frontend, you can access it at http://xxxxxxxxxx.ap-northeast-1.elb.amazonaws.com.

ローカルでビルドが行われ、コンテナイメージのプッシュが実行されて、ECS上にタスク定義などが作成され、アプリケーションが実行されます。

正常に完了すると最後にアクセス可能なロードバランサーのURLが表示されます。

また、マネージメントコンソール上でもESCのサービスでタスクが実行されていることが確認できました。

Focalboardにアクセス

表示されたURLにアクセスします。

ログイン画面が表示されました。

初回アクセスなので下部のリンクからアカウントを作成してみます。

アカウントを作成するとFocalboardにログインして使用できる状態になりました。

左下のボードを追加するで試しにボードを追加してみます。

「Project Tasks」のテンプレートを選んでみました。

テンプレートとサンプルのデータがいくつか入った状態で作成されます。

テンプレートで用意されているビューに切り替えたり、新たにビューを追加したりすることも出来ます。

copilot app delete

https://aws.github.io/copilot-cli/ja/docs/commands/app-delete/

このコマンドを実行すると関連付けられたリソースをすべて削除することが出来ます。

% copilot app delete

  Are you sure you want to delete application focalboard-app? [? for help] (Y/n) y

実行するとすべて削除されます。

Are you sure you want to delete application focalboard-app? Yes
✔ Deleted service focalboard-frontend from environment development.. 
✔ Deleted resources of service focalboard-frontend from application focalboard-app.. 
✔ Deleted service focalboard-frontend from application focalboard-app.
✔ Deleted environment development from application focalboard-app.. 
✔ Cleaned up deployment resources.. 
✔ Deleted application resources.. 
✔ Deleted application configuration.. 
✔ Deleted local .workspace file.


まとめ

AWS CopilotでFocalboardを実行して使ってみました。

FocalboardはGAに向けて機能追加や改善が行われているので、いつか実際の業務でも使ってみたいと思っています。

  • B!

おすすめ記事リンク