EC2 Image Builderを使ってWordPressを構築してみた

こんにちは。hacknoteのr.katoです。

以前、概要の紹介をしたので、 今回はEC2 Image Builderを使って途中までWordpressの環境構築をしてみたので、その方法の紹介をしていきます。

Componentの作成

まずはEC2 Image Builderの環境構築の指示書となるComponentを作ります。
今回作るComponentは次の5つです。

  • yumのアップデート
  • Apacheのインストール
  • MySQLのインストール
  • PHPのインストール
  • WordPressのダウンロード

ちなみに、Componentはyamlで記述されるのですが、そこに出てくるactionで何がサポートされているかは、ここ(公式ドキュメント)に書いてあります。

また、今回使用するOSはAmazonLinux2です。

Component作成へアクセス

AWSコンソールのサービスの中からEC2 Image Builderを探し、アクセスします。
その後、左側のリストからComponentにアクセスします。

そして、Create Componentをクリックします。

yumのアップデート

今回はLinuxなのでOSはLinuxを、
名前は任意のものを、今回はyum-update、
バージョンは0.0.1とします。

そして、Contentは次の様にします。

そして、Create Componentをクリックすれば完成です。

Apacheのインストール

yumのupdateと基本的には同じです。
名前はinstall-Apacheとしました。
Contentは次の様になっています。

参考元 [re:Invent 2019] EC2 Image Builder でコンポーネントを作成してみた #reinvent

MySQLのインストール

名前はinstall-mysqlとしました。
Contentsは次のとおりです。

MySQLはAMIからサーバー構築後にログインして設定するものがいくつかあるので、メモとして、/rootの中に mysql_set というファイル名で手順を残しました。

PHPのインストール

install-php-amazonという名前にしました。
amazon-linux-extrasを使ったインストールが楽なので次の様にしています。

WordPressのダウンロード

install-wpという名前にしました。
yaml形式のため、:(コロン)を使うとハッシュになってしまいます。
そのため、最終行の:(コロン)を””で囲ってエスケープしています。

Image pipelinesの作成

Image pipelinesにアクセスして作成します。

Create Image pipelinesをクリックすると次のような画面(step1)になります。

今回はLinuxを選択し、Brows ImagesからAmazon提供のAMI(AmazonLinux2)を選択します。

ちなみに、このAmazon Ownedをクリックして自分を選べが自分が作成したAMIを使うこともできます。

そして、Build componentsもBrows Componentを選択し、AmazonではなくCreate by meをクリックします。

すると、先程作成したComponentが出てくるので、全て選びます。

そして、ステップ2のConfigure pipelineに進みます。

名前は任意のものをつけてください。

IAMロールは EC2InstanceProfileForImageBuilder というポリシーとSSMの実行とS3書き込みの権限の持ったポリシーを持ったものを作成して、Pipelineに付与してください。

インスタンスタイプは設定しないと、問答無用でm5.largeにされるので注意してください。

SNSはエラーログを見るのに必要なので、設定することを勧めます。
S3は任意です。もし使わないのであれば、IAMの方にもS3の書き込み権限はいらないかと思います。

VPCはネットの繋がるものにしてください。そうしないと、エラーでAMIが作られずに終了します。

Troubleshooting settingsは任意です。自分はキーペアとS3の設定をしました。

そして、step3に進みます。

step3は任意の設定をしてください。
特に迷うことはないかと思います。

そして、step4で問題ないか確認し、Create Pipelineをクリックしてください。

これでPipelineの設定は完了です。

Pipelineの実行

作成したPipelineを選択し、Actionsの中のrun pipelineをクリックします。

すると、次の様な流れでAMIの作成が行われます。

うまくいけば、Pipeline処理の途中(インスタンスの停止あたり)でAMIが作成されます。

作成されたAMIを使って、インスタンスを作成し、 /root/mysql_set の通りにMySQLの設定をして上げれば後は、いつもどおりのwordpressの設定です。

WordPress側の指示に従えばインストールできると思います。

おわりに

今回は試しにWordpressの構築を行いましたが、railsだったり監視の設定だったりと色々な物の設定に使えると思います。
また、今回は特にtestのComponentは設定しませんでしたが、使用することで更に便利になるかと思います。

実際に使用してみてはいかがでしょうか?

ちなみに…

PipelineやComponentを削除するときは…

  1. Image pipelines
  2. Recipes
  3. Components

の順番で消していかないとエラーが出て消させてくれないです。
Pipelineを実行しようとしたときにComponentがない!?って事態を防ぐためのようです。