跳至主要內容

標籤「硬體」的 3 篇文章

查看所有標籤

用 AWS 無伺服器打造雲端儲存服務

· 4 分鐘閱讀

はじめに

自分専用のファイル共有システムが欲しいと思い、AWS のサーバーレスサービスだけでファイルストレージサービスを作りました。

この記事では、設計で意識したポイントと、実際のアーキテクチャを紹介します。

何を作ったか

制作した Web システムは、Web ブラウザからファイルのアップロード・ダウンロード・フォルダ管理ができるクラウドストレージサービスです。

主な機能

  • ファイルのアップロード / ダウンロード
  • フォルダの作成・階層管理
  • 複数ファイル / フォルダの一括 ZIP ダウンロード
  • ユーザー認証(サインアップ・ログイン・パスワードリセット)
  • ユーザープロフィール管理

アーキテクチャ

以下、構成図です。

認証の大部分は Cognito で行い、 ファイル転送は S3 の Presigned URL を Lambda で発行してクライアントと S3 が直接やり取りする仕組みです。

技術スタック

レイヤー技術
バックエンドC# (.NET 8) / AWS Lambda
認証Amazon Cognito + Managed Login v2
APIAPI Gateway (REST) + Cognito Authorizer
ストレージAmazon S3

設計判断とその理由

認証を Cognito で行う

Cognito の OAuth 2.0 エンドポイントと Managed Login を活用し、認証機能を実現しました。

最終的に認証系の Lambda は TokenFunction 1 つだけになりました。

機能的にもセキュリティ的にも減らせるコードは減らすのが吉です。

AWS のサービスがやってくれることを自前で書く必要はありません。

Presigned URL によるファイル転送

ファイルのアップロード・ダウンロードで Lambda を経由すると、いくつかの問題が生じます:

  • Lambda のペイロード上限に引っかかる
  • 大きなファイルを Lambda のメモリに載せるとコストがかかる
  • 転送時間が Lambda の実行時間としてカウントされる

Presigned URL なら、Lambda は URL を発行するだけで、実際のファイル転送はブラウザと S3 が直接行います。

Lambda の実行時間は数十ミリ秒で済み、ファイルサイズの制約も S3 の上限までとなります。

アップロードの流れ:
1. ブラウザ → Lambda: 「file.pdf をアップロードしたい!アップロード先の URL を送れ~」
2. Lambda → ブラウザ: 「アップロード先の Presigned URL だよ。ここに PUT してね~」
3. ブラウザ → S3: 「S3 に PUT するよ~」
4. ブラウザ → Lambda: 「アップロード完了したよ~」

4. フォルダの ZIP ダウンロード

S3 にはフォルダごとダウンロードする機能がありません。

複数ファイルの一括ダウンロードは、Lambda 上で ZIP を生成して一時的に S3 に置き、その Presigned URL を返す方式にしました。

一時 ZIP ファイルは S3 のライフサイクルルールで 1 日後に自動削除されるので、ゴミが溜まることはありません。

セキュリティ

対策実装
ブルートフォース防止Cognito 標準のロック機能 (5 回失敗: 15 分ロック)
API 保護Cognito Authorizer による JWT 検証
CORSAllowedOrigin を特定のドメインに限定
一時ファイル管理S3 ライフサイクルで不要なファイルを 1 日で自動削除

コスト

サーバーレス構成なので、利用がなければコストはほぼゼロです。

  • Cognito: ESSENTIALS Tier は MAU 10,000 まで無料
  • Lambda: 月 100 万リクエストまで無料
  • S3: 保存量に応じた従量課金(GB あたり約 $0.025/月)
  • API Gateway: 100 万リクエストあたり $3.50

個人利用なら月額数十円〜数百円程度に収まります。

インフラのコード化

インフラ全体を 1 つの template.yaml (AWS SAM) で定義しています。

Cognito User Pool、API Gateway、Lambda 3 関数、S3 バケット、CloudWatch アラーム、SNS — すべてのリソースを 600 行程度の YAML で定義しています。

Libertouch ES(日文版)評測

· 2 分鐘閱讀

Libertouch ES

我入手了 Libertouch ES 的日文配列 (NC07902-B281-ES)。

不客氣地說,使用約一個月後的感想。

優點

  • 打字手感
    在薄膜式鍵盤中屬於頂級。很貼合手指,有類似機械式的輕盈感,但觸感又不是機械式那種回饋。希望能一直堅持薄膜設計。
  • 堅固
    鋁製很堅固,幾乎可以當鈍器使用。
  • 鍵帽與 Cherry MX 相容
    能更換鍵帽這點很棒。

希望改善的地方

  • 有時候按鍵不被識別…
    有些鍵按下去沒有反應,有時似乎還會出現多個鍵互換的情況。應該是韌體或軟體的問題。
  • 鍵帽容易脫落…
    可能是結構上的問題,空白鍵和 Enter 鍵特別容易掉,感覺不太穩定。
  • 希望有替換用鍵帽
    雖然有提供鍵位修改軟體這點不錯,但還是希望能有替換鍵帽。尤其左下的 Windows 鍵需求應該很大,特別想要。若能有 Home、End 也更好。
  • 希望更換或附加附贈線材
    附贈的是 Type-C to C 線。但電腦多數仍是 Type-A,所以希望能附 Type-A to C 線。
  • 價格偏高
    因為是試作品,8 萬日圓的高價可以理解。如果把所有問題都解決,售價落在 3 萬日圓左右我會考慮購買。若高於那個價格會比較難決定。

