{"id":32507230,"url":"https://github.com/snickerjp/copilot-metrics-viewer-lambda-urls","last_synced_at":"2026-02-23T02:32:49.767Z","repository":{"id":317899693,"uuid":"1069297382","full_name":"snickerjp/copilot-metrics-viewer-lambda-urls","owner":"snickerjp","description":"Deploy GitHub Copilot Metrics Viewer on AWS Lambda with Function URLs - Cost-effective ($1-2/month), serverless, auto-scaling solution with Terraform","archived":false,"fork":false,"pushed_at":"2025-10-03T20:45:32.000Z","size":39,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-10-27T19:55:07.028Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"HCL","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/snickerjp.png","metadata":{"files":{"readme":"README.ja.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-10-03T17:53:25.000Z","updated_at":"2025-10-03T20:49:31.000Z","dependencies_parsed_at":"2025-10-03T19:33:40.557Z","dependency_job_id":null,"html_url":"https://github.com/snickerjp/copilot-metrics-viewer-lambda-urls","commit_stats":null,"previous_names":["snickerjp/copilot-metrics-viewer-lambda-urls"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/snickerjp/copilot-metrics-viewer-lambda-urls","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snickerjp%2Fcopilot-metrics-viewer-lambda-urls","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snickerjp%2Fcopilot-metrics-viewer-lambda-urls/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snickerjp%2Fcopilot-metrics-viewer-lambda-urls/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snickerjp%2Fcopilot-metrics-viewer-lambda-urls/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/snickerjp","download_url":"https://codeload.github.com/snickerjp/copilot-metrics-viewer-lambda-urls/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snickerjp%2Fcopilot-metrics-viewer-lambda-urls/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29735759,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-23T02:24:00.660Z","status":"ssl_error","status_checked_at":"2026-02-23T02:22:56.087Z","response_time":90,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-10-27T19:55:04.211Z","updated_at":"2026-02-23T02:32:49.737Z","avatar_url":"https://github.com/snickerjp.png","language":"HCL","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Copilot Metrics Viewer - Lambda Function URLs\n\nGitHub Copilot Metrics ViewerをAWS Lambda Function URLsでデプロイする構成です。\n\n## 📊 アーキテクチャ\n\n```mermaid\ngraph TB\n    A[Browser / GitHub] --\u003e|HTTPS| B[Lambda Function URL]\n    B --\u003e C[Lambda Function]\n    C --\u003e D[Lambda Web Adapter]\n    D --\u003e E[Nuxt 3 Application\u003cbr/\u003eCopilot Metrics Viewer]\n    E --\u003e|API Call| F[GitHub Copilot API]\n    \n    G[GitHub Repository] --\u003e|Push| H[GitHub Actions]\n    H --\u003e|OIDC Auth| I[AWS IAM Role]\n    H --\u003e|Build \u0026 Push| J[Amazon ECR]\n    H --\u003e|Update| C\n    J --\u003e|Pull Image| C\n    \n    style A fill:#4a90e2,stroke:#fff,stroke-width:2px,color:#fff\n    style B fill:#f39c12,stroke:#fff,stroke-width:2px,color:#000\n    style C fill:#9b59b6,stroke:#fff,stroke-width:2px,color:#fff\n    style D fill:#27ae60,stroke:#fff,stroke-width:2px,color:#fff\n    style E fill:#e74c3c,stroke:#fff,stroke-width:2px,color:#fff\n    style F fill:#16a085,stroke:#fff,stroke-width:2px,color:#fff\n    style G fill:#f1c40f,stroke:#000,stroke-width:2px,color:#000\n    style H fill:#e67e22,stroke:#fff,stroke-width:2px,color:#fff\n    style I fill:#8e44ad,stroke:#fff,stroke-width:2px,color:#fff\n    style J fill:#2ecc71,stroke:#fff,stroke-width:2px,color:#000\n```\n\n## 🏗️ 作成されるAWSリソース\n\n### コアリソース（常に作成）\n| リソース | 用途 | 備考 |\n|----------|------|------|\n| **ECRリポジトリ** | コンテナイメージ保存 | `copilot-metrics-viewer` |\n| **ECRライフサイクルポリシー** | コスト最適化 | 最新3つのイメージを保持 |\n| **Lambda関数** | アプリケーション実行環境 | 1024MBメモリ、30秒タイムアウト |\n| **Lambda Function URL** | HTTPSエンドポイント | パブリックまたはIAM認証 |\n| **IAMロール**（Lambda用） | Lambda実行権限 | 基本実行権限 + CloudWatch |\n| **CloudWatch Log Group** | アプリケーションログ | 設定可能な保持期間 |\n\n### GitHub Actionsリソース（常に作成）\n| リソース | 用途 | 備考 |\n|----------|------|------|\n| **IAMロール**（GitHub Actions用） | CI/CD権限 | OIDC認証ベース |\n| **IAMポリシー** | ECR + Lambda アクセス | イメージpush、関数更新 |\n\n### オプションのセキュリティリソース\n| リソース | 条件 | 用途 |\n|----------|------|------|\n| **CloudFrontディストリビューション** | `enable_cloudfront = true` | CDN + カスタムドメイン対応 |\n| **CloudFront OAC** | `use_iam_auth = true` | オリジンアクセス制御 |\n| **WAF Web ACL** | `enable_waf = true` | IPベースアクセス制御 |\n| **WAF IP Set** | `enable_waf = true` | 許可IPアドレス |\n| **追加IAMリソース** | `use_iam_auth = true` | CloudFront → Lambda 権限 |\n\n### 設定別リソース数\n| 設定 | 総リソース数 | 月額コスト |\n|------|-------------|------------|\n| 基本（セキュリティなし） | 約8リソース | $0.63-$1.10 |\n| + CloudFront | 約9リソース | $0.63-$1.10 |\n| + WAF | 約11リソース | $2.83-$3.30 |\n| + IAM認証 | 約13リソース | $0.63-$1.10 |\n\n## 💰 コスト見積もり\n\n| 項目 | 月額コスト |\n|------|-----------|\n| Lambda実行時間 | $0.03-0.50 |\n| Lambda リクエスト | $0.00 |\n| ECR ストレージ | $0.10 |\n| CloudWatch Logs | $0.50 |\n| **合計** | **$0.63-1.10** |\n\n### 他の構成との比較\n\n| 構成 | 平日のみ | 24時間 | HTTPS | 固定URL |\n|------|---------|--------|-------|---------|\n| **Lambda Function URLs** | **$0.63-1** | **$1-2** | ✅ | ✅ |\n| Fargate + CloudFront | $10-15 | $30-40 | ✅ | ✅ |\n| Fargate + ALB | $26-33 | $50-60 | ✅ | ✅ |\n\n💡 **Lambda Function URLsが最もコスト効率が良い！**\n\n## ✨ 特徴\n\n- ✅ **低コスト**: 使った分だけ課金（月$1-2程度）\n- ✅ **HTTPS対応**: Lambda Function URLsが自動提供\n- ✅ **固定URL**: デプロイ後も変わらない\n- ✅ **スケーラブル**: 自動スケーリング\n- ✅ **メンテナンスフリー**: サーバー管理不要\n- ✅ **高速起動**: Lambda Web Adapterで初回以降は高速\n\n## 🚀 クイックスタート\n\n### GitHub Actions自動デプロイ（推奨）\n\n**注意**: \n- 本プロジェクトは既存のOSS（[github-copilot-resources/copilot-metrics-viewer](https://github.com/github-copilot-resources/copilot-metrics-viewer)）を利用しています。\n- Lambda Web Adapterを使用しており、Dockerfileで組み込みを行う処理が必要です。\n- それ以外はOSSそのまま利用しています。\n- そのためGitHub Actionsで、Lambda関数直接更新を採用しています。\n- **通常の運用では、CodePipelineを使用したCI/CDパイプラインの構築を強く推奨します。**\n\n**自動デプロイ機能**:\n- **コード変更時**: `main`ブランチへのpushで自動デプロイ\n- **upstream更新**: 毎月15日9:15（JST）にupstreamの更新をチェックし、新バージョンがあれば自動デプロイ\n\n```bash\n# 1. terraform.tfvarsを設定\ncp terraform.tfvars.example terraform.tfvars\n# github_repository = \"your-org/repo-name\" を設定\n\n# 2. IAMロールを作成\nterraform apply\n\n# 3. GitHub Secretsを設定（GitHub Actions用に必要）\n# GitHubリポジトリ → Settings → Secrets and variables → Actions\n# 以下のシークレットを追加:\n# - AWS_ACCOUNT_ID: 12桁のAWSアカウントID（例: 123456789012）\n#   アカウントIDの確認: aws sts get-caller-identity --query Account --output text\n\n# 4. GitHubにpushすると自動デプロイ\ngit push origin main\n```\n\n### 手動デプロイ\n\n### 前提条件\n\n- ✅ Terraform \u003e= 1.0\n- ✅ AWS CLI設定済み\n- ✅ Docker（イメージビルド用）\n- ✅ GitHub Personal Access Token または GitHub App\n\n### 5分でデプロイ\n\n```bash\n# 1. リポジトリをクローン\ngit clone \u003cthis-repo\u003e\ncd copilot-metrics-viewer-lambda\n\n# 2. 環境変数を設定\ncp terraform.tfvars.example terraform.tfvars\n# terraform.tfvarsを編集（後述）\n\n# 3. ECRリポジトリを作成\nterraform init\nterraform apply -target=aws_ecr_repository.app\n\n# 4. Dockerイメージをpush（CloudShellで実行）\nbash build-and-push.sh ap-northeast-1 latest\n\n# 5. Lambda関数をデプロイ\nterraform apply\n\n# 6. URLを確認\nterraform output function_url\n```\n\n## 🔐 GitHub認証の設定\n\n### オプション1: Personal Access Token（簡単）\n\n1. [GitHub Personal Access Token](https://github.com/settings/tokens)を作成\n2. 必要なスコープ:\n   - `copilot`\n   - `manage_billing:copilot`\n   - `manage_billing:enterprise`\n   - `read:enterprise`\n   - `read:org`\n\n### オプション2: GitHub App（推奨）\n\n```\n┌─────────────────────────────────────────────┐\n│  GitHub App                                 │\n│  ┌───────────────────────────────────────┐ │\n│  │ Homepage URL:                         │ │\n│  │ https://your-lambda-url.on.aws/       │ │\n│  │                                       │ │\n│  │ Callback URL:                         │ │\n│  │ https://your-lambda-url.on.aws/       │ │\n│  │        /api/auth/github               │ │\n│  └───────────────────────────────────────┘ │\n│                                             │\n│  Permissions:                               │\n│  • Copilot business: Read-only             │\n│  • Members: Read-only                      │\n│  • Administration: Read-only (enterprise)  │\n└─────────────────────────────────────────────┘\n```\n\n1. [GitHub App](https://github.com/organizations/YOUR_ORG/settings/apps)を作成\n2. 上記の設定を行う\n3. Client IDとClient Secretを取得\n\n## ⚙️ 環境変数の設定\n\n`terraform.tfvars`を編集:\n\n```hcl\n# GitHub Actions設定\ngithub_repository = \"your-org/copilot-metrics-viewer-lambda\"\n\n# ECRライフサイクルポリシー設定\necr_lifecycle_untagged_count = 3  # 保持するタグなしイメージ数\n\n# CloudWatch Logs設定\ncloudwatch_logs_retention_days = 7  # ログ保持期間（日数）\n\n# セキュリティオプション\nenable_cloudfront = false  # CloudFrontを有効化\nenable_waf        = false  # WAFを有効化\nuse_iam_auth      = false  # IAM認証を使用\nallowed_ip_addresses = []  # 許可するIPアドレス範囲\n\nenvironment_variables = {\n  # 必須: セッション暗号化用（32文字以上）\n  NUXT_SESSION_PASSWORD = \"your-32-character-or-longer-password\"\n  \n  # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n  # 認証方法を選択（どちらか一方）\n  # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n  \n  # 【方法1】Personal Access Token\n  NUXT_GITHUB_TOKEN = \"ghp_xxxxxxxxxxxx\"\n  \n  # 【方法2】GitHub App（推奨）\n  NUXT_PUBLIC_USING_GITHUB_AUTH = \"true\"\n  NUXT_OAUTH_GITHUB_CLIENT_ID     = \"Iv1.xxxxxxxxxxxx\"\n  NUXT_OAUTH_GITHUB_CLIENT_SECRET = \"xxxxxxxxxxxxxxxxxxxx\"\n  \n  # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n  # スコープ設定\n  # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n  \n  NUXT_PUBLIC_SCOPE      = \"organization\"  # organization / enterprise / team-organization / team-enterprise\n  NUXT_PUBLIC_GITHUB_ORG = \"your-org-name\"\n  \n  # Enterprise使用時\n  # NUXT_PUBLIC_GITHUB_ENT = \"your-enterprise-name\"\n  \n  # Team使用時\n  # NUXT_PUBLIC_GITHUB_TEAM = \"your-team-slug\"\n}\n```\n\n### 32文字のランダムパスワード生成\n\n```bash\nopenssl rand -base64 24\n```\n\n## 📝 デプロイ手順（詳細）\n\n### 1. 環境変数の設定\n\n```bash\ncp terraform.tfvars.example terraform.tfvars\nvim terraform.tfvars  # または好きなエディタで編集\n```\n\n### 2. ECRリポジトリを作成\n\n```bash\nterraform init\nterraform apply -target=aws_ecr_repository.app\n```\n\n### 3. DockerイメージをECRにpush\n\n```bash\n# ECRにログイン\naws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin \u003cACCOUNT_ID\u003e.dkr.ecr.ap-northeast-1.amazonaws.com\n\n# イメージをビルド（注意: Dockerfileは docker/ ディレクトリにあります）\ndocker build -f docker/Dockerfile -t copilot-metrics-viewer .\n\n# タグ付け\ndocker tag copilot-metrics-viewer:latest \u003cACCOUNT_ID\u003e.dkr.ecr.ap-northeast-1.amazonaws.com/copilot-metrics-viewer:latest\n\n# ECRにpush\ndocker push \u003cACCOUNT_ID\u003e.dkr.ecr.ap-northeast-1.amazonaws.com/copilot-metrics-viewer:latest\n```\n\n### 4. Lambda関数をデプロイ\n\n```bash\nterraform apply\n```\n\n出力例:\n```\nOutputs:\n\nfunction_arn = \"arn:aws:lambda:ap-northeast-1:123456789012:function:copilot-metrics-viewer\"\nfunction_name = \"copilot-metrics-viewer\"\nfunction_url = \"https://xxxxx.lambda-url.ap-northeast-1.on.aws/\"\n```\n\n### 5. Function URLの確認\n\n```bash\nterraform output function_url\n```\n\n### 6. GitHub Appの設定を更新（GitHub App使用時）\n\nデプロイ後、GitHub AppのHomepage URLとCallback URLを実際のLambda Function URLに更新してください。\n\n## 🎯 動作確認\n\n1. ブラウザでFunction URLにアクセス\n2. \"Sign in with GitHub\"ボタンをクリック\n3. GitHub認証を完了\n4. メトリクスダッシュボードが表示される\n\n```\n┌─────────────────────────────────────────┐\n│  Copilot Metrics Viewer                 │\n│  ┌───────────────────────────────────┐  │\n│  │ Organization: your-org            │  │\n│  │                                   │  │\n│  │ [organization] [teams] [languages]│  │\n│  │                                   │  │\n│  │  📊 Acceptance Rate: 45%         │  │\n│  │  📈 Total Suggestions: 12,345    │  │\n│  │  👥 Active Users: 42             │  │\n│  └───────────────────────────────────┘  │\n└─────────────────────────────────────────┘\n```\n\n## 📦 ECRライフサイクルポリシー\n\n### 概要\n\nコンテナイメージのストレージコストを最適化するため、自動的に古いイメージを削除するライフサイクルポリシーを適用しています。\n\n**💰 コスト効果**: 月額ECRストレージ費用を約70%削減（$0.30 → $0.10）\n\n### ポリシー詳細\n\n| ルール | 対象タグ | 保持期間/数 | 目的 | 例 |\n|--------|----------|-------------|------|-----|\n| 1 | `latest` | 最新3つ | 破壊的変更対策 | `latest` |\n| 2 | 数字開始（0-9） | 90日間 | コミットハッシュ保持 | `2e9ab5cf...` |\n| 3 | 英字開始（a-f） | 90日間 | コミットハッシュ保持 | `a1b2c3d4...` |\n| 4 | タグなし | 最新3つ | ビルド中間イメージ | `\u003cuntagged\u003e` |\n\n### 🔄 自動タグ付け戦略\n\nGitHub Actionsが以下のタグを自動付与：\n\n```bash\n# デプロイ時に作成されるタグ\nlatest                    # 常に最新版を指す\n2e9ab5cf0c081df5e11a6d   # コミットハッシュ（ロールバック用）\n```\n\n### ⚙️ 設定変更\n\n`terraform.tfvars`で保持数を調整可能：\n\n```hcl\n# 保持するタグなしイメージ数を変更\necr_lifecycle_untagged_count = 5  # デフォルト: 3\n\n# 保持期間は variables.tf で設定済み（90日間）\n```\n\n### 🔙 ロールバック方法\n\n問題が発生した場合、特定のコミットハッシュに戻せます：\n\n```bash\n# 1. ECRのイメージ一覧を確認\naws ecr describe-images --repository-name copilot-metrics-viewer \\\n  --query 'imageDetails[*].[imageTags[0],imageDigest,imagePushedAt]' \\\n  --output table\n\n# 2. 特定のコミットハッシュに戻す\naws lambda update-function-code \\\n  --function-name copilot-metrics-viewer \\\n  --image-uri \u003cACCOUNT_ID\u003e.dkr.ecr.ap-northeast-1.amazonaws.com/copilot-metrics-viewer:2e9ab5cf0c081df5e11a6d643daccbb29010fbc8\n\n# 3. 動作確認\ncurl -I https://your-lambda-url.lambda-url.ap-northeast-1.on.aws/\n```\n\n### 📊 ストレージ使用量確認\n\n```bash\n# ECRリポジトリのサイズを確認\naws ecr describe-repositories --repository-names copilot-metrics-viewer \\\n  --query 'repositories[0].repositorySizeInBytes' --output text | \\\n  awk '{print $1/1024/1024 \" MB\"}'\n\n# イメージ数を確認\naws ecr describe-images --repository-name copilot-metrics-viewer \\\n  --query 'length(imageDetails)'\n```\n\n## 🔧 トラブルシューティング\n\n### Lambda関数がタイムアウトする\n\nメモリサイズを増やしてください:\n\n```hcl\n# main.tf\nresource \"aws_lambda_function\" \"app\" {\n  memory_size = 2048  # デフォルト: 1024\n  timeout     = 60    # デフォルト: 30\n}\n```\n\n### GitHub App認証が動作しない\n\n1. ✅ Callback URLが正しいか確認\n   - `https://your-lambda-url/api/auth/github`\n2. ✅ GitHub Appの権限が正しいか確認\n3. ✅ CloudWatch Logsでエラーを確認\n\n```bash\naws logs tail /aws/lambda/copilot-metrics-viewer --follow\n```\n\n### 環境変数が反映されない\n\nLambda関数を再作成:\n\n```bash\nterraform taint aws_lambda_function.app\nterraform apply\n```\n\n## 📊 CloudWatch Logs確認\n\n```bash\n# リアルタイムでログを確認\naws logs tail /aws/lambda/copilot-metrics-viewer --follow\n\n# 過去5分のログを確認\naws logs tail /aws/lambda/copilot-metrics-viewer --since 5m\n```\n\n## 🗑️ リソース削除\n\n```bash\nterraform destroy\n```\n\n確認メッセージが表示されたら`yes`を入力。\n\n## 📚 関連ドキュメント\n\n- [IP-RESTRICTION-GUIDE.md](./doc/ja/IP-RESTRICTION-GUIDE.md) - IP制限の実装方法\n- [CLOUDFRONT-ONLY-ACCESS.md](./doc/ja/CLOUDFRONT-ONLY-ACCESS.md) - CloudFront経由のみアクセス許可\n- [SECRETS-MANAGEMENT.md](./doc/ja/SECRETS-MANAGEMENT.md) - セキュアなシークレット管理ガイド\n\n## 🔒 セキュリティ強化（オプション）\n\n### セキュリティレベル比較\n\n| 設定 | セキュリティ | 複雑さ | 月額コスト |\n|------|-------------|--------|------------|\n| `enable_cloudfront = false` | 低 | 低 | $0.63-$1.10 |\n| `enable_cloudfront = true` | 中 | 中 | $0.63-$1.10 |\n| `enable_waf = true` | 高 | 中 | $2.83-$3.30 |\n| `use_iam_auth = true` | **最高** | 高 | $0.63-$1.10 |\n\n### 設定オプション\n\n```hcl\n# terraform.tfvars\nenable_cloudfront = true   # CloudFrontディストリビューションを有効化\nenable_waf        = true   # IP制限付きWAFを有効化\nuse_iam_auth      = true   # IAM認証を使用（最も安全）\nallowed_ip_addresses = [\"203.0.113.0/24\"]  # オフィスのIP範囲\n\n# CloudWatch Logs保持期間設定\ncloudwatch_logs_retention_days = 7  # デフォルト: 7日間\n```\n\n**推奨設定:**\n- **開発環境**: `enable_cloudfront = false` (最もシンプル)\n- **本番環境**: `use_iam_auth = true` (最も安全、低コスト)\n- **高セキュリティ**: 全オプション有効 (最高セキュリティ、高コスト)\n\n**重要な制約:**\n- `use_iam_auth = true` を使用する場合は `enable_cloudfront = true` が必須\n- WAFを有効にするとコストが約$2.20/月増加\n- CloudFrontは無料枠が充実（月1TB転送、1000万リクエスト）\n\n### IP制限を追加\n\n特定のIPアドレスからのみアクセスを許可:\n\n```mermaid\ngraph LR\n    A[Browser] --\u003e B[CloudFront + WAF]\n    B --\u003e|IP制限| C[Lambda Function]\n    \n    style A fill:#4a90e2,stroke:#fff,stroke-width:2px,color:#fff\n    style B fill:#f39c12,stroke:#fff,stroke-width:2px,color:#000\n    style C fill:#9b59b6,stroke:#fff,stroke-width:2px,color:#fff\n```\n\n詳細: [IP-RESTRICTION-GUIDE.md](./doc/IP-RESTRICTION-GUIDE.md)\n\n### CloudFront経由のみ許可\n\n直接アクセスをブロック:\n\n```mermaid\ngraph TB\n    A[Browser] --\u003e|✅ 許可| B[CloudFront]\n    B --\u003e C[Lambda Function]\n    A -.-\u003e|❌ ブロック| C\n    \n    style A fill:#4a90e2,stroke:#fff,stroke-width:2px,color:#fff\n    style B fill:#27ae60,stroke:#fff,stroke-width:2px,color:#fff\n    style C fill:#9b59b6,stroke:#fff,stroke-width:2px,color:#fff\n```\n\n詳細: [CLOUDFRONT-ONLY-ACCESS.md](./doc/CLOUDFRONT-ONLY-ACCESS.md)\n\n## 🏗️ アーキテクチャの詳細\n\n### Lambda Web Adapterとは\n\n```mermaid\ngraph TB\n    subgraph Lambda[\"Lambda Function\"]\n        A[Lambda Web Adapter] --\u003e B[Nuxt 3 Application]\n        \n        note1[\"• HTTPリクエストを変換\u003cbr/\u003e• アプリを常駐させる\u003cbr/\u003e• 初回起動後は高速レスポンス\"]\n        note2[\"• ポート8080でリッスン\u003cbr/\u003e• 通常のWebアプリとして動作\"]\n    end\n    \n    style A fill:#27ae60,stroke:#fff,stroke-width:2px,color:#fff\n    style B fill:#e74c3c,stroke:#fff,stroke-width:2px,color:#fff\n```\n\n**メリット**:\n- 既存のWebアプリをそのままLambdaで実行\n- コールドスタート後は高速（0.1秒程度）\n- コスト効率が良い\n\n## 📈 パフォーマンス\n\n| 指標 | 値 |\n|------|-----|\n| コールドスタート | 10-30秒（初回のみ） |\n| ウォームスタート | 0.1-0.5秒 |\n| メモリ使用量 | 150-200MB |\n| 同時実行数 | 自動スケーリング |\n\n## 🤝 サポート\n\n問題が発生した場合:\n\n1. CloudWatch Logsを確認\n2. [GitHub Issues](https://github.com/github-copilot-resources/copilot-metrics-viewer/issues)を確認\n3. 環境変数の設定を再確認\n\n## 📄 ライセンス\n\nこのリポジトリのライセンス全文はリポジトリルートの `LICENSE` ファイルに記載しています。詳しくは以下を参照してください。\n\nSee: ./LICENSE\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsnickerjp%2Fcopilot-metrics-viewer-lambda-urls","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsnickerjp%2Fcopilot-metrics-viewer-lambda-urls","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsnickerjp%2Fcopilot-metrics-viewer-lambda-urls/lists"}