当前位置: 首页 > article >正文

aws(学习笔记第十八课) 使用aws cdk(python)进行部署

aws(学习笔记第十八课)

  • 使用aws cdk(python)进行部署

学习内容:

  • 使用aws cdk(python)进行部署
  • 整体代码(python的通常工程)
  • 代码动作

1. 使用aws cdk(python)进行部署

  • aws cdk的整体架构
    前面使用了cloudformation进行了jsonaws的各种组件的定义和使用,但是对于熟悉开发语言程序员,不能进行灵活的使用开发语言(python,nodejs,java等等)进行灵活的aws组件的定义部署,实在是不能接受的,aws cdk满足了这方面的要求。
    使用aws cdk,可以使用各种熟悉的语言就行aws的部署,另外还避免了aws cloudformation的复杂json的代码编写。但是,底层来说,aws cdk还是会将写出的aws配置,最终转换成cloudformation,进行部署。在这里插入图片描述

2. 整体代码(python的通常工程)

python为基础语言,开始开发aws cdk

  1. 环境准备
    需要以下的软件准备。

    • AWS CLI #最终执行的aws cdk的底层命令
    • AWS Account and User #最终执行的aws cdk的用户
    • Node.js #使用Node.js安装cdk
    • IDE for your programming language # 一般使用vs code
    • AWS CDK Toolkit # cdk的命令安装
    • Python # cdk的开发语言
  2. 各种软件安装详细

    • aws cli
      aws cli可以使用installer来安装。 在这里插入图片描述

    aws cli installer

    • AWS Account and User
      这里需要创建用户,用来执行cdk
      在这里插入图片描述

    • Node.js
      nodejs
      在这里插入图片描述

    • IDE for your programming language # 一般使用vs code
      这个比较通用,省略安装步骤。

    • AWS CDK Toolkit # cdk的安装

      npm install -g aws-cdk
      

      在这里插入图片描述

    • Python # cdk的开发语言
      安装开发语言Python
      python downloads

  3. 开始简单的aws cdk程序开发

    • 程序文件夹作成(使用git bash中执行)
      注意,没有特殊说明,执行的命令都是在项目的文件夹下
      mkdir finlay_20241215 && cd finlay_20241215
      
    • 激活virtual environment venv
      python -m venv .venv
      source .venv/Scripts/activate
      
    • 作成cdk的工程
      cdk init app --language python
      
    • pipdownload url指向aliyun阿里云
      pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/
      pip config set install.trusted-host mirrors.aliyun.com
      
    • 编写cdkpython代码(finlay_20241215/app.py)
      #!/usr/bin/env python3
      import os
      import aws_cdk as cdk
      from aws_cdk import (
      	aws_ec2 as ec2,Stack
      )
      from constructs import Construct
      from finlay_20241215.finlay_20241215_stack import Finlay20241215Stack
      app = cdk.App()
      class Finlay20241215Stack(Stack):
      
          def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None:
              super().__init__(scope, construct_id, **kwargs)
      
              # VPC
              my_vpc = ec2.Vpc(
                  self,
                  id="my-vpc",
                  cidr="192.168.0.0/16",
                  nat_gateways=0, # NatGatewayを作成しない指定
                  subnet_configuration=[
                      ec2.SubnetConfiguration(
                          name="my-public-subnet",
                          subnet_type=ec2.SubnetType.PUBLIC,
                          cidr_mask=24
                      )
                  ]
              )
      
              # security group
              my_ec2_security_group = ec2.SecurityGroup(
                  self,
                  id="my-ec2-sg",
                  vpc=my_vpc,
                  allow_all_outbound=True,
                  security_group_name="my-ec2-sg"
              )
      
              # add ingress rule
              my_ec2_security_group.add_ingress_rule(
                  peer=ec2.Peer.ipv4("0.0.0.0/0"),
                  connection=ec2.Port.tcp(22),
                  description="allow ssh access"
              )
      
              #  set ami
              amzn_linux = ec2.MachineImage.latest_amazon_linux(
                  generation=ec2.AmazonLinuxGeneration.AMAZON_LINUX,
                  edition=ec2.AmazonLinuxEdition.STANDARD,
                  virtualization=ec2.AmazonLinuxVirt.HVM,
                  storage=ec2.AmazonLinuxStorage.GENERAL_PURPOSE,
                  cpu_type=ec2.AmazonLinuxCpuType.X86_64
              )
      
              # launch ec2 instance
              my_ec2_instance = ec2.Instance(
                  self,
                  id="my-ec2-instance",
                  instance_type=ec2.InstanceType.of(
                      ec2.InstanceClass.BURSTABLE2,
                      ec2.InstanceSize.MICRO
                  ),
                  machine_image=amzn_linux,
                  vpc=my_vpc,
                  vpc_subnets=ec2.SubnetSelection(
                      subnet_type=ec2.SubnetType.PUBLIC
                  ),
                  instance_name="my-ec2-instance",
                  security_group=my_ec2_security_group
              )
      Finlay20241215Stack(app, "Finlay20241215Stack")
      app.synth()
      
    • pip导入必须要的cdk依赖包
      pip install -r requirements.txt
      
    • 执行cdk diff查看将要进行的cdk执行的差分
      cdk diff
      

    在这里插入图片描述

