1.ã¯ããã«
ããã«ã¡ã¯ããã®åº¦ç¬¬äºæ°åã§å ¥ç¤¾ãããã¾ãããå ãªã³ãã¬ãã¹ã¨ã³ã¸ãã¢ã®å±±æ¬ã§ãã
å¦ç¿ã¨ãã¦çµé¨ããã¯ã©ã¦ãç°å¢ã®æ§ç¯ãããªã³ãã¬æä»£ã¨æ¯ã¹ã¦å§åçã«éããããã¦ã·ã³ãã«ã§ãããã¨ã«è¡æãåãã¾ããã
ãã®æåãå ã«ä»åçµé¨ããæ§ç¯ã®å 容ãåå¿è ã®æ¹ã«ãåããããããä¼ããã¾ãï¼
1.1 ãã®è¨äºã§ç´¹ä»ãããã¨
ãã®è¨äºã§ã¯ãAWS DynamoDBä¸ã§ç»é²ãããã¼ã¿ãAPI Gatewayã使ç¨ãã¦ãæå ã®Webãã©ã¦ã¶ã§è¡¨ç¤ºããæ¹æ³ãç´¹ä»ãã¾ãã
1.2 対象èªè
ã¨ã«ããAWSã«èå³ããã人ããã¼ã¿ãã¼ã¹ã®åããAPIã®æ¦å¿µãããªãã¨ãªããã§ãããã£ã¦ãã人
1.3 ãã®è¨äºã§å¾ããããã¨
åãµã¼ãã¹ã®å½¹å²ã®çè§£ã¨ãµã¼ãã¹å士ã®çµåé¨åã®æ§æã®ã¤ã¡ã¼ã¸ãã¾ããã³ã³ã½ã¼ã«æä½ã§ã®å®è·µçµé¨
2.ä»å使ãããã®(ã¤ã¡ã¼ã¸)
2.1 宿ã¤ã¡ã¼ã¸

