[アップデート] SQL Serverインストール済みのRed Hat Enterprise Linux EC2が提供されました

2021.07.30

しばたです。

先週のはなしですがAWSからSQL ServerがプリインストールされたRed Hat Enterprise Linux(以後RHEL)のAMIが提供されEC2で利用可能となりました。

AWSからのアナウンスは以下。

これまではWindows ServerおよびAmazon Linux、UbuntuでSQL Serverインストール済みのAMIが提供されており、今回これにRHELが追加される形になりました。
SQL Server自体はOSによる価格差は無いため純粋にWindowsからRHELへの移行が想定されるユースケースなのかなと予想します。
なんとなくエンタープライズな香りがしますね...

対象リージョンおよびバージョン

対象リージョンは特に明記されていなかったのですが全リージョンで利用可能の様です。
提供されるOSとSQL Serverの組み合わせはFAQによると、

  • RHEL 7 with SQL Server 2019 Express
  • RHEL 7 with SQL Server 2019 Web
  • RHEL 7 with SQL Server 2019 Standard
  • RHEL 7 with SQL Server 2019 Enterprise
  • RHEL 7 with HA and SQL Server 2019 Standard
  • RHEL 7 with HA and SQL Server 2019 Enterprise
  • RHEL 8 with SQL Server 2019 Express
  • RHEL 8 with SQL Server 2019 Web
  • RHEL 8 with SQL Server 2019 Standard
  • RHEL 8 with SQL Server 2019 Enterprise
  • RHEL 8 with HA and SQL Server 2019 Standard
  • RHEL 8 with HA and SQL Server 2019 Enterprise
  • RHEL 7 with SQL Server 2017 Express
  • RHEL 7 with SQL Server 2017 Web
  • RHEL 7 with SQL Server 2017 Standard
  • RHEL 7 with SQL Server 2017 Enterprise
  • RHEL 7 with HA and SQL Server 2017 Standard
  • RHEL 7 with HA and SQL Server 2017 Enterprise
  • RHEL 8 with SQL Server 2017 Express
  • RHEL 8 with SQL Server 2017 Web
  • RHEL 8 with SQL Server 2017 Standard
  • RHEL 8 with SQL Server 2017 Enterprise
  • RHEL 8 with HA and SQL Server 2017 Standard
  • RHEL 8 with HA and SQL Server 2017 Enterprise

とされています。

試しに本日時点の東京リージョンでAMIを検索してみると以下の様な結果となり、確かにRHEL 8.4,7.9、SQL Server 2019,2017の組み合わせで存在していました。
OSのマイナーバージョンに関しては今後上がっていくものと予想されます。

# AWS Tools for PowerShellを使い東京リージョンでAMI検索
PS > Get-EC2Image -Owner amazon -Filter @{ Name = 'name'; Values = '*RHEL*SQL*'} -Region ap-northeast-1 |
         Sort-Object Name -Descending | Select-Object ImageId, Name, Description

