Amazon Linux2 の GUI 環境を使いたい時に使えるようにしたかったので CloudFormation テンプレートを作成しました。
使いたい時にスタックを作成して、要らなくなったらスタックを消せます。
手順
MATE デスクトップインストール済みの AMI を探す
aws コマンドを使ってMATE デスクトップ環境を搭載した Amazon Linux 2 の AMI を探します。
$ aws ec2 describe-images --filters "Name=name,Values=amzn2*MATE*" --query "Images[*].[ImageId,Name,Description]"
[
[
"ami-0d5142f63c808d143",
"amzn2-x86_64-MATEDE_DOTNET-2022.08.31",
".NET Core 6, Mono 6.12, PowerShell 7, and MATE DE pre-installed to run your .NET applications on Amazon Linux 2 with Long Term Support (LTS)."
],
[
"ami-04add97d411ac0fd2",
"amzn2-x86_64-MATEDE_DOTNET-2021.08.11",
".NET Core 5.0, Mono 6.12, PowerShell 7.1, and MATE DE pre-installed to run your .NET applications on Amazon Linux 2 with Long Term Support (LTS)."
],
[
"ami-08a57716fdc951021",
"amzn2-x86_64-MATEDE_DOTNET-2021.11.17",
".NET 6, Mono 6.12, PowerShell 7.2, and MATE DE pre-installed to run your .NET applications on Amazon Linux 2 with Long Term Support (LTS)."
],
[
"ami-0cc49fbe09280147c",
"amzn2-x86_64-MATEDE_DOTNET-2022.03.07",
".NET Core 6.0, Mono 6.12, PowerShell 7.1, and MATE DE pre-installed to run your .NET applications on Amazon Linux 2 with Long Term Support (LTS)."
]
]
CloudFormation テンプレートを作成する
以下のような CloudFormation テンプレートを作成します。
ポイントは以下です。
- KeyName で EC2 のキーペアを指定します。
- ImageId に先ほど検索した AMI を指定します。
- 文字化けしないように iBus と GoogleFont をインストールし、iBus の設定をします。
- ロケールの設定を変更します。
- 指定した IP アドレスからのみ SSH 接続と RDP 接続出来るようにします。
- EC2 のサブネットとセキュリティグループの VPC は適宜指定してください。
AWSTemplateFormatVersion: 2010-09-09
Parameters:
SystemName:
Type: String
Default: default
Description: Sub system name.
Region:
Type: String
Default: ap-northeast-1
Description: Region.
IPAddress:
Type: String
Description: IP address.
KeyName:
Type: String
Default: default-key
Description: Key name.
Resources:
EC2:
Type: AWS::EC2::Instance
Properties:
ImageId: ami-0d5142f63c808d143
KeyName: !Ref KeyName
InstanceType: t2.micro
NetworkInterfaces:
- AssociatePublicIpAddress: "true"
DeviceIndex: "0"
SubnetId: "your_subnet"
GroupSet:
- !Ref EC2SecurityGroup
UserData: !Base64 |
#!/bin/bash
sudo yum update -y
sudo yum install -y ibus-kkc google-noto-sans-japanese-fonts
echo "export GTK_IM_MODULE=ibus" >> ~/.bashrc
echo "export XMODIFIERS=@im=ibus" >> ~/.bashrc
echo "export QT_IM_MODULE=ibus" >> ~/.bashrc
echo "ibus-daemon -drx" >> ~/.bashrc
sudo localectl set-locale LANG=ja_JP.UTF-8
sudo reboot
Tags:
- Key: Name
Value: !Sub "${SystemName}-amazon-linux2"
EC2SecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
GroupName: !Sub "${SystemName}-ec2-sg"
GroupDescription: Allow SSH and HTTP access only input IP address.
VpcId: "your_vpc"
SecurityGroupIngress:
# ssh
- IpProtocol: tcp
FromPort: 22
ToPort: 22
CidrIp: !Ref IPAddress
# rdp
- IpProtocol: tcp
FromPort: 3389
ToPort: 3389
CidrIp: !Ref IPAddress
CloudFormation スタック作成
以下コマンドを実行し、スタックを起動します。
# xxx.xxx.xxx.xxx に EC2 に接続する元のグローバル IP アドレスを指定してください
$ aws cloudformation deploy --stack-name amazon-linux-gui-ec2 --template-file amazon-linux2-gui-ec2.template.yml --parameter-overrides SystemName=default Region=ap-northeast-1 IPAddress=xxx.xxx.xxx.xxx/32 KeyName=default-key
すると EC2 が 1 台起動します。
EC2 グローバル IP アドレス確認
EC2 > インスタンスからパブリック Ipv4 アドレスを確認します。
ec2-user のパスワード設定
SSH で EC2 に接続し ec2-user のパスワードを設定します。
# yyy.yyy.yyy.yyy に EC2 のパブリック Ipv4 アドレスを指定してください
$ ssh -i "your_private_key.pem" ec2-user@yyy.yyy.yyy.yyy
$ sudo passwd ec2-user
ユーザー ec2-user のパスワードを変更。
新しいパスワード:
新しいパスワードを再入力してください:
passwd: すべての認証トークンが正しく更新できました。
RDP で EC2 に接続する
調べた IP アドレスに対して RDP で接続します。
ユーザー名は ec2-user でパスワードは先ほど設定したパスワードを入力します。
以上で RDP で GUI 環境が整った EC2 に接続できます。
EC2 を削除する
CloudFormation スタックを削除すれば EC2 が削除されます。
コマンドで消す場合は以下です。
$ aws cloudformation delete-stack --stack-name amazon-linux-gui-ec2