2.2 åãµã¼ãã¹ã®å½¹å²ã¨é£æº(2.1 ã®è§£èª¬)
API Gatewayï¼REST API ãç°¡åã«ä½æãå ¬éãç¶æãç£è¦ã§ãããµã¼ãã¹ãä»åã¯Webãã©ã¦ã¶ããã®HTTPãªã¯ã¨ã¹ããåãåããLambdaã«è»¢éããå½¹å²ãæã¤ã
â»ä»åã¯ãã¼ã¿ã®ä½æ,èªã¿åã,æ´æ°,åé¤ã¨ãã£ãCRUDæä½ãä¸å¿ã¨ãªã£ã¦ããã®ã§ç´æçã«è¨è¨ã®ã§ããRESTãé¸åºã
Lambdaï¼ãµã¼ãã¼ã管çããã«ã³ã¼ããå®è¡ã§ãããµã¼ãã¹ãAPI Gatewayããã®ãªã¯ã¨ã¹ããåãã¦DynamoDBãããã¼ã¿ãåå¾ããå¦çãè¡ãã
DynamoDBï¼ãã«ããã¼ã¸ã(AWSå´ã§å®å ¨ç®¡çããã¦ãã)ãªNoSQLãã¼ã¿ãã¼ã¹ãä»åã®å½¹å²ã¯ã¦ã¼ã¶ã¼ãã¼ã¿ãç»é²ã»ä¿åããå ´æã
3.å®è£ æé
3.1 DynamoDBãã¼ãã«ã®ä½æ
ä»åç»é²ãããã¼ã¿ãã¼ã¹ã¯ä»¥ä¸ã®ãããªæãã
| UserID | Name | BirthPlace |
|---|---|---|
| 0001 | Sato | Tokyo |
| 0002 | Suzuki | Aichi |
| 0003 | Takahashi | Saitama |
| 0004 | Tanaka | Saitama |
1. AWSã³ã³ã½ã¼ã«ã«ãã°ã¤ã³ããDynamoDBã鏿ãã¦ããã¼ãã«ã®ä½æãã鏿
2. ãã¼ãã«åï¼UsersTable
ããã¼ãã£ã·ã§ã³ãã¼ï¼UserID(æåå)
ããã¼ãã«è¨å®ï¼ããã©ã«ãè¨å®
ããã以å¤ã¯ããã©ã«ãã®ã¾ã¾ã§OKãâ»ä»¥ä¸ç»ååç §
3.å·¦å´ã¡ãã¥ã¼ããã¼ãã«ãã鏿ãã¦ãã¼ãã«åã確èªãããã¼ãã«åãã¯ãªãã¯
4.ããã¼ãã«ã¢ã¤ãã ã®é¸æããã¯ãªãã¯
5.ä¸å´ã«ã¹ã¯ãã¼ã«ãããè¿ãããé ç®ãæ¬ã®ãé ç®ã使ããã¯ãªãã¯
ãâ»ä»åã¯æ¢ã«å®è¡æ¸ã¿ãªã®ã§ãã¼ã¿ãåå¨ãã¦ãããæ¬æ¥ã¯ç©ºã®ã¯ãã
6.ãæ°ãã屿§ã®è¿½å ããã¯ãªãã¯ãã¦å±æ§(DBã®ãã£ã¼ã«ã)ã追å ãã¦ãã¼ã¿ãã¼ã¹ãåèã«ãã¦å¤ãå ¥åãã¦ãé ç®ã使ããã¯ãªãã¯ã
â»ä»åã¯å±æ§ãå ¨ã¦ãæååãã§å®ç¾©
7. ä¸è¨6ã®ä½æ¥ããã¼ã¿ã®æ°ã ãç¹°ãè¿ãã¦ãã¼ã¿ãã¼ã¹ã宿ãããã
3.2 Lambda颿°ã®ä½æ
1.æ¤ç´¢ãã¼ã«ãLambdaãã¨å ¥åãã¦ãµã¼ãã¹ã¸ç§»å
2.å·¦å´ã®ããã²ã¼ã·ã§ã³ãã¤ã³ã§ã颿°ãã鏿ããã颿°ã®ä½æããã¿ã³ãã¯ãªãã¯
3. 颿°åï¼GetUsersDataFunction
ãã©ã³ã¿ã¤ã ï¼Python3.13
ãã¢ã¼ããã¯ãã£ï¼x86_64
ããã以å¤ã¯ããã©ã«ãã®ã¾ã¾ã§OKãâ»ä»¥ä¸ç»ååç §
ãä¸å´ã«ã¹ã¯ãã¼ã«ããã颿°ã使ããã¿ã³ãã¯ãªãã¯ã
â»ãã§ã«é¢æ°ã¯ä½æãã¦ããã®ã§ä»åã¯é¢æ°åã§ã¨ã©ã¼è¡¨ç¤ºã¨ãªã£ã¦ãã
4.颿°ã®ä¸è¦§ãã使ãã颿°ãã¯ãªãã¯ãã¦è©³ç´°ç»é¢ã表示ãããè¨å®ãã¿ãã®ãã¢ã¯ã»ã¹æ¨©éããã¯ãªãã¯ãããã¼ã«åãã¯ãªãã¯ãã¦IAMã«ç§»å
5.ã許å¯ãã¿ã°ããã許å¯ã追å ããã¯ãªãã¯ãã¦ãããªã·ã¼ãã¢ã¿ãããã鏿
6.ããã®ä»ã®è¨±å¯ããªã·ã¼ãæ¬ã®æ¤ç´¢çªã«ãDynamoDBReadãã¨å ¥åããã¨ãAmazonDynamoDBReadOnlyAccessããæ¤ç´¢çµæã¨ãã¦è¡¨ç¤ºãããã®ã§ãã§ãã¯ããã¯ã¹ããªã³ã«ãã¦ã許å¯ã追å ããã¿ã³ãã¯ãªãã¯ã
â»ä»åã¯ãã§ã«ã¢ã¿ããæ¸ã¿
7.Lambdaã®ã¦ã¤ã³ãã¦ã«æ»ãããã³ã¼ããã¿ãã鏿ãã¦ã³ã¼ãã½ã¼ã¹ã®ç»é¢ã表示ããã
8.ã³ã¼ãã¨ãã£ã¿ã«ä»¥ä¸ã®ã³ã¼ããè²¼ãä»ããã
import json
import boto3
from botocore.exceptions import ClientError
# DynamoDBã¯ã©ã¤ã¢ã³ããåæå
dynamodb = boto3.resource('dynamodb')
table_name = 'UsersTable'
table = dynamodb.Table(table_name)
def lambda_handler(event, context):
try:
# DynamoDBããå
¨ã¦ã®é
ç®ãåå¾
response = table.scan()
items = response.get('Items', [])
# DynamoDBããåå¾ããé
ç®ãJSONã§è¿ãããã«æ´å½¢
for item in items:
for key, value in item.items():
if isinstance(value, type(boto3.dynamodb.types.Decimal('0'))):
item[key] = float(value) # ã¾ã㯠int(value)
return {
'statusCode': 200,
'headers': {
'Content-Type': 'application/json',
'Access-Control-Allow-Origin': '*', # CORS対å¿ï¼ã©ã®ãªãªã¸ã³ããã®ã¢ã¯ã»ã¹ã許å¯
'Access-Control-Allow-Methods': 'GET,OPTIONS',
'Access-Control-Allow-Headers': 'Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token'
},
'body': json.dumps(items, ensure_ascii=False) # æ¥æ¬èªå¯¾å¿
}
except ClientError as e:
# DynamoDBã¯ã©ã¤ã¢ã³ãé¢é£ã®ã¨ã©ã¼ãã³ããªã³ã°
print(f"DynamoDB Client Error: {e.response['Error']['Message']}")
return {
'statusCode': 500,
'headers': {
'Content-Type': 'application/json',
'Access-Control-Allow-Origin': '*'
},
'body': json.dumps({'error': e.response['Error']['Message']})
}
except Exception as e:
# ãã®ä»ã®ä¸è¬çãªã¨ã©ã¼ãã³ããªã³ã°
print(f"General Error: {e}")
return {
'statusCode': 500,
'headers': {
'Content-Type': 'application/json',
'Access-Control-Allow-Origin': '*'
},
'body': json.dumps({'error': str(e)})
}
9.ã³ã¼ãã¨ãã£ã¿å ã®ãDeployããã¿ã³ãã¯ãªãã¯
3.3API Gatewayã®ä½æã¨è¨å®
Lambda颿°ãHTTPã¨ã³ããã¤ã³ãã¨ãã¦å ¬éããããã®API Gatewayã使ãã¾ãã
1.æ¤ç´¢ãã¼ã«ãAPI Gatewayãã¨å ¥åãã¦ãµã¼ãã¹ã¸ç§»å
2.ãAPIã®ä½æããã¯ãªãã¯
3.ä»åã¯REST APIã§æ§ç¯ããã®ã§REST APIæ¬ã®ãæ§ç¯ããã¯ãªãã¯
4. APIåï¼UsersDataAPI
ã説æï¼API for retrieving user data from DynamoDB
ããã®ä»ã¯ããã©ã«ãã§OKããAPIã使ããã¯ãªãã¯ã
5.使å®äºãããèªåçã«API詳細ãã¼ã¸ã«ãªãã®ã§ãã«ã¼ããªã½ã¼ã¹(/)ã鏿ããã¦ããã®ã確èªãã¦ããªã½ã¼ã¹ã®ä½æããã¯ãªãã¯
6.ãªã½ã¼ã¹åï¼usersã¨ãã¦CORSã«ãã§ãã¯ãã¤ãã¦ããªã½ã¼ã¹ã使ããã¯ãªãã¯
7.ã³ã³ã½ã¼ã«ä¸ã§ãªã½ã¼ã¹ãusersãã鏿ããã¦ãããã¨ã確èªãã¦ãã¡ã½ããã使ããã¯ãªãã¯
8.ã¡ã½ããã¿ã¤ãï¼GETã¨ãã¦ãå ç¨ä½æããLambda颿°ãè¨å®ããä¸å´ã«ã¹ã¯ãã¼ã«ãã¦ãã¡ã½ããã使ããã¯ãªãã¯
9.é©ç¨ããããã³ã³ã½ã¼ã«ã«æ»ãã®ã§ããAPIããããã¤ããã¯ãªã㯠ããã®æã以ä¸ã®ããã«ã¹ãã¼ã¸ã®è©³ç´°ãèãããã®ã§ã¹ãã¼ã¸åã¯prodã§ä½æããã