ImageId               Name                                              Description
-------               ----                                              -----------
ami-036ba643b78335db8 RHEL_HA_8.4-x86_64-SQL_2019_Standard-2021.07.14   RHEL 8.4 with High Availibility and SQL Server 2019 Sta…
ami-03f6ff4337e05126a RHEL_HA_8.4-x86_64-SQL_2019_Enterprise-2021.07.14 RHEL 8.4 with High Availibility and SQL Server 2019 Ent…
ami-0d0257220678159d3 RHEL_HA_8.4-x86_64-SQL_2017_Standard-2021.07.14   RHEL 8.4 with High Availibility and SQL Server 2017 Sta…
ami-03ece104dbf311cd2 RHEL_HA_8.4-x86_64-SQL_2017_Enterprise-2021.07.14 RHEL 8.4 with High Availibility and SQL Server 2017 Ent…
ami-04a5d845f2157df4e RHEL_HA_7.9-x86_64-SQL_2019_Standard-2021.07.14   RHEL 7.9 with High Availibility and SQL Server 2019 Sta…
ami-0294f6cf8b83f49a6 RHEL_HA_7.9-x86_64-SQL_2019_Enterprise-2021.07.14 RHEL 7.9 with High Availibility and SQL Server 2019 Ent…
ami-0e96a2559f185d768 RHEL_HA_7.9-x86_64-SQL_2017_Standard-2021.07.14   RHEL 7.9 with High Availibility and SQL Server 2017 Sta…
ami-0f5a5581790a0a70e RHEL_HA_7.9-x86_64-SQL_2017_Enterprise-2021.07.14 RHEL 7.9 with High Availibility and SQL Server 2017 Ent…
ami-08d9355aeabf30123 RHEL_8.4-x86_64-SQL_2019_Web-2021.07.14           RHEL 8.4 with SQL Server 2019 Web Edition AMI provided …
ami-099bc586238c15697 RHEL_8.4-x86_64-SQL_2019_Standard-2021.07.14      RHEL 8.4 with SQL Server 2019 Standard Edition AMI prov…
ami-0c232d8f7b7b7b8af RHEL_8.4-x86_64-SQL_2019_Express-2021.07.14       RHEL 8.4 with SQL Server 2019 Express Edition AMI provi…
ami-06661a8d12255af80 RHEL_8.4-x86_64-SQL_2019_Enterprise-2021.07.14    RHEL 8.4 with SQL Server 2019 Enterprise Edition AMI pr…
ami-0d6844017e313c5e6 RHEL_8.4-x86_64-SQL_2017_Web-2021.07.14           RHEL 8.4 with SQL Server 2017 Web Edition AMI provided …
ami-0e7c9910ae73140ac RHEL_8.4-x86_64-SQL_2017_Standard-2021.07.14      RHEL 8.4 with SQL Server 2017 Standard Edition AMI prov…
ami-0469adaa703604a11 RHEL_8.4-x86_64-SQL_2017_Express-2021.07.14       RHEL 8.4 with SQL Server 2017 Express Edition AMI provi…
ami-00a2f2a71a8e04587 RHEL_8.4-x86_64-SQL_2017_Enterprise-2021.07.14    RHEL 8.4 with SQL Server 2017 Enterprise Edition AMI pr…
ami-04ad91339f13464c4 RHEL_7.9-x86_64-SQL_2019_Web-2021.07.14           RHEL 7.9 with SQL Server 2019 Web Edition AMI provided …
ami-0b30a3301d1f11f86 RHEL_7.9-x86_64-SQL_2019_Standard-2021.07.14      RHEL 7.9 with SQL Server 2019 Standard Edition AMI prov…
ami-07c9f225cb38d1bcb RHEL_7.9-x86_64-SQL_2019_Express-2021.07.14       RHEL 7.9 with SQL Server 2019 Express Edition AMI provi…
ami-0bfc38541bd02759b RHEL_7.9-x86_64-SQL_2019_Enterprise-2021.07.14    RHEL 7.9 with SQL Server 2019 Enterprise Edition AMI pr…
ami-0052bcd7c53cf5e37 RHEL_7.9-x86_64-SQL_2017_Web-2021.07.14           RHEL 7.9 with SQL Server 2017 Web Edition AMI provided …
ami-08d327b67704f5035 RHEL_7.9-x86_64-SQL_2017_Standard-2021.07.14      RHEL 7.9 with SQL Server 2017 Standard Edition AMI prov…
ami-067f44cf1c89f37ab RHEL_7.9-x86_64-SQL_2017_Express-2021.07.14       RHEL 7.9 with SQL Server 2017 Express Edition AMI provi…
ami-07e421bb85e4dc860 RHEL_7.9-x86_64-SQL_2017_Enterprise-2021.07.14    RHEL 7.9 with SQL Server 2017 Enterprise Edition AMI pr…

