Trong bước này, chúng ta sẽ tạo một hàm delete_order Lambda mới bằng cách sử dụng mẫu SAM.
Mở template.yaml trong mã nguồn bạn đã tải xuống trước đó.
Comment khối mã này.
# BookApiDeployment:
# Type: AWS::ApiGateway::Deployment
# Properties:
# RestApiId: !Ref BookApi
# DependsOn:
# - BookApiGet
# - BookApiCreate
# - BookApiDelete
# - LoginApi
# - RegisterApi
# - ConfirmApi
# - FCAJCheckoutOrderApi
# - FCAJOrderManagementApi
# - FCAJHandleOrderApi
BookApiStage:
Type: AWS::ApiGateway::Stage
Properties:
RestApiId: !Ref BookApi
StageName: !Ref stage
# DeploymentId: !Ref BookApiDeployment

Chạy các lệnh dưới đây.
sam validate
sam build

Triển khai stack đã cập nhật.
sam deploy

Chờ triển khai hoàn tất.

Mở template.yaml trong mã nguồn bạn đã tải xuống trước đó.
Thêm các đoạn mã sau để tạo hàm FCAJDeleteOrder.
FCAJDeleteOrderFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: fcaj-book-shop/delete_order
Handler: delete_order.lambda_handler
Runtime: python3.13
FunctionName: delete_order
Environment:
Variables:
SQS_QUEUE_URL: !Ref checkoutQueueUrl
Architectures:
- x86_64
Policies:
- Statement:
- Sid: VisualEditor0
Effect: Allow
Action:
- sqs:*
Resource:
- !Sub "arn:aws:sqs:${AWS::Region}:${AWS::AccountId}:${checkoutQueueName}"

FCAJDeleteOrderApi:
Type: AWS::ApiGateway::Method
Properties:
HttpMethod: DELETE
RestApiId: !Ref BookApi
ResourceId: !Ref FCAJCheckoutOrderResource
AuthorizationType: NONE
Integration:
Type: AWS_PROXY
IntegrationHttpMethod: POST # For Lambda integrations, you must set the integration method to POST
Uri: !Sub >-
arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${FCAJDeleteOrderFunction.Arn}/invocations
MethodResponses:
- StatusCode: "200"
ResponseParameters:
method.response.header.Access-Control-Allow-Origin: true
method.response.header.Access-Control-Allow-Methods: true
method.response.header.Access-Control-Allow-Headers: true
FCAJDeleteOrderApiInvokePermission:
Type: AWS::Lambda::Permission
Properties:
FunctionName: !Ref FCAJDeleteOrderFunction
Action: lambda:InvokeFunction
Principal: apigateway.amazonaws.com
SourceAccount: !Ref "AWS::AccountId"

Cấu trúc thư mục như sau.
fcaj-book-shop
├── fcaj-book-shop
│ ├── checkout_order
│ │ └── checkout_order.py
│ ├── order_management
│ │ └── order_management.py
│ ├── handle_order
│ │ └── handle_order.py
│ ├── delete_order
│ │ └── delete_order.py
│ ├── ...
│
└── template.yaml
Tạo thư mục delete_order trong thư mục fcaj-book-shop/fcaj-book-shop/.
Tạo tệp delete_order.py và sao chép mã sau vào đó.
import json
import boto3
import os
headers = {
"Content-Type": "application/json",
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods": "OPTIONS,POST,GET,DELETE",
"Access-Control-Allow-Headers": "Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token"
}
sqs = boto3.client('sqs')
# Get value of the environment variables
queue_url = os.getenv('SQS_QUEUE_URL')
def lambda_handler(event, context):
order = json.loads(event['body'])
try:
if 'receiptHandle' in order and order['receiptHandle']:
sqs.delete_message(
QueueUrl=queue_url,
ReceiptHandle=order['receiptHandle']
)
else:
raise Exception("No receiptHandle provided")
except Exception as e:
print(f"Error deleting order: {e}")
raise Exception(f"Error deleting order: {e}")
return {
'statusCode': 200,
'headers': headers,
'body': json.dumps('Order deleted successfully')
}

Bỏ comment khối mã này.
BookApiDeployment:
Type: AWS::ApiGateway::Deployment
Properties:
RestApiId: !Ref BookApi
DependsOn:
- BookApiGet
- BookApiCreate
- BookApiDelete
- LoginApi
- RegisterApi
- ConfirmApi
- FCAJCheckoutOrderApi
- FCAJOrderManagementApi
- FCAJHandleOrderApi
- FCAJDeleteOrderApi
BookApiStage:
Type: AWS::ApiGateway::Stage
Properties:
RestApiId: !Ref BookApi
StageName: !Ref stage
DeploymentId: !Ref BookApiDeployment

Chạy các lệnh dưới đây.
sam validate
sam build

Triển khai stack đã cập nhật.
sam deploy

Chờ triển khai hoàn tất.

Mở Amazon API Gateway console.



