[1章] AWSへのデプロイ自動化と、CDK for Terraformでの管理

takahiko tominaga
nextbeat-engineering
9 min readApr 26, 2021

目次

  1. はじめに
  2. 概要
  3. おわりに

1. はじめに

こんにちは、ネクストビートの富永です。
前回から連続して、AWS関連の内容となります。

今回もPlay Framework(Scala)で作成したアプリケーションをAWSにデプロイしていくためのブログです。
※前回のAWSブログの続きではありません。

本ブログは、作成する構成の説明を行う章であり、実際に環境を構築してくのは、次の2章からとなります。

今回ブログで、説明する構成を作成しようと思った理由は特にありません。強いて言うなら面白そうだったからです。
全ての原動力は、探・求・心なのです!!!

1.1 想定読者

ブログを読むに当たって、以下のような経験があると理解がしやすいと思います。
また、想定読者も以下を行ったことがある方達を対象としています。

  • AWSの構築を行ったことがある
  • AWS-CDKもしくは、TerraformでAWSの環境構築をしたことがある
  • Slackでボットなど、APIを使用したことがある
  • GitHub Actionsで何か処理を行ったことがある

上記の経験がある方達を対象として、ブログを執筆していきますが、経験のない方でも理解して構築ができるように、執筆しようと考えています。

また、AWSの環境を構築したことがない方に関しては、公式サイトやAWS環境構築のブログなどを見て、1度環境構築を行うことをおすすめします。

以下、筆者が前回執筆したブログのリンクを貼っておきますので、よろしければ参考にしてください。

1.2 章構成

  1. AWSデプロイの自動化と、CDK for Terraformでの管理 (本章)
  2. GitHub ActionsでDocker imagesを、AWS ECRへPUSHする
  3. AWS ECRへのPUSH内容を、Slackへ通知する
  4. CDK for Terraformで、AWS Fargateの環境構築 [前編・後編]
  5. SlackからAWS ECSを更新させる
  6. AWS ECSの更新内容を、Slackへ通知する

本ブログ執筆時点では、上記のような章構成で実装を進めて行こうと考えています。
※章構成や、内容に関しては変更となる場合があります。

2. 概要

全ての章を通して、ECS on FargateのAWS環境を構築し、webへの公開を行っていきます。
環境構築(web公開)後のアプリケーション内容の更新に関しては、Slackと連携を行い自動化してきます。

AWSの構成は、CDK for Terraformを使用して構築していきます。
CDK for Terraformに関しては、HashiCorpが公開している下記のチュートリアルや、他の方が書いたブログなどを参考にしてください。

CDK for Terraform: Enabling Python & TypeScript Support

AWS CDKでプロバイダーとしてTerraformが使える!!CDK for Terraformが発表されました!!

※注意

今回使用するCDK for Terraformは、まだアルファテストステージなので、事業などで使用することは、おすすめしません。

2.1 実行環境

今回作成する構成の実行環境です。

各々の詳細の説明は、使用する際に行わせていただきます。
使用するバージョンと、ソースコードのリンクは予め貼っておきます。

Scala: v2.13.3

Play Framework: v2.7.*

sbt: v1.3.13

SBT Native Packager: v1.7.6

sbt-release: v1.0.13

sbt-ecr: v0.15.0

CDK for Terraform: v0.1.0

AWS SDK: v2.831.0

Slack web-api: v6.0.0

2.2 構成

今回作成を行う機能の構成になります。

簡単に説明すると以下のような手順で、AWSの更新を行っていきます。

  1. GitHubのmasterブランチへマージ
  2. GitHub Actionsで、Docker imagesの作成とECRへのPUSH
  3. ECRへのPUSH(SUCCESS)をEventBridgeで検知
  4. EventBridgeでSNSをトリガーとし、Lambdaを起動
  5. Lambdaで、PUSHされたECRの情報をSlackへ送信
  6. Slackで、デプロイボタン(ECRの内容をECSへ更新させるかのボタン)を押す
  7. API Gateway経由で、Lambdaを起動
  8. PUSHされたECRの内容を元に、タスク定義の作成及びサービスの更新
  9. サービスの更新内容を、Slackへ通知

構成図

4. おわりに

今回も複数回に分けての執筆となり、長くなってしまいますが、全部読んでいただけると嬉しいです。

筆者は、業務でインフラ環境を構築、運用をしたことがありません。
なので、間違った理解や構成、説明に至らない点が多々あるかとは思いますが、ご了承ください。

今回上記の構成を完成させての感想を、先に述べさせていただくと、CDK for Terraformなどでインフラを構築することで、権限周りやエラーログの確認、修正などの理解力を上げることができました。AWSコンソールでの構築だと、よくも悪くも自動で必要なものを作成してくれますからね。

AWSの環境構築は楽しいですが、構築をする際は、発生料金を確認するようにしておきましょう。
筆者は、毎月4000~7000円請求されていました…
CDK for Terraformなどで作成するとまとめて、削除・再構築することができるのでとても便利でした。(最初からコードで管理すればよかった…)

さて、今回は構成の説明だけとなってしまいましたが、次からは実際に環境構築を行っていきます。なるべく早く公開できるように頑張ります。
それでは、次の2章でお会いしましょう。

We are hiring!

株式会社ネクストビートでは

「人口減少社会において必要とされるインターネット事業を創造し、ニッポンを元気にする。」
を理念に掲げ一緒に働く仲間を募集しております。

https://www.nextbeat.co.jp/recruit

--

--