コラム

AWS CDKを使用してLightsail構築(作成時にMySqlインストール)

今回は、AWSリソースのInfrastructure as Code(IaC)を実現するSDKであるAWS Cloud Development Kit (CDK)を使用して、Lightsailインスタンスを作成してみました。

環境

AWS CDK 2.76.0

設定一覧

  • Lightsailインスタンス作成
  • Lightsailインスタンスにmysqlサーバインストール・起動
  • 固定IP取得
  • 固定IPにLightsailインスタンスをアタッチ

CDKソースコード

import * as cdk from 'aws-cdk-lib';
import * as lightsail from 'aws-cdk-lib/aws-lightsail';
import { Construct } from 'constructs';

export class CreateLightSailInstance extends cdk.Stack {
  
  //作成時に実行するスクリプトを指定(ここでMySqlをインストール)
	const userData = `#!/bin/bash
sudo amazon-linux-extras install epel
sudo yum remove -y mariadb-*
sudo yum localinstall -y https://dev.mysql.com/get/mysql80-community-release-el7-5.noarch.rpm
sudo yum install -y --enablerepo=mysql80-community mysql-community-server
sudo systemctl start mysqld`;

  //Lightsailインスタンスを作成
	const instance = new lightsail.CfnInstance(this, 'Instance-1', {
		availabilityZone:'ap-northeast-1a', //アベイラビリティゾーン
		instanceName: 'Instance-1', //インスタンス名
		blueprintId: 'amazon_linux_2', //OSの種類(Wordpressを使用する場合はここにwordpressと指定)
		bundleId: 'micro_2_0', //CPU,メモリ、ストレージを定義するプリセット
		userData: userData, //インスタンス作成時に実行されるスクリプト指定
	});

   // 固定IP設定
	const cfnStaticIp = new lightsail.CfnStaticIp(this, 'StaticIp-1', {
 		staticIpName: 'StaticIp-1', //固定IP名
		attachedTo: instance.instanceName //アタッチするインスタンス指定
	});
}

その他の設定について

テーブル作成・マスタデータインポート

マシンのセットアップをより楽にするために、例えばDBにテーブル作成、データインポートがCDKを使用して出来れば良いなと思ったので、方法を考えてみました。

Aws System Managerの使用

一つはAws System Manager(以降smm)を使用する方法です。
CDKにはsshでアクセスする機能がないので他の手段を使用する必要があります。
それがsmmからLigthsailインスタンスにアクセスしSQLファイル、インポートファイル転送、コマンド実行する方法です。この方法はLightsailを手軽に使用したい人には少し問題があります。
ssmでLightsailを使用するには次の手順を踏む必要があります。

  1. Lightsailインスタンスへのssmエージェントインストール
  2. ハイブリッドアクティベーション作成
  3. 2からIDとコードを取得し、Lightsailインスタンスで登録コマンド実行
  4. ssmをアドバンスドモードに設定

以上の工程が必要になります。すべてをCDKで出来るのかはやってないので不明ですが、出来たとしてもアドバンスモードにすると課金が必要になるのでコストを下げたい時には問題になりますね。

・S3の使用

もう1つはS3にファイルを転送し、LightsailインスタンスからS3からSQLファイル、インポートファイルを取得し、コマンド実行する方法です。
これには次の手順が必要です。

  1. S3にファイルを転送
  2. Lightsailインスタンス作成時のuserDataに次のスクリプトを記述
    1. AWS CLIインストールコマンド
    2. S3からファイル取得コマンド
    3. SQLファイル実行・データインポート実行コマンド

以上の工程が必要になります。AWS CLIのインストールが必要ですし、S3使用に課金が必要になるので、コストを下げたい時には問題になります。

との理由でSQL実行等のセットアップはLightsailの場合はCDKでやらないほうが良いかもと思っています。

ドメイン設定

ドメイン設定は画面上では、AWS外から取得したドメインを設定するための機能「DNS Zone」があるのですが、CDKではそれを使用するクラスが用意されてないように思われます。
Route53を使用しての設定は出来るみたいですが、課金が必要になりますのでコストを下げたい方は画面上での設定又は、Lightsailインスタンス上からAWS CLIを使用して設定する必要があります。

以上、Lightsailインスタンスの設定をCDKで行うコード、問題点を上げてみました。
問題点がある手法についても今後、CDKだけで何処まで出来るのか検証してみたいと思います。


続けてお読みください

システム開発というお仕事

この記事をシェアする
  • Facebookアイコン
  • Twitterアイコン
  • LINEアイコン

お問い合わせ ITに関するお悩み不安が少しでもありましたら、
ぜひお気軽にお問い合わせください

お客様のお悩みや不安、課題などを丁寧に、そして誠実にお伺いいたします。

お問い合わせはこちら
お電話でのお問い合わせ 03-5820-1777(平日10:00〜18:00)
よくあるご質問