4.åä½ç¢ºèª
æå ã®webãã©ã¦ã¶ããAPIã®ã¨ã³ããã¤ã³ãã«ã¢ã¯ã»ã¹ãããã¨ã§Lambda颿°ãåããã帰ã£ã¦ããå¤ãè¦ã¦ã¿ã¾ãããã
1.AWSã³ã³ã½ã¼ã«ä¸ã§Lambdaã®ãã¼ã¸ã«é·ç§»
2.ãµã¤ããã¼ã®ã颿°ãããä»å使ããGetUsersDataFunctionãã¯ãªãã¯ããé¢é£ä»ãããã¦ããAPI Gatewayãã¯ãªãã¯ãã¦è¨å®ç»é¢ãéãã
3.APIã¨ã³ããã¤ã³ããã¯ãªãã¯ãã¦Webãã©ã¦ã¶ããAPIã¨ã³ããã¤ã³ãã¸æ¥ç¶
4.æåãã¦ããã°ã以ä¸ã®ãããªãã¼ã¿ãå«ã¾ããæååã表示ãããã
[
{
"Name": "Sato",
"UserID": "0001",
"Birthplace": "Tokyo"
},
{
"Name": "Suzuki",
"UserID": "0002",
"Birthplace": "Aichi"
},
{
"Name": "Takahashi",
"UserID": "0003",
"Birthplace": "Saitama"
},
{
"Name": "Tanaka",
"UserID": "0004",
"Birthplace": "Saitama"
}
]
5.ã¾ã¨ã
ä»åã®è¨äºã§ã¯ãAWSã®ä»£è¡¨çãªãµã¼ãã¼ã¬ã¹ãµã¼ãã¹ã§ãã Amazon API GatewayãAWS Lambdaããã㦠Amazon DynamoDB ã飿ºãããWebãã©ã¦ã¶ããDynamoDBã®ãã¼ã¿ãåç §ã§ããã·ã³ãã«ãªAPIãæ§ç¯ãã¾ããã
æåã§ã®ãµã¼ãã¼æ§ç¯ã管çãä¸åè¡ãããAWSã³ã³ã½ã¼ã«ä¸ã§ã®è¨å®ã¨å°éã®Pythonã³ã¼ãã ãã§ãWebããã¢ã¯ã»ã¹å¯è½ãªãã¼ã¿åå¾APIã宿ãããã¨ãä½é¨ããã ãããã¨æãã¾ãã(å ãªã³ãã¬ã¨ã³ã¸ãã¢ã®ç§ãæ¬å½ã«æåãã¾ãã)
ä»å使ããä»çµã¿ã¯ãã¼ã¿ã®èªã¿åãã ãã§ãããããã®æ§æãå¿ç¨ããã¨
- DBå ã®ãã¼ã¿æ´æ°ã¨åé¤
- ã»ãã®AWSãµã¼ãã¹(SQSãSNS)ã¨é£æºãã¦ã®éåæå¦ç
- ãã£ãããããã®ããã¯ã¨ã³ã
ã®ããã«æ§ã
ãªå ´é¢ã§å¿ç¨ã§ãã¾ãã
ãµã¼ãã¼ã¬ã¹ãªæ§æã¯ãç¾ä»£ã®Webã¢ããªã±ã¼ã·ã§ã³éçºã«ããã¦é常ã«å¼·åãªãã¼ã«ã§ããä»åã®çµé¨ãæ´»ããã¦ãããã«æ§ã ãªãµã¼ãã¼ã¬ã¹ã¢ããªã±ã¼ã·ã§ã³ã®æ§ç¯ã«ææ¦ãã¦ããã¾ãããï¼
å±±æ¬ ç«ä¹ (è¨äºä¸è¦§)
2025年度æ°å ¥ç¤¾å¡ã§ãï¼AWSã«ã¤ãã¦ã¯ã»ã¼æªçµé¨ãªã®ã§ããããã¢ã¦ããããã§ããããé å¼µãã¾ãâ¨