AWS SAMでAPIGateway+Lambda+DynamoDBを使ったサーバレスAPIを配備してみる

スポンサーリンク
ハンズオン
スポンサーリンク

はじめに

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リソースのデプロイが可能になります。

  1. AWS CLIのインストール
    公式サイトから利用しているOSに合わせてダウンロードし、指示に従ってインストールします。
  2. 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 など)
  3. AWS CLIの動作確認
    設定が完了したら、動作確認を行います。
    aws s3 ls
    

    正常に設定されていれば、S3バケットの一覧が表示されます。

AWS SAM CLIのインストール

AWS SAM CLIは、サーバーレスアプリケーションのローカル開発、ビルド、テスト、デプロイをサポートするツールです。

  1. AWS SAM CLIのインストール
    公式サイトから利用しているOSに合わせてダウンロードし、指示に従ってインストールします。
  2. SAM CLIの動作確認
    インストールが完了したら、動作確認を行います。
    sam --version
    

    SAM CLIのバージョンが表示されれば、インストールは正常に完了しています。

Dockerのインストール

AWS SAM CLIでローカル環境でのLambda関数の実行やテストを行うために、Dockerが必要です。SAM CLIは、Lambdaのランタイム環境をエミュレートするためにDockerを使用します。

  1. Dockerのインストール
    公式サイトからDocker for Desktopをダウンロードしてください。インストーラーの指示に従ってセットアップします。
  2. Dockerインストール後、docker –version コマンドで動作を確認します。
  3. 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の問題にもよく出てきますので、理解を含めて認定資格を取得してみましょう!

[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]

徹底攻略AWS認定デベロッパー – アソシエイト教科書&問題集 第2版 [DVA…
価格:3,960円(税込、送料無料) (2024/9/28時点)

楽天で購入

 

 

タイトルとURLをコピーしました