2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

趣味アプリのGitHubリポジトリ公開に向けてやることやったこと

Last updated at Posted at 2025-12-14

概要

趣味でVue + AWSのWebアプリを作っています。
GitHubリポジトリを公開しようとしており、やったこと・やろうとしていることをまとめます。

なんか作ろうの会 Advent Calendar 2025の12/14付の記事です。

アプリの公開よりもアドベントカレンダーが先に来てしまいました...

本記事は趣味の範囲での記事となります。
ベストプラクティスに沿っている保証はありません。また、商用に耐えうるものではないことをご理解ください。
記事に沿ったことによる、損害等についての責任は一切おいかねます。

アプリの概要

Webブラウザで動く2人対戦ゲームアプリです。
クライアントサイドは、S3にホストしたVueのSPA、
サーバーサイドは、AWSを利用したサーバレス構成(CloudFront + API Gateway + Lambda + DynamoDB)です。

system-architecture-room.png

system-architecture-game.png

system-architecture-deploy-and-monitoring.png

方針

今回のアプリは

  • ログイン機能はあるが、ニックネームのみであり、メールアドレスなどの個人情報は一切扱わない
  • 課金などお金のやり取りは一切発生しない
    という特徴でした。

コストについては、個人のAWSアカウントで実施していることから、低く抑える(月$10以内が目標)ように考えました。
セキュリティに関しては、秘匿情報を残さない、AWSアカウントにアクセスさせないという、基本的な部分を抑える方針としました。WAFによる高度な制御や、ゲームのチート対策、など考えればまだやれることはあると思いますが。コストと難易度見合いで実施しないこととしました。
また、可用性や運用性については特に要件がないため、あまり気にしていません。

まとめると、コストを第一とし、コスト制約の中でAWSアカウントへの不正アクセスやDDoSを極力避けるという方針にしました。

やったこと

全般

GitHubのコードや履歴上の情報には注意したいと考えました。

  1. コード上にAWSアカウントIDなどの秘匿情報を残さない
  2. ローカルテスト用のファイル(.envとしてローカルに置いていました)は.gitignoreに設定
  3. 開発用GitHubリポジトリのシークレットに秘匿したい値を設定
  4. 開発用GitHubリポジトリはコミット履歴が残るので、公開用に別リポジトリを作成

アクセス制御

APIやS3にはアクセスさせない方針で、比較的簡単にできる内容を実施しました。

  1. API Gatewayの前段にCloudFrontを置いてDDoSを軽減
  2. S3の前段にCloudFrontを置いてS3への直接アクセスを防止
  3. できる限り同一ドメイン、できない部分はCORSを設定

自動デプロイ

特に必須とは考えていないですが、開発の効率が良くなるだけでなく、後述する緊急削除も実施しやすくなりました。

  1. GitHub Actions + CloudFormationを利用した自動デプロイを設定

  2. AWSデプロイにはシークレットキーではなく、OIDCアクセスを使う
    アマゾン ウェブ サービスでの OpenID Connect の構成に従って設定しました

Dos/DDoS対策

主なポイントは課金対策としているので、ここは注意しました。
ただし、WAF導入などは対策のためにあまりに金額が大きくなってしまい本末転倒だったので、非常時はアプリを停止・削除する方針としました。

  1. API Gatewayのスロットリング設定
    ThrottlingBurstLimit, ThrottlingRateLimitで呼び出し回数の上限を設けられるため設定しました

  2. CloudWatch アラームの設定
    API呼び出し回数、Lambda関数の呼び出し回数、DBテーブルへの書き込み回数、Lambdaのエラーログの検知を設定しました
    1AWSアカウントあたり10個までの無料枠を全部活用しました
    CloudWatch アラームからAmazon SNS経由でメール通知を設定しました

  3. Budgetsで予算アラートを設定
    AWS Budgetsを設定して、予算を超えそう/超えた場合にメール通知する設定としました

  4. 緊急停止スクリプトの作成
    スロットリング値を0にしてLambdaやDynamoDBへアクセスできないようにする第一段階と、CloudFormationスタックごと削除する第二段階を設けました
    第一段階であればスロットリングの値を戻せば復旧可能、第二段階はインフラ全体の削除のため戻せないものとなります

その他の確認

  1. 依存モジュールの確認
    開発中に試行錯誤したが、使わないことにした依存ライブラリを削除しました
    サーバーサイドのLambdaのコードをPythonで書いているので、requirements.txtを見直しました

  2. DependaBotの設定
    全部というわけにもいかないですが、ある程度対応しました

  3. ライセンスの設定
    あったほうが良いかなと思い設定しました

終わり

リポジトリ公開ができたら、少し加筆修正するかもしれません。
→公開しました(2025/12/26)

数年後に見直して、さらに良いやり方の記事を書けたらいいなと思いました。

お読みいただきありがとうございました。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?