はじめに
AWS Certified Developer – Associateの認定資格を勉強中に「AWS SAM」といったキーワードが多くでてきました。
AWS SAMは「AWS Serverless Application Model」の略で、一言で説明するとCloudFormationの設定を簡単にしたものとなります。
AWS SAMは、サーバーレスアプリケーションを簡単に定義・デプロイするためのフレームワークです。SAMテンプレートはCloudFormationテンプレートの拡張であり、Lambda、API Gateway、DynamoDB、Step Functionsなどのサーバーレスリソースをより簡単に定義できます。
SAMのコマンド (sam deploy) を実行すると、内部的にCloudFormationが実行され、SAMテンプレートに基づいたリソースのデプロイが行われます。
SAMテンプレートでは、サーバーレス向けのリソースを簡潔に記述するための独自の構文やショートカットが用意されており、CloudFormationよりも少ない記述でサーバーレスアプリケーションを定義できます。
AWS SAMは、サーバーレスアプリケーションの開発・テスト・デプロイの効率化に役立つツールです。
CloudFormationとの違いは以下の記事を参考にしてください。
AWS SAMとは?CloudFormationとの違いを徹底解説
今回のハンズオンでは、AWS SAMのテンプレートを使ってAPIGateway+Lambda+DynamoDBを使ったサーバレスAPIを構築します。
環境構成
AWS SAMを使って以下の環境を配備します。
初期セットアップ
実施済みの場合は飛ばしてください。
AWS CLIのセットアップ
AWS CLI(コマンドラインインターフェース)は、AWSサービスをコマンドラインから操作するためのツールです。AWS CLIを使用することで、SAM CLIを通じてAWSリソースのデプロイが可能になります。
- AWS CLIのインストール
公式サイトから利用しているOSに合わせてダウンロードし、指示に従ってインストールします。 - AWS CLIの設定
インストールが完了したら、AWSアカウントにアクセスするための認証情報を設定します。
コマンド実行:aws configure
以下の情報を入力します
- AWS Access Key ID: AWSアカウントのアクセスキーID
- AWS Secret Access Key: アカウントのシークレットアクセスキー
- Default region name: デフォルトのリージョン (例: ap-northeast-1)
- Default output format: デフォルトの出力フォーマット (json、yaml など)
- AWS CLIの動作確認
設定が完了したら、動作確認を行います。aws s3 ls
正常に設定されていれば、S3バケットの一覧が表示されます。
AWS SAM CLIのインストール
AWS SAM CLIは、サーバーレスアプリケーションのローカル開発、ビルド、テスト、デプロイをサポートするツールです。
- AWS SAM CLIのインストール
公式サイトから利用しているOSに合わせてダウンロードし、指示に従ってインストールします。 - SAM CLIの動作確認
インストールが完了したら、動作確認を行います。sam --version
SAM CLIのバージョンが表示されれば、インストールは正常に完了しています。
Dockerのインストール
AWS SAM CLIでローカル環境でのLambda関数の実行やテストを行うために、Dockerが必要です。SAM CLIは、Lambdaのランタイム環境をエミュレートするためにDockerを使用します。
- Dockerのインストール
公式サイトからDocker for Desktopをダウンロードしてください。インストーラーの指示に従ってセットアップします。 - Dockerインストール後、docker –version コマンドで動作を確認します。
- Dockerの動作確認
Dockerが正常にインストールされているかを確認するため、次のコマンドを実行します。docker run hello-world
正常に動作していれば、Hello from Docker! というメッセージが表示されます。
これらのセットアップが完了すると、AWS CLI、AWS SAM CLI、Dockerを活用してAWS上にサーバーレスアプリケーションを構築・デプロイする準備が整います。
APIクライアント
API実行用のAPIクライアントを準備してください。
本ハンズオンではChromeの拡張機能「Talend API Tester」を利用しています。
1. プロジェクトの作成
以下のコマンドを実行します。
sam init
ガイダンスに従って設定値を入力していきます。
本ハンズオンでは以下を入力します。
- テンプレートの選択: 1 – AWS Quick Start Templates を選択
- テンプレート種類を選択: 7 – Serverless API
- ランタイムの選択: 3 – nodejs20.x
- X-Ray tracingの設定有無: N 設定なしを選択
- CloudWatch インサイトの利用有無: N 設定なしを選択
- Lambdaのログをjsonにする: N 設定なしを選択
- プロジェクト名: sam-app など、任意の名前を指定します。
Which template source would you like to use?
1 - AWS Quick Start Templates
2 - Custom Template Location
Choice: 1
Choose an AWS Quick Start application template
1 - Hello World Example
2 - Data processing
3 - Hello World Example with Powertools for AWS Lambda
4 - Multi-step workflow
5 - Scheduled task
6 - Standalone function
7 - Serverless API
8 - Infrastructure event management
9 - Lambda Response Streaming
10 - Serverless Connector Hello World Example
11 - Multi-step workflow with Connectors
12 - GraphQLApi Hello World Example
13 - Full Stack
14 - Lambda EFS example
15 - DynamoDB Example
16 - Machine Learning
Template: 7
Which runtime would you like to use?
1 - dotnet8
2 - dotnet6
3 - nodejs20.x
4 - nodejs18.x
5 - nodejs16.x
Runtime: 3
Based on your selections, the only Package type available is Zip.
We will proceed to selecting the Package type as Zip.
Based on your selections, the only dependency manager available is npm.
We will proceed copying the template using npm.
Would you like to enable X-Ray tracing on the function(s) in your application? [y/N]: N
Would you like to enable monitoring using CloudWatch Application Insights?
For more info, please view https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch-application-insights.html [y/N]: N
Would you like to set Structured Logging in JSON format on your Lambda functions? [y/N]: N
Project name [sam-app]: sam-app
-----------------------
Generating application:
-----------------------
Name: sam-app
Runtime: nodejs20.x
Architectures: x86_64
Dependency Manager: npm
Application Template: quick-start-web
Output Directory: .
Configuration file: sam-app\samconfig.toml
Next steps can be found in the README file at sam-app\README.md
Commands you can use next
=========================
[*] Create pipeline: cd sam-app && sam pipeline init --bootstrap
[*] Validate SAM template: cd sam-app && sam validate
[*] Test Function in the Cloud: cd sam-app && sam sync --stack-name {stack-name} --watch
2. ローカルでテスト
sam build
sam local start-api
このコマンドを実行すると、ローカルでAPI Gatewayが起動し、http://localhost:3000/items などでAPIをテストできます。
3. デプロイ
sam deploy
このコマンドを実行すると、AWSに各種リソースが配備されます。
- API Gateway
- Lambda
- DynamoDB
4. 動作確認
API Gatewayの画面からステージを選択してエンドポイントを確認します。
APIクライアントを使ってデータを登録します。
以下のデータを登録します。
{
"id": "00001",
"name": "hogehoge"
}
APIクライアントを使ってデータを取得します。
{
"id": "00001",
"name": "hogehoge"
}
登録したデータが取得できました。
最後に何件か登録した上で、一覧を出力します。
[
{
"id": "00003",
"name": "hogefuga"
},
{
"id": "00004",
"name": "fugahoge"
},
{
"id": "00002",
"name": "fugafuga"
},
{
"id": "00001",
"name": "hogehoge"
}
]
一覧が取得されました。
さいごに
本ハンズオンではAWS SAMを使ってサーバレスAPIを構築してみました。
手動で今回のハンズオンで使ったリソースを配備すると時間がかかりますが、AWS SAM使うことで短時間でサービスを配備することが可能です。
AWS SAMはAWS Certified Developer – Associateの問題にもよく出てきますので、理解を含めて認定資格を取得してみましょう!
|