aws

AWSサーバーレスアーキテクチャ:DynamoDBの構築からAPI Gatewayの設定まで

目次

AWSサーバーレスアーキテクチャのハンズオン:要件と基本編での注意点

AWSサーバーレスアーキテクチャのハンズオンを始めるにあたり、まずはプロジェクトの要件を明確にすることが重要です。
このセクションでは、ハンズオンの目的と必要な前提知識、要件定義の詳細、そして基本編で考慮しないことについて説明します。
これにより、プロジェクトを効率的に進めるための基礎を築くことができます。

ハンズオンの目的と必要な前提知識

このハンズオンの目的は、AWSのサーバーレスアーキテクチャを実践的に学ぶことです。
具体的には、DynamoDBの構築、Lambda関数の作成とコーディング、API Gatewayの設定、そしてWebアプリの作成とAPIの呼び出しまでをカバーします。
このハンズオンを通じて、AWSの各種サービスを連携させ、スケーラブルでコスト効率の高いアプリケーションを構築する方法を学びます。

前提知識としては、以下が必要です:
– 基本的なプログラミング知識(Python推奨)
– AWSアカウントの作成と基本操作の理解
– APIの基本的な概念とRESTfulアーキテクチャの理解

要件定義の詳細

このハンズオンでは、以下の要件を満たすことを目指します:
– DynamoDBテーブルの作成と操作
– IAMロールの作成と設定
– Lambda関数の作成とAPI Gatewayとの連携
– Streamlitを用いたWebアプリケーションの構築

要件定義の詳細は以下の通りです:
1. DynamoDBにユーザー情報を格納するテーブルを作成
2. Lambda関数でユーザー情報を操作するAPIを作成
3. API Gatewayを通じてLambda関数を公開
4. Streamlitでユーザーインターフェースを作成し、APIを呼び出してユーザー情報を表示

基本編で考慮しないこと

基本編では、以下の事項については考慮しません:
– ユーザー認証と認可の詳細な実装
– 高度なセキュリティ設定やVPCの設定
– 大規模デプロイメントやCI/CDの設定

これらの要素は、基本編を終えた後の応用編で取り扱う予定です。
まずは、AWSの基本的なサービスを理解し、サーバーレスアーキテクチャの構築に必要な基本的なスキルを身につけることを目的としています。

import boto3

# DynamoDBテーブルを作成するサンプルコード
dynamodb = boto3.resource('dynamodb')
table = dynamodb.create_table(
    TableName='Users',
    KeySchema=[
        {
            'AttributeName': 'UserID',
            'KeyType': 'HASH'  # Partition key
        }
    ],
    AttributeDefinitions=[
        {
            'AttributeName': 'UserID',
            'AttributeType': 'S'
        }
    ],
    ProvisionedThroughput={
        'ReadCapacityUnits': 5,
        'WriteCapacityUnits': 5
    }
)
print("Table status:", table.table_status)

このコードは、AWSのboto3ライブラリを使用してDynamoDBテーブルを作成するサンプルです。
このように、ハンズオンでは具体的なコード例を通じて各ステップを解説していきます。

AWSサーバーレスアーキテクチャのハンズオン:開発環境の構築方法

AWSサーバーレスアーキテクチャのハンズオンを進めるためには、適切な開発環境を整えることが不可欠です。

必要なツールのインストール

開発環境を構築するためには、いくつかのツールをインストールする必要があります。
まずは、AWS CLI、Python、そして必要なパッケージをインストールします。
以下にそれぞれのインストール手順を示します。

1. AWS CLIのインストール:

   # MacOS/Linux
   curl "https://awscli.amazonaws.com/AWSCLIV2.pkg" -o "AWSCLIV2.pkg"
   sudo installer -pkg AWSCLIV2.pkg -target /
   
   # Windows
   msiexec.exe /i https://awscli.amazonaws.com/AWSCLIV2.msi
   

