AWSの「コンテナ化のためのリアーキテクチャ」を体験しといた

コンテナというかDockerの勉強をしようと思って例のごとく2~3年してないままです。

ちょこちょこDockerの概念とかコマンドは勉強しているものの、 dockerfileを書いたり、開発っぽいことをしたりはできていないです。

今回は、このあとDockerというかコンテナを勉強するにあたって、 何をしようかというのがわかった気がする動画と記事(ワークショップ)があったので紹介しておきます。

動画

動画の簡単な概要としては、

コンテナ化を進める順序としては、

  • 既存アプリケーションの調査
    • 動いているアプリケーションの実行環境、どんなプロセスが動いているかを調査する
    • データベース、ログの出力先など何に繋がっているかを調査する
    • 使われているミドルウェアを調査する
  • コンテナにするためのリファクタリング
    • 無理にはおこなわない、まずは動く状態にする
    • ただし、コンテナにする上での注意箇所は変更する(コンテナが停止するとコンテナ内で持っていたファイルは消えてしまう)
    • The Twelve-Factor Appをもとに考えていくとうまくいく
  • コンテナイメージの作成

記事(ワークショップ)

コンテナ化のためのリアーキテクチャ(Re-Architecture for Containers)

書いてある手順通り実施していけば、苦労することなく体験することができました。 簡単な流れとしては、

  • 開発環境(Cloud9)の作成
  • レガシーアプリケーション(コンテナ化する対象のアプリ)の構築・デプロイ
  • コンテナ化の段階的な実施

となっていました。

面白かったのは、レガシーアプリケーションのデプロイにおいて設定ファイルをちまちま変更し、ビルドのコマンドをたたき、Tomcatディレクトリに置くということを実施したことです。
スクリプトにしたとしても面倒ですし、開発者に開発環境を用意してもらうのもかなり面倒だと体感できました。

コンテナ化の指針としては、上の動画と同じくThe Twelve-Factor Appを使っていました。
実際の開発でもこれを参考にコンテナ化したあとの理想像、どこからリアーキテクチャしていくのかを決めていくのかな、と考えました。

The Twelve-Factor App を参考にアプリケーションをリファクタリングしてコンテナ化したり、そのアプリケーションを Amazon Elastic Container Service (Amazon ECS) の環境にデプロイしたりする体験を通して、コンテナ化に必要な知識や作業を一通り学ぶことができます。

ちょっと詰まったところ

RDS、キャッシュクラスタの作成に少し時間がかかる

10分強かかりました。

Cloud9のディスクサイズの追加

コマンドを叩くと以下のようにメッセージが表示されますが、すぐに使うことができました。

Cloud9のディスクサイズの追加

手順にも説明があるので困ることは少ないと思います。

なお、以下の手順により Cloud9 で使用している EC2 マシンが再起動されるため、1、2分ほど IDE に接続できなくなります。ワークショップの進行に支障はありません。

Cloud9のプレビュー機能でのアプリへのアクセス

レガシーアプリケーションをローカルマシンでの動かしてみる場面があります。

Cloud9のプレビュー機能を使っていて、コマンドを実行するとターミナルにパーセンテージが表示されます。 100%になったらアクセスできると思って待ちましたが一向に77%から変わらず、アクセスしてみたところ画面が表示されました(ターミナルの表示が以下のような状態)。

プレビュー機能でのアプリへのアクセス

このパーセンテージが100%にはならないのだと思います。

レガシーアプリケーションの本番環境構築でのSSHログイン

レガシーアプリケーションの本番環境を構築し、SSHでログインする操作があります。

そのさいに、以下のスクショのようにターミナルにAre you sure you want to continue connecting (yes/no)?と聞かれることがあります。ここにはきちんとyesと回答しましょう。適当にエンターキーを押してもアクセスできません。 アクセスできるとAmazon Linuxにログインしたときのメッセージが表示されます。

レガシーアプリケーションの本番環境構築でのSSHログイン

CDKは何をしているのか?

CDKを使った経験がなく、操作手順に促されるままコマンドを叩いていました。

簡単に調べてみたところ、

  • cdk bootstrap:「CDK が使⽤する IAM ロール、S3 バケット、ECR リポジトリなどを作成」するためのコマンド。アカウント、リージョンで1回だけ実施すればよい。
    • ワークショップではCDKToolkitというスタックできました。このスタックにはS3、IAMロール。ポリシーなどが含まれていました。
  • cdk deploy:アプリのデプロイ(CloudFormationテンプレートの合成、CloudFormationスタックの作成)をおこなうためのコマンド。
    • ワークショップではDocrdrAppStackというスタックできました。

引用元:AWS Cloud Development Kit (CDK) Basic#1 | AWS Black Belt Online Seminar

AWS Copilot CLIはAIとは関係ない

ワークショップにおいてコンテナのデプロイにはAWS Copilot CLIを利用しました。 Copilotと見て勝手にGitHub Copilotのことを連想していましたが、当然のごとく全くの無関係です。

AWS Copilot CLI は、 AWS 上でプロダクションレディなコンテナのデプロイや運用を実現するためのコマンドラインツールです。シンプルな操作でコンテナを AWS Fargate へデプロイできます。

おわりに

今回のブログは他の人のためになるような情報は非常に薄いです。 コンテナ、CDKをどういった方向で勉強するか、勉強したあとに活かすのかをイメージできたので、そのことの覚書という感じです。

ひとまず、The Twelve-Factor Appは読んでおきます。

参考