概述
默认情况下,Lambda功能是在我们的VPC之外启动的。因此,它无法访问VPC中的RDS,Elasticache,Internal Alb等等资源。因此,为了允许Lambda访问我们的私人资源,我们必须定义VPC ID,子网,安全组。 Lambda将在私有子网中创建弹性网络接口(ENI),以允许其连接。
在这个小项目中,我们将了解
1)AWS lambda连接与私人子网中的数据库。
2)如何在EC2实例上安装和使用MariadB数据库服务器。
3)如何在AWS Secret Manager中安全地存储和使用数据库凭据。
4)如何将pymysql库作为lambda层。
注意:您可以在私有子网中简单启动RDS数据,而不是在EC2实例上安装它。但是在这里,我想尝试在EC2上尝试(也很昂贵)。
先决条件
1)AWS帐户。
2)Python的很少的经验。
3)了解VPC,子网,安全组等。
4)熟悉AWS lambda。
多数民众赞成。电子开始。
step1:设置VPC:
要创建VPC,请使用Terraform脚本。
git克隆https://github.com/pramodbs543/Terraform/tree/main/Simple_VPC
在这里,您只需1)将访问密钥和秘密密钥存储为环境变量。(在提供者中显示)2)更改Terraform.TFVARS文件中的区域。应用以下命令。
Terraform Init
Terraform应用-Uauto -Approve
VPC准备就绪。
步骤2创建了IAM角色:
为此,我们需要首先使用附带的AmazonssmmanagedInstancecore策略创建IAM角色。这个IAM角色允许我们与EC2(用于安装DB)建立联系,即使EC2处于私有子网中,并且没有密钥对也没有公共IP。
搜索AmazonssmmanagedInstancecore策略,并将其附加到角色上。
步骤3:创建安全组:
1)Lambda的安全组:
2)DB的安全组。
在入站规则中,对于mysql/aurora类型,源为lambda sg。
步骤4:在VPC的私人子网中启动EC2实例:
选择ubuntu作为ami,t2.medium,不需要钥匙对。选择DB-SG作为我们创建的安全组。保持公共IP局限。在网络部分中选择VPC并选择私有子网。
预先详细信息选择我们创建的IAM角色。
步骤5:在EC2上安装MariaDB服务器:
连接到EC2。
更改为根目录。
$ cd /
此命令将所有软件包更新为最新版本
sudo apt update -y
此命令在您的计算机上安装MySQL Server,它还创建了Systemd Service
sudo apt install -y mariadb-server
此命令启用在上一个步骤中创建的服务
sudo systemctl enable mariadb
此命令在Linux实例上启动MySQL Server服务
sudo systemctl start mariadb
此命令可帮助您设置root用户密码并改进数据库安全性
sudo mysql_secure_installation
在这里,只需点击输入,因为我们尚未设置任何密码
Enter current password for root (enter for none):
在这里回复y
Switch to unix_socket authentication [Y/n]
在这里,用y
回复
Change the root password? [Y/n]
输入新密码
New Password:
重新输入新密码
Re-enter new Password:
说y
Remove anonymous users? [Y/n]
说y
Disallow root login remotely? [Y/n]
说n,因为我们需要它们进行验证
Remove test database and access to it? [Y/n]
说y
Reload privilege tables now? [Y/n]
感谢您使用Mariadb!
验证与DB
的连接
mysql -h localhost -u root -p
输入密码。
显示数据库:
show databases;
创建数据库:
create database mydatabase;
切换到此数据库:
use mydatabase;
在此数据库中创建一个表:
create table employees(eno int(10) primary key,ename varchar(20),esal double(10,2), eaddr varchar(30));
describe employees;
exit;
配置DB以接受远程连接:
$ cd /etc/mysql/mariadb.conf.d
$ sudo vi 50-server.cnf
设置bind-address = 0.0.0.0代替127.0.0.1
$ sudo systemctl restart mariadb
$ sudo ss -nlt
现在,让我们创建一个将具有访问myDatabase权限的用户。
$ mysql -h localhost -u root -p
输入我们之前设置的根密码。
CREATE USER 'user01'@'localhost' IDENTIFIED BY 'password543';
CREATE USER 'user01'@'%' IDENTIFIED BY 'password543';
GRANT ALL PRIVILEGES ON mydatabase.* to user01@localhost IDENTIFIED BY 'password543' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON mydatabase.* to user01@'%' IDENTIFIED BY 'password543' WITH GRANT OPTION;
FLUSH PRIVILEGES;
退出
...数据库现在都设置了。
步骤6:AWS Secret Manager存储DB凭据:
选择AWS中的Secrets Manager。
存储一个新的秘密。
下一个再次打。最后登上秘密。(请记下您的秘密名称。在这种情况下
步骤7:创建一个lambda函数。
附上具有AWSSecretManager策略的角色。(我们需要访问Secret Manager的秘密)
现在选择VPC。
点击创建功能。
添加pymysql库作为lambda层:
您需要在本地Windows PC上安装Python,Python版本应与您为Lambda功能选择的运行时版本匹配,在这种情况下为Python 3.10。您还需要安装PIP,以便可以下载PymySQL软件包。
安装在PC上的PIP后,打开命令提示符并导航到所需的目录并运行以下命令。
pip install --target ./python pymysql
这将在所需目录中创建一个名为Python的文件夹。然后,您需要将Python文件夹作为ZIP文件压缩,以便我们可以将其上传到AWS。
在Lambda控制台窗口中,从左侧菜单中选择“图层选项”,然后单击“创建图层”。给您的图层以``pymysql''的名称,并上传您刚刚创建的zip文件。选择Python 3.10作为兼容运行时,然后单击“创建”。
单击lambda功能。滚动到底部。在那里,您会发现层。添加图层pymysql。
层源作为自定义图层。然后从下拉下选择pymysql。
现在从
复制代码
https://github.com/pramodbs543/lambda-mysqlonEC2
雇员。为了提供json输入到代码的事件文件。偶数文件中的条目将存储在数据库中。
数据库中的记录: