【IaC】Amazon EC2の起動時にUserdataでMySQL処理を行う方法

AWS

2023.8.29

Topics

はじめに

こんにちは。新入社員の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

失敗パターン

  1. 行を分けてしまったパターン
    user_data = EOF
        mysql -h RDSのエンドポイント -u user -p
        password
        create database test;
    EOF
    

    ▲ EC2のコンソール画面では、passwordを行を分けても接続が可能です。
    しかし、IaCでは行を分けてしまうと、実行できないので気を付けてください。

    
    
  2. -p オプションの後に空白スペースを入れたパターン
    user_data = EOF
        mysql -h RDSのエンドポイント -u user -p password
    EOF
    

    -u の後は -u user のように、空白スペースが入ります。
    しかし、-p オプションの後は -p passwordのように空白スペースを入れてはいけません。
    ▼ のように必ず -p オプションの後は空白スペースがないようにしてください。

        -u user -ppassword
    
  3. -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に関するお役立ち情報を配信中!

kisaragi

2024 Japan AWS Jr. Champions

2023年度新卒入社。出身は韓国です。

Recommends

こちらもおすすめ

Special Topics

注目記事はこちら