SST
概要
SST(Serverless Stack)は、Lambda、API Gateway、DynamoDB、S3、フロントエンドフレームワーク向けの高レベルな構成要素を使って、AWS上でフルスタックアプリケーションを構築・デプロイするためのフレームワークです。実際のAWSサービスに接続したライブローカル開発、型安全なリソースリンク、ゼロ設定のTypeScriptサポートを特長としています。
手順
- インフラを定義するときは、
sst.config.tsにsst.aws.Function、sst.aws.Api、sst.aws.Bucket、sst.aws.Dynamoなどの型付きコンポーネントを使用します。 - リソースを接続するときは、Function の
linkプロパティを使ってIAM権限を自動付与し、環境変数を注入します。ハンドラ内ではResource.Nameを使ってリンクされたリソースにアクセスします。 - ローカル開発では
sst devを使用します。これはLambdaをローカルでホットリロード実行し、実際のAWSサービス(DynamoDB、S3、SQS)に接続します。VS Codeのブレークポイントデバッグもサポートしています。 - デプロイ時は、名前付きステージには
sst deploy --stage prod、プレビュー環境にはsst deploy --stage pr-${PR_NUMBER}、後片付けにはsst remove --stage devを使用します。 - フロントエンドのデプロイには、
sst.aws.Nextjs、sst.aws.Remix、sst.aws.Astroコンポーネントを使用します。これらはLambda上でSSRを実行し、静的アセットをS3 + CloudFrontで配信します。 - シークレット管理には
sst secret set KEY valueを使います。暗号化され、ステージごとに保存されます。 - コードを整理するときは、ハンドラは
packages/functions/に薄くオーケストレーターとして配置し、ビジネスロジックはpackages/core/に置きます。
例
例1: DynamoDBを使ったサーバーレスAPIの構築
ユーザーリクエスト: 「SSTを使ってAWS上にDynamoDB付きのREST APIを作成したい」
アクション:
sst.config.tsにDynamoDBテーブルとAPI Gatewayを定義する- テーブルをAPIハンドラ関数にリンクし、自動的に権限を設定する
Resource.MyTable.nameにアクセスするCRUDハンドラを実装するsst devを実行し、実際のAWSサービスに対してライブローカル開発を行う
出力: 型安全なリソースアクセスとライブデバッグが可能なサーバーレスREST API。
例2: プレビュー環境付きNext.jsアプリのデプロイ
ユーザーリクエスト: 「Next.jsアプリをPRごとにプレビュー環境付きでAWSにデプロイしたい」
アクション:
sst.aws.Nextjsコンポーネントをカスタムドメインとリンクされたリソースとともに設定する- CIでプルリクエストごとに
sst deploy --stage pr-${PR_NUMBER}を実行するように設定する - バックエンドリソース(API、データベース)をNext.jsデプロイにリンクする
- PRがクローズされたときに
sst removeでクリーンアップする手順を追加する
出力: 各PRに分離されたプレビュー環境を持つ、本番用Next.jsデプロイ。
ガイドライン
- IAMポリシーを手動で設定する代わりに
linkを使いましょう。SSTが自動的に最小権限の権限を生成します。 - リンクされたリソースにはハンドラ内で
Resource.Nameを使ってアクセスし、テーブル名やバケットARNをハードコードしないでください。 - 日々の開発には
sst devを使用しましょう。変更のたびにAWSにデプロイするよりも高速です。 - 開発者ごとにステージを作成してください(
sst dev --stage alice)。各開発者が分離されたAWSリソースを得られます。 - ハンドラは薄く保ちましょう:ビジネスロジックは
packages/core/、ハンドラはpackages/functions/に配置します。 - APIキーや認証情報には
sst secretを使用してください。暗号化され、ステージごとに保存されます。 - CIで
sst deploy --stage pr-${PR_NUMBER}を設定し、すべてのプルリクエストにプレビュー環境を用意しましょう。