【IaC】Amazon EC2の起動時にUserdataでMySQL処理を行う方法
はじめに
こんにちは。新入社員のkisaragiです。
この記事ではIaCでMySQL処理を行う方法について話します。今回はTerraformを題材とします。
そして、初心者として失敗したパターンも紹介していきます。
環境・前提
- OS : Amazon linux 2
- Terraform ( v1.5.2 )
- RDS for MySQL ( v8.0.32 )
▼ Amazon Linux2はそのままだとmysqlコマンドが使えないので、インストールする必要があります。
本記事では下記のコードは省略しますが、今後扱うMySQL処理のコード内にも必ず入力してください。
user_data = EOF #!/bin/bash yum -y update yum -y install mysql EOF
UserdataでMySQL処理を行う方法
▼ UserdataでMySQL処理を行うサンプルコードです。
user_data = EOF mysql -h RDSのエンドポイント -u user -ppassword -e "create database test;" EOF
UserdataでMySQL処理を実行するには「MySQLへの接続と -e コマンドを一緒に使う必要があります。」
💡 -e (–execute) オプション
- コマンドラインから直接SQL処理を行うコマンド
▼ 複数のクエリ処理も可能です。
user_data = EOF mysql -h RDSのエンドポイント -u user -ppassword -e "create database test;create database test2;" EOF
▼ 行を分けたい時は、下記のように書きます。
( データベースへのアクセスが多くなるため、推奨しません。)
user_data = EOF mysql -h RDSのエンドポイント -u user -ppassword -e "create database test;" mysql -h RDSのエンドポイント -u user -ppassword -e "create database test2;" EOF
失敗パターン
- 行を分けてしまったパターン
user_data = EOF mysql -h RDSのエンドポイント -u user -p password create database test; EOF
▲ EC2のコンソール画面では、passwordを行を分けても接続が可能です。
しかし、IaCでは行を分けてしまうと、実行できないので気を付けてください。 - -p オプションの後に空白スペースを入れたパターン
user_data = EOF mysql -h RDSのエンドポイント -u user -p password EOF
-u の後は -u user のように、空白スペースが入ります。
しかし、-p オプションの後は -p passwordのように空白スペースを入れてはいけません。
▼ のように必ず -p オプションの後は空白スペースがないようにしてください。-u user -ppassword
- -e オプションを使わなかったパターン
user_data = EOF mysql -h RDSのエンドポイント -u user -ppassword "create database test;" EOF
-e オプションを使わないと、クエリを処理できません。
Userdataでクエリを処理したい時は必ず -e オプションを使ってください。
最後に
今回はEC2起動時にUserdataでMySQL処理を行う方法について学びました。
ログを見ても原因がわかりづらいので、解決が難しいエラーだと思います。
この記事で、UserdataでのMySQL処理で困っている皆さんに役に立ったら嬉しいです。
以上、「kisaragi」がお送りしました。
テックブログ新着情報のほか、AWSやGoogle Cloudに関するお役立ち情報を配信中!
Follow @twitter2024 Japan AWS Jr. Champions
2023年度新卒入社。出身は韓国です。
Recommends
こちらもおすすめ
Special Topics
注目記事はこちら
データ分析入門
これから始めるBigQuery基礎知識
2024.02.28
AWSの料金が 10 %割引になる!
『AWSの請求代行リセールサービス』
2024.07.16