CloudFormationでAmazon Linux2 GUI環境を構築する方法まとめ

AWS

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
タイトルとURLをコピーしました