どのように3未満の米国のためのAWS上でMinecraftサーバーを実行する
記事で使われる道具
AWS
私は、この大きい雲提供に関して私の知識を増やしたいので、AWSサービスだけに頼りたいです.あなたが知らない1つのサービスが常にあります!この特定の例では、次のサービスを使用します.
EC2 (クラウド内の仮想サーバ)
Lambda ( Serverless関数)
Simple Email Service (メール送受信サービス)
鉱夫
Minecraft 人気のサンドボックスのビデオゲームです.この場合、私はMinecraft Java版に集中します.なぜなら、サーバー・バージョンはLinuxサーバ上でうまく動作しており、私の息子はDebian上でラップトップを走らせています.
ソリューションのグローバルアーキテクチャ
サーバーを操作して最初の月、私は私の息子は、毎日それを使用している時間に2時間、それからサーバーが遊んでいた気づいた.それはEC 2上に構築されています
t2.small
8 GBのディスクで、私は約18 US $の毎月のコストを持っています.たくさんではなく、改善の余地があると思っていました!コストの主な部分はEC 2計算コスト(〜17 US $)であり、私はそれが時間の100 %を使用していないことを知っている.私の息子がそれを使用しているときだけ、世界的な考えはサーバーを始めることです、しかし、私は甘い解決を見つける必要があるように、彼は私のAWSコンソールにアクセスしません!以下に様々なブロックを使用します.
一緒に作りましょう
EC 2インスタンスのビルド
これは初期の部分です、新しいEC 2インスタンスを作成しなければなりません.EC 2ダッシュボードから
Launch Instance
そして、X 86オプションでアマゾンLinux 2 AMIを選んでください.次に、インスタンス型を選択する必要があります.私はあなたに
t2.small
Minecraft用.作成後に変更することができます.クリック
Next: Configure Instance Details
設定を続行するにはデフォルトの設定を維持し、ディスクのデフォルトサイズ(8 GB)として十分です.タグ画面では、一般的に
Name
( EC 2インスタンスリストに表示される)costcenter
(あとでコスト管理のために使う).セキュリティグループでは、EC 2のファイアウォールに相当し、どのポートがあなたのサーバ上でインターネットからアクセスできるかを設定する必要があります.以下の画面でssh portとminecraft port ( 25565 )を追加します.
次に、キーペアを選択または作成するインスタンスを開始します.これは必須ですし、リモートEC 2インスタンスに接続することができます.私のケースでは、既存のキーペアを使用していますが、新しいキーを作成する場合は、ラップトップ上の秘密キーファイルをダウンロードすることを忘れないでください.
はい私のキーカロリンという名前です.なぜ?
SSH経由でインスタンスを接続しなければなりませんguide あなたが助けを必要とするならば.基本的にこの種のコマンドを実行しなければなりません.
ssh -i my_private_key.pem ec2-user@public-ipv4
The public-ipv4
インスタンスリストで使用可能です.まずJavaが必要です.Minecraftの新しいビルド(1.17以降)はJava 17だけで動作しているので、Corretto(Amazon Java Version)を使うことを勧めます.
sudo rpm --import https://yum.corretto.aws/corretto.key
sudo curl -L -o /etc/yum.repos.d/corretto.repo https://yum.corretto.aws/corretto.repo
sudo yum install -y java-17-amazon-corretto-devel.x86_64
java --version
次のようなものが必要です.openjdk 17.0.1 2021-10-19 LTS
OpenJDK Runtime Environment Corretto-17.0.1.12.1 (build 17.0.1+12-LTS)
OpenJDK 64-Bit Server VM Corretto-17.0.1.12.1 (build 17.0.1+12-LTS, mixed mode, sharing)
このJava問題の研究に感謝します;専用のユーザが欲しいです.
sudo adduser minecraft
Minecraftをインストールするには、Minecraftサーバーページに依存できますhere .例えば、バージョン2.0の
1.17.1
次のコマンドを実行できます.sudo su
mkdir /opt/minecraft/
mkdir /opt/minecraft/server/
cd /opt/minecraft/server
wget https://launcher.mojang.com/v1/objects/a16d67e5807f57fc4e550299cf20226194497dc2/server.jar
sudo chown -R minecraft:minecraft /opt/minecraft/
⚠️ Warning regarding Java version:
It seems that starting with Minecraft 1.17, it require now a Java JRE 16 (instead of Java JRE 8).
This site is giving you links to download older Minecraft versions if needed.
Exception in thread "main" java.lang.UnsupportedClassVersionError: net/minecraft/server/Main has been compiled by a more recent version of the Java Runtime (class file version 60.0), this version of the Java Runtime only recognizes class file versions up to 52.0
私は少しのサービスを手動でサーバーを起動を避けるために作成している.私はサーバーを起動するとすぐにminecraftプロセスを開始したい.それをするために、私は下にファイルを作成しました
/etc/systemd/system/minecraft.service
次のコンテンツを使用します.[Unit]
Description=Minecraft Server
After=network.target
[Service]
User=minecraft
Nice=5
KillMode=none
SuccessExitStatus=0 1
InaccessibleDirectories=/root /sys /srv /media -/lost+found
NoNewPrivileges=true
WorkingDirectory=/opt/minecraft/server
ReadWriteDirectories=/opt/minecraft/server
ExecStart=/usr/bin/java -Xmx1024M -Xms1024M -jar server.jar nogui
ExecStop=/opt/minecraft/tools/mcrcon/mcrcon -H 127.0.0.1 -P 25575 -p strong-password stop
[Install]
WantedBy=multi-user.target
次に、次の手順に従って新しいサービスをお勧めします.chmod 664 /etc/systemd/system/minecraft.service
systemctl daemon-reload
システムの詳細についてhere .Now if you restart the EC2 instance a Minecraft server must be available! You can check ✅ this first step!
I am not speaking of the fact that the IPv4 is dynamic by default. I recommend to setup an static
Elastic IP
for this server (here!) in order to get a static IP.
ビルドスタートシナリオ
まず、ラムダ関数を作成しましょう.ラムダに入り
Create function
新しいものを作る.名前mc_start
を使用するNode.js 14.x
以上のランタイム.次に、このタイプのスクリーンを持たなければなりません.
内容を置き換える
index.js
以下のファイルを指定します.const AWS = require("aws-sdk");
var ec2 = new AWS.EC2();
exports.handler = async (event) => {
try {
var result;
var params = {
InstanceIds: [process.env.INSTANCE_ID],
};
var data = await ec2.startInstances(params).promise();
result = "instance started"
const response = {
statusCode: 200,
body: result,
};
return response;
} catch (error) {
console.error(error);
const response = {
statusCode: 500,
body: "error during script",
};
return response;
}
};
設定で次のように設定します.INSTANCE_ID
MinecraftサーバのインスタンスIDに対応する値を指定しますi-031fdf9c3bafd7a34
). 簡単な電子メールサービスでは、新しいルールを設定する時間です
Email Receiving
セクションクリック
Create rule
内部default-rule-set
. 電子メール受信機能は、今日3つの領域でのみ利用可能です注意してくださいus-east-1
, us-west-2
and eu-west-1
ソースhere ).SESがこの特定のアイデンティティに電子メールを受け取っているならば
ラムダ関数を呼び出します.
You must add the domain to the
Verified identities
to make this work. It's also necessary to publish an MX entry in order to declare SES as the email receiver for a specific domain or subdomain (more info here).
ビルドストップシナリオ
今回は8 h後にインスタンスを停止します.これは単純なラムダ関数です.
まず、ラムダ関数を作成しましょう.ラムダに入り
Create function
新しいものを作る.名前mc_shutdown
を使用するNode.js 14.x
以上のランタイム.内容を置き換える
index.js
以下のファイルを指定します.const AWS = require("aws-sdk");
var ec2 = new AWS.EC2();
exports.handler = async (event) => {
try {
var result;
var params = {
InstanceIds: [process.env.INSTANCE_ID],
};
var data = await ec2.describeInstances(params).promise();
var instance = data.Reservations[0].Instances[0];
if (instance.State.Name !== "stopped") {
var launch_time = new Date(instance.LaunchTime);
var today = new Date();
result = "instance running";
if ((today - launch_time) / 3600000 > process.env.MAX_HOURS) {
console.log("stopping the instance...");
var stop_data = await ec2.stopInstances(params).promise();
result = "instance stopped";
}
} else {
result = "instance not running";
}
const response = {
statusCode: 200,
body: result,
};
return response;
} catch (error) {
console.error(error);
const response = {
statusCode: 500,
body: "error during script",
};
return response;
}
};
設定で次のように設定します.INSTANCE_ID
MinecraftサーバのインスタンスIDに対応する値を指定しますi-031fdf9c3bafd7a34
). MAX_HOURS
起動後に許可された時間数に対応する値8
8時間).我々は、20分ごとにタスクを起動するトリガを追加します
Hurrayの設定が行われます!
結論
このセットアップはここでうまく動作しています、彼が彼が必要なとき、彼がインスタンスを始めるので、私の息子は幸せです.私は、このサービスの多くのコストを削減するので、私は幸せです.最後の3ヶ月間、私はこのサーバーのEC 2計算コストが1😅 (最適化の前に約17 US $)ので、95 %安い!
現在の設定は、手動では、コンソールで行われ、私はいくつかの時間を1日を変更するには、例えばCDK toolkit .
また、おそらく、おそらくMeBRATワールドのストレージを管理することは可能です.
それは非常に楽しいプロジェクトを複数のAWSサービスを使用して構築することでした!ラムダ関数を使用して動的ブートEC 2インスタンスの他の用途を参照してください.コメントで知らせてください!
Reference
この問題について(どのように3未満の米国のためのAWS上でMinecraftサーバーを実行する), 我々は、より多くの情報をここで見つけました https://dev.to/julbrs/how-to-run-a-minecraft-server-on-aws-for-less-than-3-us-a-month-409pテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol