栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

我的博客1

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

我的博客1

CDK包

aws-cdk.aws-ec2
aws-cdk.aws-ecs
aws-cdk.aws-autoscaling
aws-cdk.aws-elasticloadbalancingv2

CDK APP

#!/usr/bin/env python3
import os

from aws_cdk import core as cdk

 
from aws_cdk import core

from liu_cdk.liu_cdk_stack import LiuStack
from liu_cdk.bastion import BastionStack
from liu_cdk.elbasg import Ec2Stack
from ecs.ecs import EcsStack


app core.App()
vpc_stack LiuStack(app, VpcStack ,
    )
BastionStack(app, BastionStack1 ,
    vpc vpc_stack.vpc,
    sg_bastion vpc_stack.sgbastion
    )
Ec2Stack(app , Ec2Stack ,
    vpc vpc_stack.vpc,
    ec2_sg vpc_stack.sgecc,
    alb_sg vpc_stack.sgalb,
    
    )
EcsStack(app, EcsStack ,
    vpc vpc_stack.vpc,
    )


app.synth()
 

CDK VPC

from aws_cdk import (core,aws_ec2 as ec2)


class LiuStack(core.Stack):

    def __init__(self, scope: core.Construct, construct_id: str, **kwargs) - None:
        super().__init__(scope, construct_id, **kwargs)

    
        self.vpc ec2.Vpc(self, testvpc ,
            #两个可用区
            max_azs 2, 
            #CIDR地址池                  
            cidr 10.10.0.0/16 ,
            
            #创建2个公网子网 两个私网子网 两个隔离子网 
            subnet_configuration [ec2.SubnetConfiguration(
                    subnet_type ec2.SubnetType.PUBLIC,
                    name Public ,
                    cidr_mask 24
                ), ec2.SubnetConfiguration(
                    subnet_type ec2.SubnetType.PRIVATE,
                    name Private ,
                    cidr_mask 24
                ), ec2.SubnetConfiguration(
                    subnet_type ec2.SubnetType.ISOLATED,
                    name DB ,
                    cidr_mask 24
                )
                ],
                #两个nat网关        
                nat_gateways 2,
                )
                
        #创建alb安全组        
        self.sgalb ec2.SecurityGroup(self, sg_alb ,
                #选择vpc
                vpc self.vpc ,
                #自定义安全组名称
                security_group_name sg_alb ,
                #默认关闭所有出站流量
                allow_all_outbound True
            )
            
        #alb接收所有地址的80端口访问    
        self.sgalb.connections.allow_from_any_ipv4(ec2.Port.tcp(80))
        
        #创建堡垒机安全组
        self.sgbastion ec2.SecurityGroup(self, sg_bastion ,
            vpc self.vpc,
            security_group_name sg_bastion ,
            allow_all_outbound True
            )
        #堡垒机接受所有ip地址的22端口访问
        self.sgbastion.connections.allow_from_any_ipv4(ec2.Port.tcp(22))
        
        
        #创建ec2安全组 
        self.sgecc ec2.SecurityGroup(self, sg_ec2 ,
            vpc self.vpc ,
            security_group_name sg_ec2 ,
            allow_all_outbound True
            )
            
        #安全组接收alb的7777端口流量
        self.sgecc.connections.allow_from(self.sgalb,ec2.Port.tcp(7777))
        #安全组接收堡垒机22端口访问
        self.sgecc.connections.allow_from(self.sgbastion,ec2.Port.tcp(22))
        
        #创建rds安全组
        self.sgrds ec2.SecurityGroup(self, sg_rds ,
            vpc self.vpc ,
            security_group_name sg_rds ,
            allow_all_outbound True
            )
            
        #rds接收ec2 3306端口访问
        self.sgrds.connections.allow_from(self.sgecc,ec2.Port.tcp(3306))
        #rds接收堡垒机3306端口访问
        self.sgrds.connections.allow_from(self.sgbastion,ec2.Port.tcp(3306))
        
        
        #efs安全组
        sgnfs ec2.SecurityGroup(self, sg_efs ,
            vpc self.vpc ,
            security_group_name sg_efs ,
            allow_all_outbound True
            )
        sgnfs.connections.allow_from(self.sgecc,ec2.Port.tcp(2049))
        
        #Memcached安全组 要接收ec2 11211 流量
        sgMche ec2.SecurityGroup(self, sg_che ,
            vpc self.vpc,
            security_group_name sg_che ,
            allow_all_outbound True
            )
            
        sgMche.connections.allow_from(self.sgecc,ec2.Port.tcp(11211))
        
        #输出配置
        core.CfnOutput(self, Output_vpc ,
            value self.vpc.vpc_id)
            
        core.CfnOutput(self, Output_sgalb ,
            value self.sgalb.security_group_id)
        
        core.CfnOutput(self, Output_sgec2 ,
            value self.sgecc.security_group_id)
        
        core.CfnOutput(self, Output_sgres ,
            value self.sgrds.security_group_id)
      
        core.CfnOutput(self, Outpur_sgbastionb ,
            value self.sgbastion.security_group_id)
  

CDK Bastion

from aws_cdk import (core,aws_ec2 as ec2)