利用費

利用費に関しては料金ページを参照してください。

最初に述べた通りSQL Serverの料金はOSに依存しないため、シンプルにRHELの利用料金+SQL Serverの利用料金が上乗せされた金額になっているはずです。
一例として本日時点の東京リージョン、m5.xlarge(4vCPU, 16GiBメモリ)での時間単価を以下に転記しておきます。

OS SQL Server無し +Web Edition +Standard Edition +Enterprise Edition
Linux 0.248 USD 0.316 USD 0.728 USD 1.748 USD
RHEL 0.308 USD 0.376 USD 0.788 USD 1.808 USD
RHEL HA 0.343 USD - (選択不可) 0.823 USD 1.843 USD
Windows 0.432 USD 0.50 USD 0.912 USD 1.932 USD

(2021年7月30日時点、東京リージョン、m5.xlargeインスタンスの単価)

きっちりOSの利用費ぶんスライドしてることが見て取れます。
(Windows OSって結構高いんだなぁ...というのもわかりますね)

なお、SQL Server Expressについては以前お伝えした通り無料エディションのため利用費はSQL Serverの入っていないOSで見積もってください。

AMIの請求情報 (Usage operation)

まだドキュメントは更新されていなかったのですがAMIの情報を調べるとSQL Server入りのRHEL(およびRHEL HA)は個別の使用操作(Usage operation)が割り当てられていました。

従来からある

プラットフォーム 使用操作
Red Hat Enterprise Linux RunInstances:0010
Red Hat Enterprise Linux with HA RunInstances:1010

に加え、

プラットフォーム 使用操作
RHEL with SQL Server Enterprise RunInstances:0110
RHEL with SQL Server Standard RunInstances:0014
RHEL with SQL Server Web RunInstances:0210
RHEL HA with SQL Server Enterprise RunInstances:1110
RHEL HA with SQL Server Standard RunInstances:1014

が増えていました。

試してみた

最後に軽く触ってみます。
今回は東京リージョンにある既存のVPC環境にRHEL 8.4 + SQL Server 2019 Standard Edition (ami-099bc586238c15697)のインスタンスを作成します。

EC2の作成方法自体は特別なことはないため割愛します。
AWS Tools for PowerShellで以下の様な感じで作成し、作成後SSM用のIAMロールをアタッチしてます。

# EC2インスタンスを作成
$params = @{
    KeyName = '<your-keypair-name>'   # EC2 Keypair
    ImageId = 'ami-099bc586238c15697' # RHEL_8.4-x86_64-SQL_2019_Standard-2021.07.14
    InstanceType = 'm5a.large'        
    MinCount = 1
    MaxCount = 1
    SubnetId = (Get-EC2Subnet -Filter @{Name = 'tag:Name'; Values = '<your-subnet-name>'}).SubnetId
    SecurityGroupId = (Get-EC2SecurityGroup -Filter @{Name = 'group-name'; Values = '<your-security-group-name>'}).GroupId
    BlockDeviceMapping = @(
        # Windowsとは異なりEBSの容量が少なくても怒られない
        [Amazon.EC2.Model.BlockDeviceMapping]@{
            DeviceName = '/dev/sda1'
            Ebs = @{
                VolumeType = 'gp3'
                VolumeSize = 10
                DeleteOnTermination = $true
            }
        }
    )
    TagSpecification = @{
        ResourceType = 'Instance';
        Tags         = @( @{Key = 'Name'; value = 'rhel84-sqlserver-std'});
    }
    # RHELにはSSM Agentが初期インストールされていないのでインストールしておく
    EncodeUserData = $true
    UserData = 
@'
#!/bin/bash
REGION_NAME=$(curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone | sed -e 's/.$//')
dnf install -y "https://s3.${REGION_NAME}.amazonaws.com/amazon-ssm-${REGION_NAME}/latest/linux_amd64/amazon-ssm-agent.rpm"
systemctl enable amazon-ssm-agent
systemctl start amazon-ssm-agent
'@
}
New-EC2Instance @params

