内容表
- 为lambda创建角色
- 创建S3桶
- 创建SNS主题
- 在EC2实例上安装和配置MySQL
- 创建lambda函数并添加S3触发器
- 为lambda创建一个软件包
- 创建JSON文件并将其上传到S3桶
- Testing
为Lambda创建角色
转到AWS控制台 - > iam > 角色 - > 创建角色
添加 s3 , CloudWatch 和 sns 的权限,然后单击创建角色。
创建 S3 桶
转到AWS控制台 - > s3 - > bucket - > 创建桶
选择 ACL禁用(推荐)
取消选中“ 阻止所有公共访问”
将其他内容留为默认值,然后单击创建桶。
创建SNS主题
-
确保您在 US East(N. Virginia)us-East-1 区域。
-
通过单击 Services 菜单 应用程序集成节。
-
单击主题在左图中。
-
选择类型为标准。
-
详细信息:
- 名称:输入 mysnsnotification
- 显示名称:输入 mysnsnotification
将其他选项留为默认选项,然后单击创建主题。
现在创建了 sns 主题。
复制ARN并将其保存为以后。
创建SNS主题后,向下滚动,然后单击创建订阅。
在详细信息中:
- 协议:选择电子邮件
- 端点:输入
- 注意:确保您提供有效的电子邮件地址,因为您将收到有关此电子邮件地址的SNS通知。
- 如果您没有在收件箱中看到电子邮件,请检查垃圾邮件框。
您将收到一封电子邮件,确认您的电子邮件订阅。
单击确认订阅。
您的电子邮件地址现在已订阅SNS主题 mysnsnotification 。
在EC2实例上安装和配置MySQL
启动EC2实例的步骤
1 。确保您在 US East(n。Virginia)us-East-1 地区。
2 。通过单击顶部的 Services 菜单来导航到 EC2 ,然后单击 EC2 在 Computer 部分中。
3 。导航到实例在左图上,然后单击启动实例
4 。输入名称为 myinstance
5 。选择 Amazon Machine Image(AMI):在搜索框中搜索 ubuntu ,然后单击“选择”按钮。
6 。选择一个实例类型:选择 t2.micro
7 。对于钥匙对:选择创建一个新的密钥对。
- 关键对名称:输入 mykey
- 钥匙对类型:选择 RSA
- 私钥文件格式:选择 .pem
8 。在网络设置下
- 选择创建安全组
- 检查允许来自任何地方的SSH流量
- 检查允许MySQL/Aurora流量来自任何地方
9 。保留其他设置为默认单击启动实例按钮。
10 .now ssh 使用命令;
-
"ssh -i 'Mykey'ubuntu@'EC2_public_IP'"
现在使用命令在EC2上安装mySQL:
"sudo apt update"
-
"sudo apt install mysql-server"
使用命令:
输入MySQL作为root用户输入"sudo mysql"
现在使用命令为任何主机创建用户:
"CREATE USER 'user'@'%' IDENTIFIED WITh mysql_native_password BY 'password';"
使用命令向用户授予特权:
"GRANT ALL PRIVILEGES ON *.* TO 'user'@'%' WITH GRANT OPTION;"
输入“退出”命令从mysql中退出。
现在,我们必须为用户打开连接,以便我们从任何主机连接到MySQL。对于我们必须使用命令:
更改MySQL数据库的绑定地址"sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf"
将 bind-address 设置为 0.0.0.0 。
使用命令;
启动系统"sudo su"
"systemctl restart mysql"
创建lambda功能并添加触发器
- 导航到顶部的服务菜单,然后单击 lambda compute 部分。
- 单击创建功能
选择作者从头开始
- 功能名称:输入 myFunction
- 运行时:选择 Python 3.9
- 权限:选择使用现有角色
- 选择我们朴素创造的角色
- 单击创建Fucntion 按钮。
成功创建了lambda函数,它将看起来像下面的屏幕截图。
现在添加lambda函数的S3触发器。
- 存储桶:选择您的水桶 mys3bucket
- 事件类型:选择 put
- 后缀: .json
并检查此选项的递归调用以避免失败,以防您一次上传多个文件并检查已确认的选项。
单击添加。
现在添加了 s3 触发器。每当 .json 文件上载S3时,我们的lambda函数就会触发。
现在,我们将代码上传到lambda函数中。代码将要做什么:
- 访问并从S3存储桶中读取文件。
- 从文件中解析数据并格式化数据。
- 构建mySQL连接。
- 将数据插入mysql。
- 成功插入后发送了SNS通知。
- 对于不成功的插入发送了SNS通知。
import mysql.connector
import mysql.connector.errors
import ast
import boto3
s3_client = boto3.client('s3')
sns_client = boto3.client('sns')
def lambda_handler(event,context):
bucket = event['Records'][0]['s3']['bucket']['name']
json_file_name = event['Records'][0]['s3']['object']['key']
json_object = s3_client.get_object(Bucket=bucket,Key=json_file_name)
file_reader = json_object['Body'].read().decode("utf-8")
file_reader = ast.literal_eval(file_reader)
print(file_reader)
try:
connection = mysql.connector.connect(user='userr', password='password', host='EC2_public_IP', port=3306,database ='dbname')
if connection.is_connected():
print("connection is done ")
cursor = connection.cursor()
for obj in file_reader:
query = "INSERT INTO data1(Name, Email,phone)VALUES(%s,%s,%s)"
val = (obj['Name'], obj['Email'], obj['phone'])
cursor.execute(query, val)
connection.commit()
print('inserted')
cursor.close()
sns_client.publish(TopicArn='Topic_arn', Message='Data is successfully inserted into mysql database', Subject='Data insertion')
except:
sns_client.publish(TopicArn='Topic_arn', Message='Data is not successfully inserted into mysql database', Subject='Data not insert')
在上面的代码中输入数据库用户名和密码的值,主机IP和SNS ARN。
如果我们将此代码上传到lambda中,则不会运行它,因为我们必须打包模块的库, mysql-connector-python 。
为lambda创建包装
为此,我们使用Windows PowerShell将模块依赖项安装在文件夹中。
我们首先在桌面上创建一个带有名称模块的文件夹。使用Windows PowerShell,我们直接进入模块文件夹并运行命令:
“ cd .\Desktop\
”
从桌面到文件夹模块我们使用命令:
“ cd .\module\
”
现在我们在模块中文件夹。因此,我们使用命令在此文件夹中安装依赖项:
“ pip install -t $PWD mysql-connector-python
”
现在创建一个 lambda_function.py 文件,然后将上述代码粘贴到所需的更改(用户名,密码和主机)。
制作此文件夹的 .zip 文件,然后将其上传到lambda函数中。
测试
现在是时候测试我们的系统了。为此,创建一个 .json 文件并将其上传到S3存储桶上。如果 JSON 文件的数据成功地上传到MySQL数据库中,则将收到电子邮件。