2. Pythonのインストール:

   # MacOS/Linux
   brew install python
   
   # Windows
   choco install python
   

3. 必要なPythonパッケージのインストール:

   pip install boto3 streamlit
   

AWS CLIの設定

AWS CLIをインストールした後は、AWSアカウントに接続するための設定を行います。
以下のコマンドを実行して設定を行います。

aws configure
# プロンプトに従ってAWSアクセスキーID、シークレットアクセスキー、デフォルトリージョン、出力形式を入力します。

開発環境の構成

開発環境を構築する際に考慮すべきポイントとして、ローカル環境とクラウド環境の統合があります。
AWS Cloud9を使用することで、クラウド上で開発環境を整えることができます。
以下にCloud9のセットアップ手順を示します。

1. Cloud9環境の作成:
AWSマネジメントコンソールにログインし、Cloud9サービスを選択します。
新しい環境を作成し、必要な設定を行います。

2. 必要なツールのインストール:
Cloud9環境内で、先ほどと同様にAWS CLIとPythonパッケージをインストールします。

ソースコード管理の設定

プロジェクトを進める際には、ソースコード管理が重要です。
Gitを使用してリポジトリを作成し、ソースコードを管理します。
以下に基本的なGitの設定手順を示します。

1. Gitのインストール:

   # MacOS/Linux
   brew install git
   
   # Windows
   choco install git
   

2. リポジトリの作成と初期化:

   git init
   git remote add origin <リポジトリURL>
   git add .
   git commit -m "Initial commit"
   git push -u origin master
   

開発環境のテスト

開発環境が正しく構築されたかどうかを確認するために、簡単なテストを実施します。
以下にサンプルコードを示します。

import boto3

# S3クライアントを作成してバケットリストを取得するサンプルコード
s3 = boto3.client('s3')
response = s3.list_buckets()

print("Existing buckets:")
for bucket in response['Buckets']:
    print(f"  {bucket['Name']}")

このコードを実行することで、S3バケットの一覧が表示されれば、開発環境が正常に動作していることが確認できます。

AWSサーバーレスアーキテクチャのハンズオン:アーキテクチャ設計と使用言語の選定

AWSサーバーレスアーキテクチャを成功させるためには、適切なアーキテクチャ設計と使用する言語の選定が重要です。
このセクションでは、プロジェクトに最適なアーキテクチャの設計方法と、使用する言語の選定基準について詳しく説明します。

アーキテクチャ設計の基本原則

サーバーレスアーキテクチャの設計においては、スケーラビリティ、可用性、セキュリティの3つの要素を重視する必要があります。
以下に、これらの要素を考慮した設計の基本原則を示します。

1. スケーラビリティ:
サーバーレスアーキテクチャは、リクエストの増減に応じて自動的にスケールします。
これにより、トラフィックの急増時にもシステムが安定して動作します。

2. 可用性:
マルチリージョン構成を採用することで、システムの可用性を向上させます。
また、各コンポーネントを冗長化し、障害発生時の影響を最小限に抑える設計を行います。

3. セキュリティ:
IAMロールやポリシーを適切に設定し、アクセス制御を強化します。
また、API Gatewayで認証を導入し、セキュアな通信を確保します。

使用言語の選定基準

サーバーレスアーキテクチャで使用する言語は、以下の基準で選定します:

1. 開発効率:
開発効率を考慮し、豊富なライブラリやツールが揃っているPythonを推奨します。

2. ランタイムのサポート:
AWS Lambdaがサポートするランタイムを確認し、Python、Node.js、Goなどの中から選定します。

3. チームのスキルセット:
開発チームのスキルセットに基づいて言語を選定します。
チームが最も慣れている言語を使用することで、開発効率を向上させます。

具体的なアーキテクチャ例

以下に、サーバーレスアーキテクチャの具体例を示します。

– API Gateway:エンドポイントを公開し、Lambda関数と連携します。