3. 代码动作

  1. 执行cdk bootstrap
    默认aws下,是没有执行cdk所需要的role的,第一次需要执行cdk bootstrap
    cdk bootstrap
    
    在这里插入图片描述
    之后检查awsrole作成情况。
    在这里插入图片描述
  2. aws cli的用户附上权限
    这里,虽然已经自动生成了role来表示能够执行cdk,但是aws cli的执行用户还是没有能够sts:AssumeRoleassume这些role的权限。需要继续准备。
    • 选择aws cli用户,添加权限
      在这里插入图片描述
      这里,选择创建内联权限
      在这里插入图片描述
      选择JSON直接进行编辑
      在这里插入图片描述
      权限JSON代码
      {
      	"Version": "2012-10-17",
      	"Statement": [
      		{
      			"Effect": "Allow",
      			"Action": [
      				"sts:AssumeRole"
      			],
      			"Resource": [
      				"arn:aws:iam::*:role/cdk-*"
      			]
      		}
      	]
      }
      

在这里插入图片描述
至此,aws cli的当前用户就能够执行cdk-开头的role,有权限执行aws cdk

  1. 执行deploy
    cdk --require-approval never deploy
    
    默认需要承认(approval),会导致不执行部署,这里设置成--require-approval never

在这里插入图片描述
可以看到,这里还是通过cloudformation底层来实现aws服务的部署。
在这里插入图片描述
进入cloudformation之后,看到会出现stack
在这里插入图片描述
检查ec2 instance
在这里插入图片描述
最后清理cloudformation


http://www.kler.cn/a/443451.html

相关文章:

  • (长期更新)《零基础入门 ArcGIS(ArcScene) 》实验七----城市三维建模与分析(超超超详细!!!)
  • 自定义EasyCode模板生成CRUD
  • 30天开发操作系统 第 12 天 -- 定时器
  • 算法5--位运算
  • HTML-多媒体标签
  • 【Web】0基础学Web—节点操作、发表神评妙论、事件添加和移除、事件冒泡和事件捕获
  • WebPlotDigitizer 使用指南
  • 【Linux网络编程】第十二弹---构建与优化HTTP请求处理:从HttpRequest到HttpServer的实战
  • 信息安全概论
  • Web应用中的XSS防护实践
  • 位运算符说明
  • LWIP协议:三次握手和四次挥手、TCP/IP模型
  • 解释工厂模式
  • uniapp 将base64字符串保存为图片、Word、Excel、音频、视频等文件
  • CentOS 7.9 ISO 镜像下载
  • 大数据:开启智能时代的钥匙
  • RK3568平台(Kbuild篇)vmlinux 编译过程
  • Golang学习笔记_14——切片
  • Docker 镜像加速和配置的分享 云服务器搭建beef-xss
  • Kubernetes中subPath
  • Android笔记【20】
  • 36.3 grafana-dashboard看图分析
  • 【C++】inline函数(内联函数)
  • 录音有杂音怎么消除?去杂音降噪音的方法
  • 自动驾驶AVM环视算法--python版本的540投影模式
  • C++ Learning explicit关键字•静态成员