# インスタンス作成後SSM用のIAMロールをアタッチ
Get-EC2Instance -Filter @{Name = 'tag:Name'; Values = 'rhel84-sqlserver-std'} -Select Reservations.Instances |
    ForEach-Object {
        Register-EC2IamInstanceProfile -InstanceId $_.InstanceId -IamInstanceProfile_Name '<your IAM role name>'
    }

作成したインスタンスの情報はこんな感じです。

プラットフォームが「Red Hat Enterprise Linux with SQL Server Standard」でありその他の項目は特に変わりありませんね。

SSM Agentをインストール済みですのでSSM Sessionで接続してOS情報を確認するとこんな感じです。

# OS情報
$ cat /etc/os-release
NAME="Red Hat Enterprise Linux"
VERSION="8.4 (Ootpa)"
ID="rhel"
ID_LIKE="fedora"
VERSION_ID="8.4"
PLATFORM_ID="platform:el8"
PRETTY_NAME="Red Hat Enterprise Linux 8.4 (Ootpa)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:redhat:enterprise_linux:8.4:GA"
HOME_URL="https://www.redhat.com/"
DOCUMENTATION_URL="https://access.redhat.com/documentation/red_hat_enterprise_linux/8/"
BUG_REPORT_URL="https://bugzilla.redhat.com/"

REDHAT_BUGZILLA_PRODUCT="Red Hat Enterprise Linux 8"
REDHAT_BUGZILLA_PRODUCT_VERSION=8.4
REDHAT_SUPPORT_PRODUCT="Red Hat Enterprise Linux"
REDHAT_SUPPORT_PRODUCT_VERSION="8.4"

# SQL Server のサービス状態
$ systemctl status mssql-server
● mssql-server.service - Microsoft SQL Server Database Engine
   Loaded: loaded (/usr/lib/systemd/system/mssql-server.service; enabled; vendor preset: disabled)
   Active: active (running) since Fri 2021-07-30 02:40:42 UTC; 1min 59s ago
     Docs: https://docs.microsoft.com/en-us/sql/linux
 Main PID: 802 (sqlservr)
    Tasks: 1
   Memory: 1023.2M
   CGroup: /system.slice/mssql-server.service
           └─802 /opt/mssql/bin/sqlservr

この様に既にインストール済みのSQL Serverが動いてますのでいったん停止してsaユーザーのパスワードを再設定してやります。

sudo systemctl stop mssql-server
sudo /opt/mssql/bin/mssql-conf set-sa-password

パスワードの再設定は画面の指示に従うだけです。

$ sudo /opt/mssql/bin/mssql-conf set-sa-password
Enter the SQL Server system administrator password: ********
Confirm the SQL Server system administrator password: ********
Configuring SQL Server...

ForceFlush is enabled for this instance.
ForceFlush feature is enabled for log durability.
The system administrator password has been changed.
Please run 'sudo systemctl start mssql-server' to start SQL Server.

パスワード再設定後はSQL Serverを再起動しておきます。

sudo systemctl start mssql-server

別途接続用のWindows EC2を用意しSSMSからsaユーザーで接続してやるとこんな感じです。

細かい話は割愛しますが、SQL Serverのバイナリは/opt/mssql/に、データは/var/opt/mssql/にある感じです。
あとはムッシュの記事が参考になりますのでこちらをご覧ください。

サーバーの設定変更についてはUbuntuでの例ですがAWSブログの以下の記事も役に立つと思います。

終わりに

以上となります。

私はあまり耳にすることは無かったのですが、AWSやRed HatがSQL Server for Linux入りのAMIを提供する以上需要はそれなりにあるのかもしれません。
Windows ServerからRHELへの移行のひとつとして本記事の内容が役に立てば幸いです。