– Lambda関数:ビジネスロジックを実装し、DynamoDBと連携します。

– DynamoDB:ユーザーデータを格納します。

– S3:静的ファイルやログを保存します。

– CloudFront:コンテンツ配信ネットワーク(CDN)として、S3のデータをキャッシュし、高速な配信を行います。

アーキテクチャ設計のステップ

アーキテクチャ設計のステップは以下の通りです:

1. 要件分析:
プロジェクトの要件を詳細に分析し、必要な機能と非機能要件を明確にします。

2. サービス選定:
要件に基づいて使用するAWSサービスを選定します。
例えば、データベースにはDynamoDB、ファイルストレージにはS3などを選びます。

3. 設計図の作成:
各サービスの役割と連携方法を図示し、全体のアーキテクチャを視覚化します。

4. プロトタイプの作成:
小規模なプロトタイプを作成し、設計の妥当性を確認します。

import json
import boto3

def lambda_handler(event, context):
    dynamodb = boto3.resource('dynamodb')
    table = dynamodb.Table('Users')
    
    # データの取得
    response = table.get_item(
        Key={
            'UserID': event['UserID']
        }
    )
    
    return {
        'statusCode': 200,
        'body': json.dumps(response['Item'])
    }

このコードは、Lambda関数を使用してDynamoDBからユーザー情報を取得するサンプルです。
このように具体的なコード例を交えながら、アーキテクチャ設計の手順を解説していきます。

AWSサーバーレスアーキテクチャのハンズオン:DynamoDBの構築からAPI Gatewayの設定まで

AWSサーバーレスアーキテクチャのコアとなるDynamoDBの構築から、API Gatewayの設定までの手順を詳細に解説します。

DynamoDBのテーブル構築

DynamoDBのテーブルを構築する際には、キーの設計とスループットの設定が重要です。
以下に、DynamoDBテーブルを構築する手順を示します。

1. DynamoDBテーブルの作成:

   import boto3

   dynamodb = boto3.resource('dynamodb')
   table = dynamodb.create_table(
       TableName='Users',
       KeySchema=[
           {
               'AttributeName': 'UserID',
               'KeyType': 'HASH'
           }
       ],
       AttributeDefinitions=[
           {
               'AttributeName': 'UserID',
               'AttributeType': 'S'
           }
       ],
       ProvisionedThroughput={
           'ReadCapacityUnits': 5,
           'WriteCapacityUnits': 5
       }
   )
   print("Table status:", table.table_status)
   

このコードは、DynamoDBでユーザーデータを格納するテーブルを作成するサンプルです。
キーの設計とスループットの設定に注意することで、効率的なデータ操作が可能になります。

IAMロールの作成

Lambda関数がDynamoDBにアクセスするためには、適切なIAMロールを作成する必要があります。
以下にIAMロールを作成する手順を示します。

1. IAMロールの作成:

   aws iam create-role --role-name LambdaDynamoDBRole --assume-role-policy-document file://trust-policy.json
   aws iam attach-role-policy --role-name LambdaDynamoDBRole --policy-arn arn:aws:iam::aws:policy/AmazonDynamoDBFullAccess
   

このコマンドは、Lambda関数がDynamoDBにフルアクセスできるIAMロールを作成する手順です。

Lambda関数の作成と設定

次に、Lambda関数を作成し、IAMロールをアタッチします。
以下にその手順を示します。

1. Lambda関数の作成:

   import json
   import boto3

   def lambda_handler(event, context):
       dynamodb = boto3.resource('dynamodb')
       table = dynamodb.Table('Users')
       
       response = table.put_item(
           Item={
               'UserID': event['UserID'],
               'Name': event['Name']
           }
       )
       
       return {
           'statusCode': 200,
           'body': json.dumps('User added successfully!')
       }
   

このコードは、DynamoDBにユーザー情報を追加するLambda関数のサンプルです。
作成したIAMロールをこの関数にアタッチします。

