样题一:
1. 创建Flask应用文件/root/api.py:
from flask import Flask, request, jsonify
import boto3
import psycopg2
app = Flask(__name__)
dynamodb = boto3.resource(
'dynamodb',
region_name='us-east-1',
)
table = dynamodb.Table('data_table1')
rds_host = ""RDS节点端口
db_name = ""初始数据库名
username = "" root
password = ""自己设置的密码
@app.route('/post_data1', methods=['POST'])
def post_data1():
try:
data = request.json
table.put_item(Item=data)
return jsonify({"message": "Data stored in DynamoDB"}), 200
except Exception as e:
return jsonify({"error": str(e)}), 500
@app.route('/post_data2', methods=['POST'])
def post_data2():
try:
data = request.json
conn = psycopg2.connect(
host=rds_host,
database=db_name,
user=username,
password=password,
connect_timeout=3
)
cur = conn.cursor()
cur.execute("""
CREATE TABLE IF NOT EXISTS data_table2 (
id VARCHAR(255) PRIMARY KEY,
value VARCHAR(255)
)
""")
cur.execute("""
INSERT INTO data_table2 (id, value)
VALUES (%s, %s)
ON CONFLICT (id) DO UPDATE SET value = EXCLUDED.value
""", (data['id'], data['value']))
conn.commit()
return jsonify({"message": "Data stored in RDS"}), 200
except Exception as e:
return jsonify({"error": str(e)}), 500
finally:
if 'conn' in locals():
conn.close()
@app.route('/get_value', methods=['GET'])
def get_value():
try:
id = request.args.get('id')
if not id:
return jsonify({"error": "ID is required"}), 400
# 从DynamoDB获取值
response = table.get_item(Key={'id': id})
if 'Item' not in response:
return jsonify({"error": "ID not found in DynamoDB"}), 404
dynamo_value = int(response['Item']['value'])
# 从RDS获取值
conn = psycopg2.connect(
host=rds_host,
database=db_name,
user=username,
password=password,
connect_timeout=3
)
cur = conn.cursor()
cur.execute("SELECT value FROM data_table2 WHERE id = %s", (id,))
result = cur.fetchone()
if not result:
return jsonify({"error": "ID not found in RDS"}), 404
rds_value = int(result[0])
return jsonify({"message": str(dynamo_value + rds_value)}), 200
except Exception as e:
return jsonify({"error": str(e)}), 500
finally:
if 'conn' in locals():
conn.close()
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
nohup python3 api.py & netstat -ntpl
3.下载创建Nginx配置文件
yum -y install nginx
vim /etc/nginx/conf.d/api.conf
server {
listen 80;
server_name _;
location / {
proxy_pass http://localhost:5000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
4. 重启Nginx:
sudo systemctl restart nginx
5测试是否做对
[root@ip-172-31-95-55 ~]# curl -X POST http://54.158.180.27/post_data1 -H "Content-Type: application/json" -d '{"id":"02", "value":"123"}'
{"message":"Data stored in DynamoDB"}
[root@ip-172-31-95-55 ~]# curl -X POST http://54.158.180.27/post_data2 -H "Content-Type: application/json" -d '{"id":"02", "value":"456"}'
{"message":"Data stored in RDS"}
[root@ip-172-31-95-55 ~]# curl -X GET "http://54.158.180.27/get_value?id=02"
{"message":"579"}