创建2021年6月版本的强大Minecraft服务器(EC2 + S3)【AWS】

首先

Minecraftを遠隔の複数人で遊びたいとき、サーバーを立てることになる。
公式のRealmsも月額1000円ほどで用意されているが、MODを導入できないなど制約が多い。
AWSのEC2とS3を使ってデータを自動バックアップするMinecraftサーバーを立てる

示例代码↓

在AWS上搭建Minecraft服务器的好处。

    • 使うときだけ起動して、使っている間だけ課金される

 

    • 公式のRealmsよりも拡張性が高い(全て自分で管理できる)

 

    参加人数や導入MODに応じて、いつでもサーバーのスペックを変更できる

要做的事情

    • EC2インスタンスを新規作成して、Minecraftサーバーを自動起動する仕組みをつくる

 

    EC2起動時にデータをS3にバックアップする仕組みをつくる

前提

    • Minecraft Java Edition 1.17.0

 

    カスタムサーバーアプリケーションのspigotを使う

目录

    1. 创建新的S3存储桶以备份数据

 

    1. 创建IAM角色并分配给EC2

 

    1. 创建新的EC2实例

 

    1. 分配固定IP地址给EC2

 

    1. 安装Minecraft到EC2

 

    配置EC2启动时的处理程序

创建一个新的S3桶来备份数据。

uni-minecraft-artifact

在本页面上,使用上述名称新建一个S3 bucket。该桶用于备份Minecraft的数据。

要创建S3存储桶的方法请参考以下链接(参考步骤1-1)↓

创建用于EC2的IAM角色

ec2-minecraft-server-role

在本页面中,我们以上述名称创建一个新的IAM角色。

设置IAM角色的方法见下方链接(参考步骤2和6)↓

创建了名为S3MinecraftArtifactManagePolicy的策略,并将其附加到ec2-minecraft-server-role上。
被授予此角色的资源将能够读写uni-minecraft-artifact中的所有文件。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetObjectAcl",
        "s3:GetObject",
        "s3:ListBucket"
      ],
      "Resource": [
        "arn:aws:s3:::uni-minecraft-artifact/*",
        "arn:aws:s3:::uni-minecraft-artifact"
      ]
    }
  ]
}

3. EC2インスタンスを新規作成する

Screen Shot 2021-06-26 at 12.43.56.png
Screen Shot 2021-06-26 at 12.44.17.png
Screen Shot 2021-06-26 at 12.44.59.png
Screen Shot 2021-06-26 at 15.08.44.png
Screen Shot 2021-06-26 at 15.09.29.png
Screen Shot 2021-06-26 at 15.09.41.png
Screen Shot 2021-06-26 at 15.13.04.png
Screen Shot 2021-06-26 at 15.14.41.png
Screen Shot 2021-06-26 at 15.15.44.png
Screen Shot 2021-06-27 at 15.21.24.png

4. 给予静态IP地址

EC2在默认情况下,每次重启都会被分配一个不同的IP地址。
为了每次都能通过相同的IP地址访问,需要设置弹性IP。

Screen Shot 2021-06-27 at 15.21.24 copy.png
Screen Shot 2021-06-27 at 15.21.49.png
Screen Shot 2021-06-27 at 15.25.11.png
Screen Shot 2021-06-27 at 15.25.35.png

固定IPアドレスを反映するために、一旦EC2を再起動する。
Instance stateからStop→Startをクリックするか、もしくはRebootをクリックする。
※TerminateをクリックするとEC2が削除されるので注意。

Screen Shot 2021-06-27 at 16.30.09.png

在EC2上安装Minecraft。

ここからはsshでEC2内部に潜って作業する。
このとき、手順3の最後にダウンロードしておいた鍵(.pemファイル)のパスを指定する。

$ chmod 600 ~/.ssh/keys/uni-minecraft-server-key.pem
$ ssh ec2-user@46.51.230.42 -i ~/.ssh/keys/uni-minecraft-server-key.pem
# ssh ec2-user@${ElasticIP} -i ${手順3でダウンロードした.pemのファイルパス}