API Gatewayの設定

最後に、API Gatewayを設定してLambda関数を公開します。
以下にAPI Gatewayの設定手順を示します。

1. API Gatewayの作成:

   aws apigateway create-rest-api --name 'UserAPI'
   

2. リソースとメソッドの設定:

   aws apigateway create-resource --rest-api-id <api-id> --parent-id <parent-id> --path-part users
   aws apigateway put-method --rest-api-id <api-id> --resource-id <resource-id> --http-method POST --authorization-type NONE
   aws apigateway put-integration --rest-api-id <api-id> --resource-id <resource-id> --http-method POST --type AWS_PROXY --integration-http-method POST --uri arn:aws:apigateway:<region>:lambda:path/2015-03-31/functions/<function-arn>/invocations
   

この手順により、API Gatewayを設定し、Lambda関数を公開することができます。

import json
import boto3

def lambda_handler(event, context):
    dynamodb = boto3.resource('dynamodb')
    table = dynamodb.Table('Users')
    
    response = table.get_item(
        Key={
            'UserID': event['UserID']
        }
    )
    
    return {
        'statusCode': 200,
        'body': json.dumps(response['Item'])
    }

このコードは、API Gatewayを介して呼び出されるLambda関数のサンプルです。

AWSサーバーレスアーキテクチャのハンズオン:Lambda関数の作成とコーディング

Lambda関数は、AWSサーバーレスアーキテクチャの中心的な要素です。
このセクションでは、Lambda関数の作成からコーディング、テスト方法について詳しく説明します。
具体的なコード例を交えながら、実践的なハンズオンを進めていきます。

Lambda関数の作成手順

Lambda関数を作成するには、AWS Management ConsoleまたはAWS CLIを使用します。
以下に、AWS CLIを使用してLambda関数を作成する手順を示します。

1. Lambda関数の作成:

   aws lambda create-function \
       --function-name UserFunction \
       --runtime python3.8 \
       --role arn:aws:iam::123456789012:role/LambdaDynamoDBRole \
       --handler lambda_function.lambda_handler \
       --zip-file fileb://function.zip
   

このコマンドは、指定したZIPファイルからLambda関数を作成し、IAMロールをアタッチします。

Lambda関数のコーディング

次に、Lambda関数のコーディングについて説明します。
以下に、DynamoDBと連携するLambda関数の例を示します。

import json
import boto3

def lambda_handler(event, context):
    dynamodb = boto3.resource('dynamodb')
    table = dynamodb.Table('Users')
    
    # ユーザー情報の追加
    response = table.put_item(
        Item={
            'UserID': event['UserID'],
            'Name': event['Name']
        }
    )
    
    return {
        'statusCode': 200,
        'body': json.dumps('User added successfully!')
    }

このコードは、DynamoDBテーブルにユーザー情報を追加するLambda関数です。
`event`オブジェクトを通じて受け取ったユーザーIDと名前をDynamoDBに保存します。

Lambda関数のテスト

Lambda関数を作成したら、次にテストを行います。
AWS Management Consoleを使用してテストイベントを作成し、関数が期待通りに動作するか確認します。

1. テストイベントの作成:
AWS Management ConsoleでLambda関数のページを開き、「テスト」ボタンをクリックして新しいテストイベントを作成します。
以下に例を示します。

   {
       "UserID": "12345",
       "Name": "John Doe"
   }
   

2. テストの実行:
テストイベントを保存し、「テスト」ボタンをクリックしてLambda関数を実行します。
結果が予想通りであることを確認します。

boto3を使ってDynamoDBにアクセスする

Lambda関数内でDynamoDBにアクセスするためには、boto3ライブラリを使用します。
以下に、boto3を使用してDynamoDBテーブルからデータを取得する例を示します。

import json
import boto3