總評

Libertouch ES 是一款在打字感與堅固性表現優異的高品質薄膜鍵盤。但在實用面仍有需改進之處,例如輸入識別不穩、鍵帽易脫落、附贈線材規格等。如果能增加替換鍵帽與線材選項,會更具吸引力。希望未來能有全尺寸或 80% 的選擇,這類需求可能比 65% 更大。

期待後續的改良與正式發售。

USB 3.0 備忘錄

· 4 分鐘閱讀

這篇備忘錄記錄了 USB 3.0。

資訊

USB 3.0(現在通常稱為 USB 3.2 Gen 1)是通用序列匯流排 (Universal Serial Bus, USB) 標準的一個重要版本,它顯著提高了數據傳輸速度並引入了更高的供電能力,使其成為連接各種外設的普及接口。

1. USB 3.0 的主要特性

  • 超高速 (SuperSpeed):USB 3.0 的主要改進是其數據傳輸速度。理論最高速度為 5 Gbps (Gigabits per second),大約是 USB 2.0 (480 Mbps) 的 10 倍。
    • 值得注意的是,實際速度會受到設備、控制器和線纜質量的影響。
  • 全雙工傳輸:與 USB 2.0 的半雙工不同,USB 3.0 支持全雙工數據傳輸,這意味著數據可以同時雙向傳輸,進一步提高了效率。
  • 更高的供電能力
    • USB 3.0 端口可以提供高達 900 mA 的電流,而 USB 2.0 只能提供 500 mA。這對於為移動設備充電或驅動高功耗外設(如便攜式硬碟)非常有用。
    • 它還引入了 USB Battery Charging (BC) 1.2 規範,允許設備以更高的電流充電,即使在數據端口閒置或關閉時。
  • 向後兼容性:USB 3.0 端口和設備完全向後兼容 USB 2.0 和 USB 1.1 設備。然而,當連接到舊版設備時,速度會降至舊標準的最高速度。
  • 新的接口顏色:為了區分 USB 3.0 端口和舊版端口,USB 3.0 端口內部通常會使用 藍色 進行標識。USB 3.0 線纜也通常更粗,並且在接口處有額外的數據引腳。

2. 接口類型和連接器

USB 3.0 引入了新的連接器類型,以支持其更高的數據傳輸需求。

  • USB 3.0 Type-A:與 USB 2.0 Type-A 向後兼容,但在內部有額外的引腳,通常為藍色。
  • USB 3.0 Type-B:比 USB 2.0 Type-B 更大,因為增加了額外的引腳。通常用於印表機、掃描儀等設備。
  • USB 3.0 Micro-B:比 USB 2.0 Micro-B 更大,由兩個部分組成。常見於便攜式硬碟。
  • USB Type-C:雖然 Type-C 接口本身不是 USB 3.0 獨有,但它被設計為支持 USB 3.0(現在是 USB 3.2 Gen 1)及更高版本。Type-C 是可逆的,支持更高的功率傳輸和多種替代模式。

3. USB 3.0 的演進:USB 3.1, 3.2, 4

USB 標準的命名在歷史上有些混亂。以下是一些主要版本:

  • USB 3.0:最初的 "SuperSpeed USB",最高 5 Gbps。現在正式名稱為 USB 3.2 Gen 1
  • USB 3.1
    • USB 3.1 Gen 1:與 USB 3.0 相同,最高 5 Gbps。
    • USB 3.1 Gen 2:引入 "SuperSpeed USB 10 Gbps",最高 10 Gbps。現在正式名稱為 USB 3.2 Gen 2
  • USB 3.2
    • USB 3.2 Gen 1:5 Gbps (與 USB 3.0 相同)。
    • USB 3.2 Gen 2:10 Gbps (與 USB 3.1 Gen 2 相同)。
    • USB 3.2 Gen 2x2:引入 "SuperSpeed USB 20 Gbps",通過兩個通道實現最高 20 Gbps。這通常需要 Type-C 接口。
  • USB4:基於 Thunderbolt 3 協議,最高 40 Gbps,通常使用 Type-C 接口。

:::warning 總結當前命名規則

  • USB 3.2 Gen 1 = USB 3.0 = 5 Gbps
  • USB 3.2 Gen 2 = USB 3.1 Gen 2 = 10 Gbps
  • USB 3.2 Gen 2x2 = 20 Gbps (僅限 Type-C)
  • USB4 = 40 Gbps (僅限 Type-C) :::

4. 常見應用

  • 外部儲存設備:便攜式硬碟、SSD,受益於高速傳輸。
  • 顯示適配器:USB 3.0 顯示適配器允許連接額外顯示器。
  • 擴展塢:提供多種接口擴展,如 Ethernet、HDMI、USB 端口。
  • 充電:快速充電手機和平板電腦。

總結

USB 3.0 及其後續版本為數據傳輸和設備供電帶來了顯著的提升,極大地促進了外部設備的性能和多功能性。儘管命名有些複雜,但了解其核心特性和演進有助於選擇和利用正確的硬體。