项目简介
本项目借助AWS EventBridge、Lambda和Aurora实现EC2实例资源的自动化预留,主要用于满足电商行业在大促活动前夕的临时资源需求,通过自动化流程让客户能在短时间内预留所需实例资源,保障业务高峰期资源充足。
项目的主要特性和功能
- 自动化资源预留:利用EventBridge定时触发Lambda函数,自动检查并预留所需的EC2实例资源。
- 动态扩展与收缩:采用Aurora Serverless数据库,可根据需求自动调整数据库容量,减少手动管理工作量。
- 安全性保障:使用AWS Secrets Manager存储数据库登录信息,保障敏感信息安全。
- 灵活配置:支持通过AWS CLI进行网络和服务的配置,方便用户按需调整。
安装使用步骤
1. 数据库初始化
- 创建资源需求元数据表:
sql CREATE Table IF NOT EXISTS <database>.odcr_capacity (InstanceType varchar(255), AvailabilityZone varchar(255),PRIMARY KEY (InstanceType,AvailabilityZone), Target_Capacity int NOT NULL, Current_Capacity int DEFAULT 0)
- 插入数据:
sql INSERT INTO <database>.odcr_capacity VALUES ('r5b.2xlarge','ap-northeast-1c',15,0)
- 更新数据:
sql UPDATE <database>.odcr_capacity SET Current_Capacity=5 WHERE InstanceType='r5b.2xlarge' AND AvailabilityZone='ap-northeast-1a'
2. 创建网络配置
- 检查AWS CLI版本:
sh aws --version
- 创建VPC和子网:
sh export VPC_ID=$(aws ec2 create-vpc --cidr-block 172.18.0.0/16 --instance-tenancy default --tag-specifications ResourceType=vpc,Tags='[{Key=Project,Value=ODCR}]' --region $AWS_Region --output text --query Vpc.[VpcId][0])
- 创建公有子网和私有子网:
sh export Public_Subnet_ID=$(aws ec2 create-subnet --tag-specifications ResourceType=subnet,Tags='[{Key=Project,Value=ODCR}]' --availability-zone $AWS_AZ_a --cidr-block 172.18.1.0/24 --vpc-id $VPC_ID --region $AWS_Region --output text --query Subnet.[SubnetId][0])
3. 创建Aurora Serverless数据库
- 创建Subnet Groups:
sh aws rds create-db-subnet-group --db-subnet-group-name $ODCR_RDS_Subnet_Group_Name --db-subnet-group-description "ODCR RDS Subnet Group" --subnet-ids $Private_Subnet_DB_1 $Private_Subnet_DB_2 --tags Key=Project,Value=ODCR --region $AWS_Region
- 创建Aurora Serverless:
sh export rds_endpoint=$(aws rds create-db-cluster --database-name odcr_db --db-cluster-identifier $rds_db_cluster_identifier --vpc-security-group-ids $ODCR_RDS_SG_ID --db-subnet-group-name $ODCR_RDS_Subnet_Group_Name --engine aurora --port 3306 --master-username $rds_username --master-user-password $rds_password --engine-mode serverless --scaling-configuration MinCapacity=1,MaxCapacity=4,AutoPause=false,TimeoutAction=ForceApplyCapacityChange --enable-http-endpoint --tags Key=Project,Value=ODCR --output text --query DBCluster.[Endpoint][0] --region $AWS_Region)
4. 创建Lambda函数
- 创建IAM Policy:
sh export odcr_policy_arn=$(aws iam create-policy --policy-name $odcr_iam_policy_name --policy-document file://<your-path>/odcr-iam-policy.json --tags Key=Project,Value=ODCR --region $AWS_Region --output text --query Policy.[Arn][0])
- 创建Lambda Function:
sh export odcr_lambda_arn=$(aws lambda create-function --function-name $odcr_lambda_name --runtime python3.9 --architectures x86_64 --package-type Zip --zip-file fileb://<your-path>/odcr-deployment-package.zip --handler odcr_lambda.lambda_handler --timeout 300 --vpc-config SubnetIds=$Private_Subnet_Lambda_1,$Private_Subnet_Lambda_2,SecurityGroupIds=$ODCR_Lambda_SG_ID --environment "Variables={RegionName=$AWS_Region,SecretName=$secret_manager_rds_name}" --role $odcr_role_arn --tags Key=Project,Value=ODCR --region $AWS_Region --output text --query FunctionArn)
5. 添加触发器
- 创建EventBridge规则:
sh export event_bridge_arn=$(aws events put-rule --name my-scheduled-rule --schedule-expression 'rate(5 minutes)' --tags Key=Project,Value=ODCR --region $AWS_Region --output text --query RuleArn)
- 添加Lambda触发器:
sh aws lambda add-permission --function-name $odcr_lambda_name --statement-id my-scheduled-event --action 'lambda:InvokeFunction' --principal events.amazonaws.com --source-arn $event_bridge_arn --region $AWS_Region
完成以上步骤,即可成功部署并使用本项目来自动化预留EC2实例资源,确保业务高峰期的资源充足。
下载地址
点击下载 【提取码: 4003】【解压密码: www.makuang.net】