def lambda_handler(event, context):
    dynamodb = boto3.resource('dynamodb')
    table = dynamodb.Table('Users')
    
    # ユーザー情報の取得
    response = table.get_item(
        Key={
            'UserID': event['UserID']
        }
    )
    
    if 'Item' in response:
        return {
            'statusCode': 200,
            'body': json.dumps(response['Item'])
        }
    else:
        return {
            'statusCode': 404,
            'body': json.dumps('User not found')
        }

このコードは、指定されたユーザーIDに基づいてDynamoDBテーブルからユーザー情報を取得するLambda関数です。
ユーザーが存在する場合は情報を返し、存在しない場合は404エラーを返します。

Lambda関数のデプロイと管理

Lambda関数をデプロイする際には、バージョン管理と環境変数の設定が重要です。
以下に、これらの設定方法を示します。

1. バージョン管理:
Lambda関数の新しいバージョンを作成し、異なるバージョンを管理することができます。
以下に例を示します。

   aws lambda publish-version --function-name UserFunction
   

2. 環境変数の設定:
Lambda関数で使用する環境変数を設定します。
以下に例を示します。

   aws lambda update-function-configuration \
       --function-name UserFunction \
       --environment Variables={TABLE_NAME=Users}
   

このようにして、Lambda関数の設定を管理し、効率的に運用することができます。

AWSサーバーレスアーキテクチャのハンズオン:Webアプリの作成とAPIの呼び出し

このセクションでは、Streamlitを使用してWebアプリを作成し、作成したAPIを呼び出す方法について詳しく説明します。
具体的な手順とコード例を通じて、Webアプリの構築を実践します。

Cloud9環境の作成

まず、AWS Cloud9環境を作成します。
Cloud9は、クラウド上で動作する統合開発環境(IDE)で、複数のAWSサービスとシームレスに統合できます。

1. Cloud9環境の作成:
AWSマネジメントコンソールにログインし、Cloud9サービスを選択します。
新しい環境を作成し、必要な設定を行います。

2. 必要なツールのインストール:
Cloud9環境内で、以下のコマンドを実行して必要なツールをインストールします。

   sudo apt-get update
   sudo apt-get install -y python3-pip
   pip3 install boto3 streamlit
   

モジュールのインストール

Webアプリを作成するために必要なPythonモジュールをインストールします。
Streamlitは、データサイエンスや機械学習アプリケーションを簡単に作成できるフレームワークです。

pip3 install streamlit

StreamlitでWebサーバを立てる

次に、Streamlitを使用してWebサーバを立ち上げます。
以下に、基本的なStreamlitアプリの例を示します。

import streamlit as st
import requests

st.title('User Management App')

user_id = st.text_input('User ID:')
name = st.text_input('Name:')

if st.button('Add User'):
    response = requests.post('https://<api-id>.execute-api.<region>.amazonaws.com/prod/users', json={'UserID': user_id, 'Name': name})
    if response.status_code == 200:
        st.success('User added successfully!')
    else:
        st.error('Failed to add user.')

このコードは、Streamlitを使用してユーザー情報を追加する簡単なWebアプリの例です。
API Gatewayを通じてLambda関数を呼び出し、ユーザー情報をDynamoDBに保存します。

作成したAPIを呼び出す

Streamlitアプリから作成したAPIを呼び出すためのコードを示します。
ユーザー情報の追加や取得など、APIを使用してさまざまな操作を行います。

import streamlit as st
import requests

st.title('User Management App')

operation = st.selectbox('Operation', ['Add User', 'Get User'])

if operation == 'Add User':
    user_id = st.text_input('User ID:')
    name = st.text_input('Name:')
    if st.button('Add User'):
        response = requests.post('https://<api-id>.execute-api.<region>.amazonaws.com/prod/users', json={'UserID': user_id, 'Name': name})
        if response.status_code == 200:
            st.success('User added successfully!')
        else:
            st.error('Failed to add user.')
