GCPの無料枠サーバーを借りて、毎晩自分のスプラのデイリー戦績をツイートする仕組みを用意したい（鯖立てるまで）

# はじめに
こんにちは、イカした日々を送りたいタコです。

スプラトゥーン2のころはikaWidget2という神アプリにお世話になりっぱなしで、今日の成績はどうだっただのなんだのを毎日チェックしてはニヤニヤしたりしていました。

しかし、スプラトゥーン3用のアプリ、ikawidget3はまだ成績の記録機能のみの対応となっており、成績をチェックすることができません。
(開発者様のペースで開発していただければ大丈夫です・・！首を長くして楽しみに待っています)

こうなると、昨日の勝率どれくらいだったんだ？とかが気になって夜も眠れなかったので、頑張ってデータを出力できるようにしました。

# 利用したもの
* Windows10(ローカル)
* Google Cloud　VMインスタンス
* ubuntu(インスタンス)
* python
* s3s
* tweepy

# 参考にさせていただいたサイト
正直、こちらのサイトを見ていただいたほうがわかりやすいし早いかもしれないです。
皆さん大変助かりました、ありがとうございます。

[これから始めるGCP（GCE）　安全に無料枠を使い倒せ](https://qiita.com/Brutus/items/22dfd31a681b67837a74)
[【GCP】無料枠でGCEのVMインスタンス作成からSSH接続・ポート変更まで](https://mintaku-blog.net/gce-vminstance/)
[【Splatoon3】s3sを立てて戦績をstat.inkに自動アップする](https://zenn.dev/hibikine/articles/1febb4eb03b604)
[pythonでtwitter APIを取得する方法【全18枚の図解+例文あり】](https://python-man.club/python_twitter_api/)
[【Python】pythonでtweetしてみた](https://qiita.com/tamago_pinoko/items/221f5df4db06778bf83b)

# VMインスタンスの作成
### サーバの性能を決めるにあたって
今回やることは毎日1回程度バッチを走らせる程度の想定なので、お金をかけたくありませんでした。
(いずれikawidget3がアップデートされたら不要になるような機能なのでなおさら・・)

ということで、サーバは無料になるような設定にしています。
(おそらく)

GCPの無料枠というと、ざっくり下記の2つがあります。
・登録してから最初の三ヶ月だけ使える、$300相当のクレジット
・しょぼーい性能にすることで永年使えるよーってもの

今回は、一応3ヶ月目以降も運用することを考えて下のしょぼい性能の方にしました。

### GCPの無料枠について
永年無料で利用したい場合のサーバ設定は、下記の通りにする必要があります。(2022/12/05時点)
この設定内容は変わることもあるようなので、公式のものを参照するのが確実です。
[Google Cloud の無料プログラム - Compute Engine](https://cloud.google.com/free/docs/free-cloud-features?hl=ja#compute)

* 1 つの非プリエンプティブル e2-micro VM インスタンス（1 か月あたり）。次の米国リージョンのいずれかで利用できます。
　オレゴン: us-west1
　アイオワ: us-central1
　サウスカロライナ: us-east1
* 30 GB-月の標準永続ディスク
* 5 GB 月のスナップショット ストレージ。次のリージョンで利用できます。
　オレゴン: us-west1
　アイオワ: us-central1
　サウスカロライナ: us-east1
　台湾: asia-east1
　ベルギー: europe-west1
* 1 GB の北米から全リージョン宛ての下りネットワーク（1 か月あたり、中国とオーストラリアを除く）

とりあえずこんな感じで設定したら大丈夫・・なはず・・。
右に月額$7.1と表示されて震えが止まりませんでした。
大丈夫ですよね・・？

![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2603116/79519dc9-be91-51e6-d630-991020675d49.png)

![キャプチャ2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2603116/8b5d7333-ce72-5e47-81fd-99f32d656295.png)

OSは参考にさせていただいたサイトさんのものに則り、ubuntuとしました。
仕事でも少しだけ触ったことがあるような気がしなくもないので、ね。

# VMインスタンスへのSSH接続
### Windows→VMインスタンスのSSH接続
ssh-keygen コマンドを利用することで認証鍵を作成することができます。

##### ローカルのWindowsにて
コマンドプロンプトを起動し、使っているユーザの.sshディレクトリ配下に移動します。
```console
$ cd C:/Users/sampleUser/.ssh
```

-Cオプションでユーザ名を指定できます。
このユーザ名は、VMインスタンス側にアクセスする際のユーザ名なので、ローカルのWindowsにて使っているユーザ名と一致する必要はありません。
```console
$ C:/Users/sampleUser/.ssh> ssh-keygen -t rsa -f my-ssh-key -C test_user
Generating public/private rsa key pair.
```
コマンドを実行すると、パスワードを尋ねられるので設定しておきましょう。
```console
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in my-ssh-key.
Your public key has been saved in my-ssh-key.pub.
```
C:/Users/sampleUser/.sshフォルダ内に、my-ssh-key.pubファイルが生成されているはずなので、メモ帳などで開いて公開鍵をコピーします。

##### ブラウザにて
左上のハンバーガーメニュー → Compute Engine → メタデータ を開きます。
![キャプチャ3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2603116/84ebca3a-7140-3f54-5bc4-48682864f7d2.png)
SSH認証鍵タブに切り替えて、先程生成した公開鍵をそのまま追加してください。

「編集」→「+ 項目を追加」で新しく追加された入力フォームにそのまま貼り付けて、下の「保存」を押下で大丈夫です。

その後、VMインスタンスに設定されている外部IPアドレスをコピーしておいてください。

##### ローカルのWindowsにて
それではSSH接続をしてみます。
-iオプションを使うことで、デフォルトの秘密鍵ではなく先程生成した秘密鍵を指定しています。
```console
$ ssh test_user@外部IPアドレス -i ~/.ssh/my-ssh-key
```

途中パスワードの入力を求められるので、先程認証鍵生成時に設定したパスワードを入力してください。
```
Enter passphrase for key 'C:\Users\sample/.ssh/my-ssh-key':
```

これで接続ができると思います。

### ポート変更
デフォルトの状態だと、ポート22が開放されています。
しかし、この状態だといろんな悪い人がアクセスをかましてくるので危険なため、さっさとポートを変えたほうが良いそうな。

ということで変更します。

##### ブラウザにて
VMインスタンスのネットワークの詳細を表示します。
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2603116/9d37e2b3-df4a-9749-556d-448ba2ca59fd.png)
ファイアウォールの「vpc-firewall-rules」を開き、「default-allow-ssh」を編集します。

デフォルトではTCPのポート番号に「22」が設定されていますが、こちらを一旦「22,変更したいポート番号」に変更してください。

##### VMインスタンスにて
sshd.confの設定を変更します。
```console
$ sudo sed -i -e "s/#Port 22/Port 変更したいポート番号/g" /etc/ssh/sshd_config
```
この後、変更した内容を反映させるためにSSHの再起動をします。
```console
$ sudo service ssh restart
```

##### ローカルのWindowsにて
ここで一旦、変更したポート番号で問題なく接続できるか確認しておきましょう。
絶対いけるぜ！って方は飛ばして大丈夫です。

-pを使うことで、接続時のポート番号を指定します。
```console
$ ssh test_user@外部IPアドレス -i ~/.ssh/my-ssh-key -p 変更したいポート番号
```
問題なく接続出来れば大丈夫です。

##### ブラウザにて
最後に、22番のポートを塞いでしまいましょう。
先程の「default-allow-ssh」をまた編集します。

TCPのポート番号が「22,変更したいポート番号」になっていると思いますが、こちらを「変更したいポート番号」のみにしてください。

##### ローカルのWindowsにて
22番ポートでアクセスできなくなっていることを確認します。
-pなしでSSH接続を実行し、エラーとなれば問題ありません。

これでポート変更も終了です、お疲れ様でした。

# おわりに
思った以上に長くなったのと、需要的な面も考えて前後編に分けることにします。
[GCPの無料枠サーバーを借りて、毎晩自分のスプラのデイリー戦績をツイートする仕組みを用意したい（戦績取得→ツイート）](https://qiita.com/kft12/items/8e58044171ccf4ec3e8b)

自分がやったときはめちゃくちゃ不慣れなこともあり、ここにたどり着くまでに1日くらいかかりました。
分かればものすごく簡単だった・・。

読みにくい点も多々あると思いますが、ご了承下さい。