只要 SSH 正常工作,EC2 的标志就会如下所示。

       __|  __|_  )
       _|  (     /   Amazon Linux 2 AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-2/
[ec2-user@ip-172-31-16-27 ~]$ 

以下は、Minecraftのカスタムサーバーspigotを取得&ビルドするsetup.sh。

#!/bin/sh

rpm --import https://yum.corretto.aws/corretto.key 
curl -L -o /etc/yum.repos.d/corretto.repo https://yum.corretto.aws/corretto.repo
yum install -y java-16-amazon-corretto-devel

yum install -yt git

mkdir minecraft
cd minecraft

wget https://hub.spigotmc.org/jenkins/job/BuildTools/lastSuccessfulBuild/artifact/target/BuildTools.jar
java -jar BuildTools.jar --rev 1.17
find . | grep -v 'spigot-1.17.jar' | xargs rm -rf

java -Xmx2048M -Xms2048M -jar spigot-1.17.jar nogui

EC2の中でsetup.shをsudoで実行する(MinecraftのバージョンやURLは適宜書き換える)。
その後eula.txtの中身を手動でeula=trueに書き換えて、Minecraftサーバーを起動する。

# あらかじめEC2にsetup.shを配置しておく
[ec2-user@ip-172-31-16-27 ~]$ ls
setup.sh

# setup.shを実行する
[ec2-user@ip-172-31-16-27 ~]$ sudo sh setup.sh

# === shellの処理が実行される ===

# setup.shの実行結果を確認する
[ec2-user@ip-172-31-16-27 minecraft]$ ls
eula.txt  logs  server.properties  spigot-1.17.jar

# eula.txtの中身を、eula=trueに書き換える
[ec2-user@ip-172-31-16-27 minecraft]$ sudo vim eula.txt 

# Minecraftサーバーを起動する
[ec2-user@ip-172-31-16-27 minecraft]$ sudo java -Xmx2048M -Xms2048M -jar spigot-1.17.jar nogui
Screen Shot 2021-06-27 at 17.16.33.png
Screen Shot 2021-06-27 at 17.16.46.png

设定EC2启动时的处理

我已经能够成功登录到服务器了,但是目前的情况是每次重新启动EC2时都需要使用ssh手动运行服务器应用程序,非常麻烦。

为了解决这个问题,我需要设置userdata,并自动执行以下两个步骤的”launch.sh”脚本在EC2启动时运行。

1. セーブデータをzip化してS3にバックアップする
2. サーバーアプリケーションを実行する

请提前将以下的launch.sh文件放置在EC2的minecraft目录中。

#!/bin/sh
cd /home/ec2-user/minecraft

NOW=`date "+%Y%m%d"`
zip ${NOW}.zip -r world world_nether world_the_end/
aws s3 cp ${NOW}.zip s3://uni-minecraft-artifact/world_backup/world/ --storage-class ONEZONE_IA
rm -f ${NOW}.zip

java -Xmx2048M -Xms2048M -jar spigot-1.17.jar nogui

停止目标的EC2实例,并确认实例状态已更改为“已停止”,然后点击“Actions/Instance settings/Edit user data”。

Screen Shot 2021-06-27 at 17.31.10.png

本次设定的userdata如下所示。
通常情况下,userdata只会在首次启动时执行,但是如果从config中设置ALWAYS选项,则会在重新启动时执行。

Content-Type: multipart/mixed; boundary="//"
MIME-Version: 1.0

--//
Content-Type: text/cloud-config; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="cloud-config.txt"

#cloud-config
cloud_final_modules:
- [scripts-user, always]

--//
Content-Type: text/x-shellscript; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="userdata.txt"

#!/bin/bash
sudo sh /home/ec2-user/minecraft/launch.sh
--//
Screen Shot 2021-06-27 at 17.32.17.png

重新启动EC2并确认是否按预期工作,然后结束。

1. Minecraftサーバーが自動で実行されて、クライアントからログインできること
2. S3にデータがバックアップされること

请提供更多上下文,以便我可以准确理解你所要求的内容。

广告
将在 10 秒后关闭
bannerAds