elif operation == 'Get User':
    user_id = st.text_input('User ID:')
    if st.button('Get User'):
        response = requests.get(f'https://<api-id>.execute-api.<region>.amazonaws.com/prod/users/{user_id}')
        if response.status_code == 200:
            user_info = response.json()
            st.write(user_info)
        else:
            st.error('User not found.')

このコードは、ユーザー情報の追加と取得を行うStreamlitアプリの例です。
API Gatewayを通じてLambda関数を呼び出し、DynamoDBと連携してユーザー情報を操作します。

デプロイ後のテストと運用

Webアプリをデプロイした後は、テストと運用が重要です。
API Gatewayのログを確認し、Lambda関数のパフォーマンスをモニタリングします。
以下に、テストと運用のポイントを示します。

1. API Gatewayのログ確認:
CloudWatch Logsを使用してAPI Gatewayのログを確認し、リクエストの詳細やエラーメッセージをチェックします。

2. Lambda関数のモニタリング:
CloudWatchメトリクスを使用してLambda関数の実行回数、エラー率、レイテンシなどをモニタリングし、パフォーマンスを評価します。

3. 定期的なメンテナンス:
アプリケーションのアップデートやバグ修正を定期的に行い、安定した運用を維持します。

これで、AWSサーバーレスアーキテクチャのハンズオンが完了です。
各ステップを通じて、AWSの各種サービスを活用したサーバーレスアーキテクチャの構築方法を学びました。
これを基に、さらに高度なアプリケーションを構築していくことができます。

AWSサーバーレスアーキテクチャのハンズオン:API Gatewayの設定とデプロイ後の運用

API Gatewayは、AWSサーバーレスアーキテクチャにおける重要なコンポーネントです。
このセクションでは、API Gatewayの設定手順とデプロイ後の運用方法について詳しく説明します。
具体的な手順とコード例を交えながら、API Gatewayを効果的に設定し、運用する方法を学びます。

API Gatewayの設定手順

API Gatewayを設定するには、AWS Management ConsoleまたはAWS CLIを使用します。
以下に、API Gatewayを設定するための具体的な手順を示します。

1. APIの作成:

   aws apigateway create-rest-api --name 'UserAPI'
   

2. リソースの作成:

   aws apigateway create-resource --rest-api-id <api-id> --parent-id <parent-id> --path-part users
   

3. メソッドの設定:

   aws apigateway put-method --rest-api-id <api-id> --resource-id <resource-id> --http-method POST --authorization-type NONE
   

4. 統合の設定:

   aws apigateway put-integration --rest-api-id <api-id> --resource-id <resource-id> --http-method POST --type AWS_PROXY --integration-http-method POST --uri arn:aws:apigateway:<region>:lambda:path/2015-03-31/functions/<function-arn>/invocations
   

5. デプロイ:

   aws apigateway create-deployment --rest-api-id <api-id> --stage-name prod
   

この一連のコマンドにより、API Gatewayを設定し、Lambda関数と連携させることができます。

API Gatewayの詳細設定

API Gatewayを設定する際には、セキュリティとパフォーマンスを考慮した詳細設定が重要です。
以下に、いくつかの重要な設定項目を示します。

1. CORS設定:
クロスオリジンリソースシェアリング(CORS)を設定することで、異なるドメインからのAPIアクセスを許可します。

   aws apigateway put-method-response --rest-api-id <api-id> --resource-id <resource-id> --http-method POST --status-code 200 --response-parameters method.response.header.Access-Control-Allow-Origin=true
   aws apigateway put-integration-response --rest-api-id <api-id> --resource-id <resource-id> --http-method POST --status-code 200 --response-parameters integration.response.header.Access-Control-Allow-Origin="'*'"
   

2. APIキーの作成と設定:
APIキーを作成し、APIへのアクセスを制限します。

   aws apigateway create-api-key --name 'MyApiKey' --enabled
   aws apigateway create-usage-plan --name 'MyUsagePlan' --api-stages apiId=<api-id>,stage=prod
   aws apigateway associate-api-key --usage-plan-id <usage-plan-id> --key-id <api-key-id>
   