key_name bastionkey
#CLI 创建密钥 
# aws ec2 create-key-pair --key-name hello --query hello --output text hello.pem      
# aws ec2 create-key-pair --key-name Bastion --query Bastion --output text Bastion.pem
# aws ec2 create-key-pair --key-name MyKeyPair --query MyKeyPair --output text MyKeyPair.pem
# aws ec2 delete-key-pair --key-name MyKeyPair

# efs 挂载工具 sudo yum install -y amazon-efs-utils   mkdir /efs


class BastionStack(core.Stack):

    def __init__(self, scope: core.Construct, construct_id: str,vpc,sg_bastion, **kwargs) - None:
        super().__init__(scope, construct_id, **kwargs)
        
        
        #堡垒机
        # bastion ec2.BastionHostLinux(self, myBastion ,
        #     vpc vpc,
        #     subnet_selection ec2.SubnetSelection(
        #         subnet_type ec2.SubnetType.PUBLIC),
        #     instance_name myBastionHostLinux ,
        #     instance_type ec2.InstanceType(instance_type_identifier t2.micro ) ,
        #     security_group sg_bastion
        #     )
            
            
        #使用ec2自制堡垒机
        bastion ec2.Instance(self, myBastion ,
            vpc vpc,
            instance_name myBastionHostLinux ,
            machine_image ec2.MachineImage.latest_amazon_linux(
                generation ec2.AmazonLinuxGeneration.AMAZON_LINUX_2),
            vpc_subnets ec2.SubnetSelection(subnet_type ec2.SubnetType.PUBLIC),
            key_name key_name,
            security_group sg_bastion,
            instance_type ec2.InstanceType(instance_type_identifier t2.micro ) 
            )
        
        
        core.CfnOutput(self, Outpur_bastion ,
            value bastion.instance_public_ip)
 

CDK elb

from aws_cdk import (core,
    aws_ec2 as ec2,
    aws_elasticloadbalancingv2 as elb,
    aws_autoscaling as autoscaling
    )

ec2_type t2.micro
#定义密钥
key_name hello

#导入用户数据文件
with open( ../userdata/data.sh ) as f:
    user_data f.read()

class Ec2Stack(core.Stack):

    def __init__(self, scope: core.Construct, construct_id: str,vpc,ec2_sg,alb_sg, **kwargs) - None:
        super().__init__(scope, construct_id, **kwargs)
        
        
        #选择AMI镜像    
        ami_linux ec2.MachineImage.latest_amazon_linux(
            
            #选择第2代亚马逊linux
            generation ec2.AmazonLinuxGeneration.AMAZON_LINUX_2,
            #选择linux版本有 minimal 和 standard 两种
            edition ec2.AmazonLinuxEdition.STANDARD,
            #选择虚拟化类型 有 HVM 和 PV 可不配置默认HVM
            virtualization ec2.AmazonLinuxVirt.HVM,
            #选择存储类型 EBS 和 GENERAL_PURPOSE
            storage ec2.AmazonLinuxStorage.EBS
            )
        
        #创建alb
        alb elb.ApplicationLoadBalancer(self, helloALB ,
            vpc vpc,
            security_group alb_sg,
            internet_facing True,
            load_balancer_name helloALB
            )
        
        #监听80端口
        listener alb.add_listener( my80 ,
            port 80,
            open True
            )
        
        #创建 AutoScaling组
        asg autoscaling.AutoScalingGroup(self, myautoscaling ,
            vpc vpc,
            #实例启动在私网子网
            vpc_subnets ec2.SubnetSelection(subnet_type ec2.SubnetType.PRIVATE),
            #实例类型
            instance_type ec2.InstanceType(instance_type_identifier ec2_type),
            #实例镜像
            machine_image ami_linux,
            #实例密钥
            key_name key_name,
            security_group ec2_sg,
            #实例用户数据
            user_data ec2.UserData.custom(user_data),
            #需求2实例
            desired_capacity 1,
            #最小与最大弹性伸缩
            min_capacity 1,
            max_capacity 5
            )
            
            
        #创建alb目标组
        listener.add_targets( addTargetGroup ,
            protocol elb.ApplicationProtocol.HTTP,
            port 7777,
            
            #目标组为AutoScaling组
            targets [asg]
            )
        
        #输出alb的dns地址
        core.CfnOutput(self, Output ,
            value alb.load_balancer_dns_name
        )
 

data.sh

#!/bin/bash -xe
yum install -y wget
wget https://yc-helloworld.s3.ap-northeast-1.amazonaws.com/server_demo -O /root/server_demo
wget https://yc-helloworld.s3.ap-northeast-1.amazonaws.com/conf.toml -O /root/conf.toml
chmod a x /root/server_demo
cd /root
/root/server_demo

DOCKER

FROM centos

RUN yum install -y wget
    
RUN echo #!/bin/bash -xe /opt/data.sh
    echo wget https://yc-helloworld.s3.ap-northeast-1.amazonaws.com/server_demo -O /root/server_demo /opt/data.sh
    echo wget https://yc-helloworld.s3.ap-northeast-1.amazonaws.com/conf.toml -O /root/conf.toml /opt/data.sh
    echo chmod a x /root/server_demo /opt/data.sh
    echo cd /root   /opt/data.sh
    echo /root/server_demo   /opt/data.sh
    chmod 755 /opt/data.sh 

EXPOSE 7777

CMD [ /opt/data.sh , -D FOREGROUND ]
 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/267629.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号