AWS Lambda&S3 | SNS |自动化JSON文件从S3存储桶中处理,并使用lambda [Python]在MySQL中推出数据
#aws #python #lambda #s3

内容表

  • 为lambda创建角色
  • 创建S3桶
  • 创建SNS主题
  • 在EC2实例上安装和配置MySQL
  • 创建lambda函数并添加S3触发器
  • 为lambda创建一个软件包
  • 创建JSON文件并将其上传到S3桶
  • Testing

为Lambda创建角色

转到AWS控制台 - > iam > 角色 - > 创建角色

Role for lambda
添加 s3 CloudWatch sns 的权限,然后单击创建角色

Giving access to

创建 S3

转到AWS控制台 - > s3 - > bucket - > 创建桶

S3 Bucket
选择 ACL禁用(推荐)
ACL
取消选中“ 阻止所有公共访问
S3 Public access
将其他内容留为默认值,然后单击创建桶

创建SNS主题

  1. 确保您在 US East(N. Virginia)us-East-1 区域。

  2. 通过单击 Services 菜单 应用程序集成节。

  3. 单击主题在左图中。

  4. 选择类型为标准

  5. 详细信息:

  • 名称:输入 mysnsnotification
  • 显示名称:输入 mysnsnotification

SNS Topic

将其他选项留为默认选项,然后单击创建主题

现在创建了 sns 主题。

Topic ARN

复制ARN并将其保存为以后。

创建SNS主题后,向下滚动,然后单击创建订阅
在详细信息中:

  • 协议:选择电子邮件
  • 端点:输入
  • 注意:确保您提供有效的电子邮件地址,因为您将收到有关此电子邮件地址的SNS通知。
  • 如果您没有在收件箱中看到电子邮件,请检查垃圾邮件框。

您将收到一封电子邮件,确认您的电子邮件订阅。
单击确认订阅
您的电子邮件地址现在已订阅SNS主题 mysnsnotification

在EC2实例上安装和配置MySQL

启动EC2实例的步骤

1 。确保您在 US East(n。Virginia)us-East-1 地区。

2 。通过单击顶部的 Services 菜单来导航到 EC2 ,然后单击 EC2 Computer 部分中。

3 。导航到实例在左图上,然后单击启动实例

Launching EC2 instance
4 。输入名称为 myinstance
5 。选择 Amazon Machine Image(AMI):在搜索框中搜索 ubuntu ,然后单击“选择”按钮。

Ubuntu AMI

6 。选择一个实例类型:选择 t2.micro

Instance Type

7 。对于钥匙对:选择创建一个新的密钥对

  • 关键对名称:输入 mykey
  • 钥匙对类型:选择 RSA
  • 私钥文件格式:选择 .pem

EC2 Key pair

8 。在网络设置下

  • 选择创建安全组
  • 检查允许来自任何地方的SSH流量
  • 检查允许MySQL/Aurora流量来自任何地方

Security Group

9 。保留其他设置为默认单击启动实例按钮。

10 .now ssh 使用命令;

  • "ssh -i 'Mykey'ubuntu@'EC2_public_IP'"

SSH into EC2

现在使用命令在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

bind-address 设置为 0.0.0.0

使用命令;

启动系统
  • "sudo su"
  • "systemctl restart mysql"

创建lambda功能并添加触发器

  1. 导航到顶部的服务菜单,然后单击 lambda compute 部分。
  2. 单击创建功能

选择作者从头开始

Lambda function

  • 功能名称:输入 myFunction
  • 运行时:选择 Python 3.9

Configuring function

  • 权限:选择使用现有角色
  • 选择我们朴素创造的角色

Use IAM role for lambda

  • 单击创建Fucntion 按钮。

成功创建了lambda函数,它将看起来像下面的屏幕截图。

lambda function

现在添加lambda函数的S3触发器。

S3 trigger
从触发列表中选择 s3 并输入以下详细信息:

  • 存储桶:选择您的水桶 mys3bucket
  • 事件类型:选择 put
  • 后缀: .json

details for trigger

并检查此选项的递归调用以避免失败,以防您一次上传多个文件并检查已确认的选项。

lambda

单击添加

S3 trigger

现在添加了 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\

command

从桌面到文件夹模块我们使用命令:
cd .\module\
command

现在我们在模块中文件夹。因此,我们使用命令在此文件夹中安装依赖项:

pip install -t $PWD mysql-connector-python

Folder
现在创建一个 lambda_function.py 文件,然后将上述代码粘贴到所需的更改(用户名,密码和主机)。

Folder
制作此文件夹的 .zip 文件,然后将其上传到lambda函数中。

zip file
导航到lambda功能并上传 .zip 文件。

zip file

测试

现在是时候测试我们的系统了。为此,创建一个 .json 文件并将其上传到S3存储桶上。如果 JSON 文件的数据成功地上传到MySQL数据库中,则将收到电子邮件。

SNS emial
如果会出现一些错误并且未插入数据,那么我们将收到一封电子邮件。

SNS Email