3. スロットリングとレート制限:
APIの使用量を制限するために、スロットリングとレート制限を設定します。

   aws apigateway update-usage-plan --usage-plan-id <usage-plan-id> --patch-operations op=replace,path=/throttle/rateLimit,value=100
   

デプロイ後のテスト

APIをデプロイした後は、テストを行い、設定が正しく機能することを確認します。
以下に、Postmanやcurlを使用してAPIをテストする方法を示します。

1. Postmanを使用したテスト:
Postmanを使用してAPIを呼び出し、レスポンスを確認します。
適切なヘッダーとボディを設定してリクエストを送信し、期待されるレスポンスが返ってくることを確認します。

2. curlを使用したテスト:
curlを使用してAPIを呼び出し、レスポンスを確認します。

   curl -X POST https://<api-id>.execute-api.<region>.amazonaws.com/prod/users -d '{"UserID": "12345", "Name": "John Doe"}' -H "Content-Type: application/json"
   

運用とモニタリング

API GatewayとLambda関数の運用には、継続的なモニタリングとメンテナンスが必要です。
以下に、運用とモニタリングのポイントを示します。

1. CloudWatch Logsの確認:
CloudWatch Logsを使用してAPI GatewayとLambda関数のログを確認し、エラーやパフォーマンス問題を特定します。

2. CloudWatchメトリクスの使用:
CloudWatchメトリクスを使用して、APIのリクエスト数、エラーレート、レイテンシなどをモニタリングします。

3. アラームの設定:
CloudWatchアラームを設定して、特定の条件が満たされた場合に通知を受け取ります。

   aws cloudwatch put-metric-alarm --alarm-name "HighErrorRate" --metric-name Errors --namespace AWS/ApiGateway --statistic Sum --period 300 --threshold 1 --comparison-operator GreaterThanOrEqualToThreshold --evaluation-periods 1 --alarm-actions arn:aws:sns:<region>:<account-id>:<sns-topic>
   

4. 定期的なメンテナンス:
APIのバージョンアップやセキュリティパッチの適用を定期的に行い、安定した運用を維持します。

import json
import boto3

def lambda_handler(event, context):
    dynamodb = boto3.resource('dynamodb')
    table = dynamodb.Table('Users')
    
    response = table.put_item(
        Item={
            'UserID': event['UserID'],
            'Name': event['Name']
        }
    )
    
    return {
        'statusCode': 200,
        'body': json.dumps('User added successfully!')
    }

このコードは、DynamoDBにユーザー情報を追加するLambda関数の例です。
これをAPI Gatewayと連携させることで、WebアプリからAPIを通じてユーザー情報を操作できるようになります。

セキュリティのベストプラクティス

APIのセキュリティを確保するためには、以下のベストプラクティスを遵守することが重要です。

1. IAMポリシーの最小特権原則:
Lambda関数に割り当てるIAMロールには、必要最低限の権限のみを付与します。

2. APIキーと使用量プラン:
APIキーを使用してアクセスを制限し、使用量プランでリクエスト数を制御します。

3. WAFの導入:
AWS WAFを使用して、一般的な攻撃からAPIを保護します。

4. 監査とログの定期的な確認:
CloudWatch LogsとCloudTrailを使用して、APIの使用状況を監査し、不正なアクセスを検出します。

これで、AWSサーバーレスアーキテクチャのハンズオンが完了しました。
各ステップを通じて、DynamoDBの構築、Lambda関数の作成、API Gatewayの設定、そしてWebアプリの作成とAPIの呼び出しまでを実践的に学びました。
この知識を基に、さらに高度なサーバーレスアーキテクチャを構築していくことができるでしょう。

資料請求

RELATED POSTS 関連記事