AWSとGCPの一生無料枠を活用する

## はじめに

AWSとGCPは、登録後に一定期間（一定量）の無料利用権をもらえますが
それとは別に**いつまでも無料で利用できるサービス**があります。

- [AWS クラウド無料利用枠 - 無期限無料](https://aws.amazon.com/jp/free/?awsf.Free%20Tier%20Types=categories%23alwaysfree)
- [GCPの無料枠 - Always Free プロダクト](https://cloud.google.com/free/?hl=ja)

その中から個人で開発する上で使えそうなサービスの紹介や、
簡単な（本当に簡単な）比較などをまとめてみたいと思います。

※無料対象のサービスは時々変更[^1]があります。上のリンク先に書いてあるのが最新の正しい情報なのでご参照ください。
（なので、一生というのはちょっと言い過ぎです。。。）
※実際に運用すると通信等の料金が発生したりで月に数ドル程度かかったりします。ほんとに完全無料希望の人は詳しくご確認ください。

所感で個人開発に使えそうなものを紹介していくので無料サービス全部の網羅はしません。（できません）
また、AWSとGCPどっちが良いとかではなくどっちもそれぞれ良いよ！という記事です

[^1]: 主に追加で、削除は今のところ自分は聞いたことがないですが念の為ご注意を。

## AWS

### Lambda
言わずと知れたサーバーレスでプログラムを実行できるサービスです。
GCPのCloudfunctionと比較すると、

- API Gatewayと組み合わせた時のAPIとしての使いやすさ（Swaggerでデプロイしたりとか）
- **サーバーレスで定期実行ができる**

というところが優れています。もともとAWSが先行していたこともあり、
サーバーレスコンピューティングは基本的にはLambdaが使いやすいかなと思います。


無料枠：
> 1 か月あたり 100 万件の無料リクエスト
> 1 か月あたり最大 320 万秒のコンピューティング時間

### DynamoDB
NoSQLのデータベースです。検索の重要度が高いアプリには不向きですが、
シンプルなデータ構造を保存するだけなら十分な機能と無料枠があります。

無料枠：
> 25 GB のストレージ
> 25 ユニットの書き込みキャパシティー
> 25 ユニットの読み込みキャパシティー

### SQS
メッセージキューイングサービスです。
GCPだとPub/Subが近いサービスですが、SQSはFIFOを使えるのが便利です。

無料枠（１ヶ月あたり）：
> 100 万件のリクエスト


### SNS
Push型のメッセージングサービスです。モバイルへのプッシュ通知等に使えます。
また、LambdaなどAWS内のサービスと組み合わせる分には無料です。

無料枠（１ヶ月あたり）：
> 100 万件の発行
> 10 万件の HTTP/S 配信
> 1,000 件のメール配信


## GCP

### Google App Engine
インフラを気にせずに（主にWeb）アプリケーションをデプロイすることができるサービスです。
無料枠抜きにしてもかなりオススメのサービスです。
インスタンスが常時1台になるようにスケーリングを設定すればずっと無料です。
**無料はスタンダード環境のみで、フレキシブル環境は該当しないので注意** （一回勘違いしました・・・）

無料枠：
> 1 日あたり 28 インスタンス時間
> 5 GB のクラウド ストレージ
> 共有 Memcache
> 1 日あたり 1,000 回の検索オペレーション、10 MB の検索インデックス作成
> 1 日あたり 100 件のメール

### Google Cloud Datastore
NoSQLのデータベースです。
DynamoDBよりも少し検索に融通が効きます。クセも少し強いですが個人的にこちらの方が好きです。

無料枠（1日あたり）：
> 1 GB のストレージ
> 50,000 回の読み取りオペレーション、20,000 回の書き込みオペレーション、20,000 回の削除オペレーション

### Google Compute Engine
きた！なんと仮想マシンサーバーがずっと無料です！ ※ただし米国リージョンに限る
低スペック、遠リージョンでもよいから常駐アプリを作りたいときに使えます。

無料枠（1 か月あたり）：
> 1 f1-micro インスタンス（バージニア州北部 [us-east4] を除く米国リージョンのみ）
> 30 GB の HDD（期間合計）、5 GB のスナップショット（期間合計）
> 1 GB の北米から全リージョン宛ての下りネットワーク（中国とオーストラリアを除く）

### Google Cloud Storage
ファイルストレージサービス。AWSでいうS3です。これもリージョンは指定されますが
そこそこの量が無料で使えます。バックアップやデプロイの時に経由する用途などに。

無料枠（1 か月あたり）：
> 5 GB の Regional Storage（バージニア州北部 [us-east4] を除く米国リージョンのみ）
> 5,000 回のクラス A オペレーション
> 50,000 回のクラス B オペレーション
> 1 GB の北米から全リージョン宛ての下りネットワーク

### Google Cloud Functions
サーバーレスでプログラムを実行できるサービス。AWSでいうLambdaです。
Lambdaすごいと上に書きましたが、Cloud Functionはそれ単体でhttpのエンドポイントに
なってくれるので、それも無料でできちゃうのがメリットです。
（ただ、AWSにはAPI Gatewayという究極に安いAPIエンドポイントサービスがあるのであまりメリットにならないかも）

無料枠（１ヶ月あたり）：
> 200 万回の呼び出し（バックグラウンド呼び出しと HTTP 呼び出しを含む）
> 400,000 GB 秒のメモリ、200,000 GHz 秒のコンピューティング時間
> 5 GB の下りネットワーク

### Google Cloud Pub/Sub
あまり自分は使いこなせてないのですが、SQSの項で引き合いに出したので紹介。
こちらもメッセージング系のサービスですが、Pull型/Push型配信の両方ができたりするのが
特徴といえそうです。（すみません使いこんでないので浅いです）

無料枠（1ヶ月あたり）：
> 10 GB のメッセージ容量

## 実際に自分が使っている（いた）ユースケース

### 定期的にLineにメッセージしてくれるアプリ
AWS LambdaとCloudWatchEventを使って定期実行しています

### ラズパイで作った似非IoTカメラ
AWS SQSを使ってメッセージを検知して動作したり、逆にLambdaを起動させたりしていました。

### WebSocketを利用した常駐Bot（Discord Bot）
常駐させたかったので GCP ComputeEngineの無料インスタンスを立てっぱなしにしています。

### 小規模Webサイトのホスティング
Google App Engineを使っています。

### ファイルのバックアップ
GCP Cloud Storageを利用しています。

### データの保存
Google Datastoreを利用しています。
ただ、ほぼマスタ用途なのでDynamoDBでもよいしなんならCloudStorageのファイルでもよいかもです。

## おまけ：登録時にもらえる無料枠について
いずれのサービスも登録時に

- AWS： 1年間の無料利用枠（サービスごとに一部制限あり）
- GCP： 1年間だけ使える$300分のクレジット

という無料枠をもらえます。AWSは比較的制限が多いのに対して、
GCPは$300分であればほぼすべてのサービスが利用できるのでお得に感じました。
（そして私は高性能なインスタンスを停止し忘れてあっという間にクレジットを使い切りました）

## 終わり

少し長くなってしまいましたが以上です。
GitHubプライベートリポジトリの無料開放のニュースを聞いて書きたくなった次第でした。

（ほぼ）無料で色々なことをさせてもらえて、個人趣味プログラマにはほんとに良い時代と感じます！

Azureは使ったことがないのでわかりません。
フロント用途だとFirebaseが使えたり、Google Apps Scriptなんかも無料で使う話をよく聞きます。
他にも何か個人ユースでおすすめのサービスがありましたら、教えていただけると幸いです。