OCI上のAmpareサーバにDockerを動かしてMinecraftがまだ動いています。
詳細は以下。
Minecraftの最新のバージョンは1.19.81。
OCIのAmpareインスタンス(4OCPU/メモリ24GB)でMinecraft統合版サーバを動かす
やっぱりマイクラというよりクラウド楽しい
高スペックのサーバではあるけど、やはりaarch64でx86アーキテクチャをエミュレートしているので
複雑な装置を作ったり、Mobをたくさん表示させるともっさりする。
それはさておき、近々AWSに移行しようかと思い、
MinecraftのデータをS3にアップロードしてみた。
単純にS3へアップロードするだけなら誰でも簡単にできるので、
AWSのジャンプアカウントを使ってスイッチロール→S3へアップロード(sync)という感じで。
ジャンプアカウントを使う理由としては、
S3へアップロードする際にAWS CLIを実行する必要があり、
そのCLIを使うのにIAMアクセスキーとシークレットアクセスキーは発行する。
それらのキーが漏洩したら危ない、ので
スイッチロールしかできないIAMユーザーでアクセスすれば
万が一キーが漏洩しても被害が最小限に抑えられる、ということ。
イメージは以下。
access keyにはジャンプアカウントでスイッチロールの権限しか付与されておらず、
そのスイッチロール先を明示的に指定しないと本来のAWSリソースにアクセスができない。
まぁー、aws configureで設定したconfigも一緒に漏れたら意味がないけどwwwwwww
ジャンプアカウントでの作業
まずスイッチロールのみが実施可能となるIAMポリシーを作成する。
ポリシー名は任意w
JSON形式では以下になる。
”Rerource”をさらに限定しておけばさらに安心。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Statement1", "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "*" } ] }
このポリシーのみをアタッチするようなIAMユーザーを作成する。
コンソールも使うかどうかは任意。
今回は"oci-user01"というIAMユーザーを作った。
コンソールも使うようにすると、"IAMUserChangePassword"ポリシーも自動で付与される。
作成したIAMユーザーのアクセスキーを作成し、どこかにメモしておく。
S3用AWSアカウントでの作業
次にS3を格納するAWSアカウントで作業。
まずはデータを格納するバケットを作成。
フォルダも作っておくとベスト。
既存のバケットに"minecraft"っていうフォルダを作りますた。
S3アクセス用のロールを作成する。
ジャンプアカウントでスイッチ先のロールのことね。
ロール作成時の注意点としては、信頼されたエンティティタイプで"AWSアカウント"を指定しておき、
アカウントIDはジャンプアカウントのIDを入力すること。
付与する許可ポリシーは"AmazonS3FullAccess"にした。(手抜きw)
特定のバケットのみ限定するのであれば、ポリシーを新規で作ればOK。
OCIサーバでの作業
最後の作業。
ファイルをアップロードするサーバにて、AWS CLIをインストール。
インストール手順は公式サイトを参照。
awsコマンドが実行できるようになったら、
aws configureを実行して、ジャンプアカウントで発行したアクセスキー/シークレットアクセスキーを設定。
次にCLIでスイッチロールの設定を追加。
これもやり方は公式サイトに手順が載っている。
具体的には、.aws/configファイルを開いて、以下を追記。
[profile "プロファイル名"] role_arn = arn:aws:iam::"S3のAWSアカウントID":role/s3-minecraft-access source_profile = default
これでAWS CLIでスイッチロールが可能となった。
試しに「aws s3 ls --profile "プロファイル名"」でバケットの一覧が表示されればOK。
※バケット一覧を持っているポリシーがあればの話だけど・・・。
最後にaws s3 syncコマンドを実行。
--exact-timestampsオプションでタイムスタンプ比較を有効にし、
--excludeオプションで不要なファイルを除外する。
コマンドの具体例として以下。
スイッチロールのプロファイル名:minecraft
送信元:/docker/minecraftbe
除外フォルダ:backupsとlogs
aws s3 sync --profile minecraft --exact-timestamps --exclude "backups/*" --exclude "logs/*" /docker/minecraftbe s3://"バケット名"/minecraft upload: ../../docker/minecraftbe/Dedicated_Server.txt to s3://hogehogehoge/minecraft/Dedicated_Server.txt (省略)
あとはこれをシェルスクリプトとしてcronで定期的に実行すればOK。
また、S3にもファイルがアップロードされていればOK。
スイッチロールの仕組みを理解すればそんなに難しくない
AWSの試験勉強をすればスイッチロールの仕組みを理解できるようになるはず。
本来はアクセスキーを使うのではなく、IAMロールを付与して
S3へアップロードを行うことができればいいんだけど、
AWS外からのアップロードに関してはどうしてもアクセスキーを使う必要になってしまう。
ベストプラクティスとしてはIAMroleAnywareもしくはIdentity Centerを使えばいいんだろうけど、
IAMroleAnywareはプライベート認証局が必要になってくるし、
Identity Centerでは定期的にログインが必要なので、どちらも手間w
今回は手っ取り早くアクセスキーを使うことにしたが、
安易にこういった方法で済ませようとするのはあまりよろしくない。
今度、IAMroleAnywareを使ってみようかなぁ。
S3にアップした後は
AWS上でどうやってサーバを動かすかなんだけど、
EC2なら定期的にS3からダウンロード、
ECSならEFSにマウントしてDatasyncでS3→EFSへ同期、
と色々やり方はある。
AWS上でMinecraftを動かすのならEC2がベタっぽいけど、
それだとあまり面白くないのでECSで動かしてみようかなー。
普段使わない時は停止しておけば費用発生しないし、データサイズも大したことないので
完全に0円では実行できないけど、少額で運用できそう。
もう少し落ち着いたらそのうち試してみようかな。
Minecraftで遊ぶことよりも、こんな感じでクラウドをいじる方が楽しいwwwwww
0 件のコメント:
コメントを投稿