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)# VPCmy_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 groupmy_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 rulemy_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 amiamzn_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 instancemy_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.mzph.cn/pingmian/64170.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络基础 - TCP/IP 五层模型

文章目录 一、OSI 参考模型中各个分层的作用1、应用层2、表示层3、会话层4、传输层5、网络层6、数据链路层7、物理层 二、OSI 参考模型通信处理示例 一、OSI 参考模型中各个分层的作用 1、应用层 2、表示层 负责设备固有数据格式和网络标准数据格式间的转换 实际生活中&#…

MySQL 调优技巧|索引什么时候失效?为什么?

写在前面 优化慢SQL,这是在工作或者面试中都不可避免的问题。这篇文章我们就来讲讲慢SQL的优化的一些方法! 1. 升配 最简单的一步就是升配!!当然在降本增效的当下,很难能将这种单子审批下来了! 2. 索引…

《封装继承与多态》封装的优势

文章目录 封装在面向对象编程中的优势1. 提高代码的可读性和可维护性2. 提高代码的安全性3. 降低代码的复杂性案例举例 封装在敏捷开发和团队合作中的优势1. 促进敏捷开发2. 促进团队合作案例举例 封装在面向对象编程中的优势 封装是面向对象编程(Object-Oriented …

YOLOv5-Backbone模块实现

YOLOv5-Backbone模块实现 🍨 本文为🔗365天深度学习训练营 中的学习记录博客 🍖 原作者:K同学啊 电脑系统:Windows11 显卡型号:NVIDIA Quadro P620 语言环境:python 3.9.7 编译器&#xff1a…

软件需求规格说明书文档,系统需求规格说明书下载,软件工程需求规格案例模板参考(word原件)

1 范围 1.1 系统概述 1.2 文档概述 1.3 术语及缩略语 2 引用文档 3 需求 3.1 要求的状态和方式 3.2 系统能力需求 3.3 系统外部接口需求 3.3.1 管理接口 3.3.2 业务接口 3.4 系统内部接口需求 3.5 系统内部数据需求 3.6 适应性需求 3.7 安全性需求 3.8 保密性需求 3.9 环境需求…

Linux - MySQL迁移至一主一从

Linux - MySQL迁移至一主一从 迁移准备安装MySQL ibd文件迁移原服务器操作目标服务器操作 一主一从增量同步异常解决结尾 首先部分单独安装MySQL,请参考Linux - MySQL安装,迁移数据量比较大约400G左右且网络不通故使用文件迁移,需开启一段时间…

29. Three.js案例-自定义平面图形

29. Three.js案例-自定义平面图形 实现效果 知识点 WebGLRenderer WebGLRenderer 是 Three.js 中用于渲染 3D 场景的核心类。它利用 WebGL 技术在浏览器中渲染 3D 图形。 构造器 THREE.WebGLRenderer(parameters : object) 参数类型描述parametersobject可选参数对象&…

大模型运用-Prompt Engineering(提示工程)

什么是提示工程 提示工程 提示工程也叫指令工程,涉及到如何设计、优化和管理这些Prompt,以确保AI模型能够准确、高效地执行用户的指令,如:讲个笑话、java写个排序算法等 使用目的 1.获得具体问题的具体结果。(如&…

MTK Android12 更换开机LOGO和开机动画

1、路径: (1)device/mediatek/system/common/device.mk (2)vendor/audio-logo/animation/bootanimation.zip (3)vendor/audio-logo/products/resource-copy.mk (4)vendo…

嵌入式驱动开发详解16(音频驱动开发)

文章目录 前言WM8960简介I2S协议接口说明 SAI音频接口简介驱动框架简介设备树配置内核使能声卡设置与测试 后续参考文献 前言 该专栏主要是讲解嵌入式相关的驱动开发,但是由于ALSA驱动框架过于复杂,实现音频编解码芯片的驱动不是一个人能完成的&#xf…

learn-(Uni-app)输入框u-search父子组件与input输入框(防抖与搜索触发)

1.父子组件u-search &#xff08;1&#xff09;父组件 <!-- 父组件 --> <template> <div><searchBar change"change" search"search"></searchBar> </div> </template> <script> // 子组件搜索 import…

计算机进制的介绍

一.进制介绍 对于整数&#xff0c;有四种表示方式: 1&#xff09;二进制:0,1&#xff0c;满2进1。 在golang中&#xff0c;不能直接使用二进制来表示一个整数&#xff0c;它沿用了c的特点。 参考:Go语言标准库文档中文版 | Go语言中文网 | Golang中文社区 | Golang中国 //赋值…

Transformers参数高效微调之LoRA

简介 LoRA: Low-Rank Adaptation of Large Language Models是微软研究人员为处理微调大语言模型的问题而引入的一项新技术。具有数十亿个参数的强大模型&#xff08;例如 GPT-3&#xff09;为了适应特定任务或领域而进行微调的成本非常高。LoRA 建议冻结预先训练的模型权重并注…

【原生js案例】如何让你的网页实现图片的按需加载

按需加载&#xff0c;这个词应该都不陌生了。我用到你的时候&#xff0c;你才出现就可以了。对于一个很多图片的网站&#xff0c;按需加载图片是优化网站性能的一个关键点。减少无效的http请求&#xff0c;提升网站加载速度。 感兴趣的可以关注下我的系列课程【webApp之h5端实…

博弈论1:拿走游戏(take-away game)

假设你和小红打赌&#xff0c;玩“拿走游戏”&#xff0c;输的人请对方吃饭.... 你们面前有21个筹码&#xff0c;放成一堆&#xff1b;每轮你或者小红可以从筹码堆中拿走1个/2个/3个&#xff1b;第一轮你先拿&#xff0c;第二轮小红拿&#xff0c;你们两个人交替进行;拿走筹码堆…

【论文阅读】IC-Light(ICLR 2025 满分论文)

Scaling In-the-Wild Training for Diffusion-based Illumination Harmonization and Editing by Imposing Consistent Light Transport 原始论文&#xff1a;https://openreview.net/pdf?idu1cQYxRI1H 补充材料&#xff1a;https://openreview.net/attachment?idu1cQYxRI1H&…

Unix 传奇 | 谁写了 Linux | Unix birthmark

注&#xff1a;本文为 “左耳听风”陈皓的 unix 相关文章合辑。 皓侠已走远&#xff0c;文章有点“年头”&#xff0c;但值得一阅。 文中部分超链已沉寂。 Unix 传奇 (上篇) 2010 年 04 月 09 日 陈皓 了解过去&#xff0c;我们才能知其然&#xff0c;更知所以然。总结过去…

记一个framebuffer显示混乱的低级错误

记一个framebuffer显示混乱的低级错误 由于framebuffer的基础知识不扎实&#xff0c;这个任务上我多卡了两天&#xff0c;差点把我搞死&#xff0c;于此记录为后鉴。 打算用awtk做一个多进程项目&#xff0c;计划把framebuffer的内容通过websocket输出到浏览器上去显示画面, …

常用的前端框架介绍

在前端开发中&#xff0c;有许多流行的框架能够帮助开发者更高效地构建用户界面和交互 1. React&#xff1a; • React是一个由Facebook开发的JavaScript库&#xff0c;用于构建用户界面。 • 它使用组件化的思想&#xff0c;将UI拆分成可复用的组件&#xff0c;每个组件都有自…

Kaggler日志-Day4

进度24/12/14 昨日复盘&#xff1a; Pandas课程完成 Intermediate Mechine Learning2/7 今日记录&#xff1a; Intermediate Mechine Learning之类型变量 读两篇讲解如何提问的文章&#xff0c;在提问区里发起一次提问 实战&#xff1a;自己从头到尾首先Housing Prices Compe…