aws(学习笔记第十八课)
- 使用
aws cdk(python)进行部署
学习内容:
- 使用
aws cdk(python)进行部署 - 整体代码(
python的通常工程) - 代码动作
1. 使用aws cdk(python)进行部署
aws cdk的整体架构
前面使用了cloudformation进行了json的aws的各种组件的定义和使用,但是对于熟悉开发语言程序员,不能进行灵活的使用开发语言(python,nodejs,java等等)进行灵活的aws组件的定义部署,实在是不能接受的,aws cdk满足了这方面的要求。
使用aws cdk,可以使用各种熟悉的语言就行aws的部署,另外还避免了aws cloudformation的复杂json的代码编写。但是,底层来说,aws cdk还是会将写出的aws配置,最终转换成cloudformation,进行部署。
2. 整体代码(python的通常工程)
以python为基础语言,开始开发aws cdk。
-
环境准备
需要以下的软件准备。AWS CLI#最终执行的aws cdk的底层命令AWS Account and User#最终执行的aws cdk的用户Node.js#使用Node.js安装cdkIDE for your programming language# 一般使用vs codeAWS CDK Toolkit#cdk的命令安装Python#cdk的开发语言
-
各种软件安装详细
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
-
开始简单的
aws cdk程序开发- 程序文件夹作成(使用
git bash中执行)
注意,没有特殊说明,执行的命令都是在项目的文件夹下mkdir finlay_20241215 && cd finlay_20241215 - 激活
virtual environment venvpython -m venv .venv source .venv/Scripts/activate - 作成
cdk的工程cdk init app --language python - 将
pip的download url指向aliyun阿里云pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/ pip config set install.trusted-host mirrors.aliyun.com - 编写
cdk的python代码(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. 代码动作
- 执行
cdk bootstrap
默认aws下,是没有执行cdk所需要的role的,第一次需要执行cdk bootstrapcdk bootstrap
之后检查aws的role作成情况。

- 为
aws cli的用户附上权限
这里,虽然已经自动生成了role来表示能够执行cdk,但是aws cli的执行用户还是没有能够sts:AssumeRole即assume这些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。
- 执行
deploy
默认需要承认(cdk --require-approval never deployapproval),会导致不执行部署,这里设置成--require-approval never

可以看到,这里还是通过cloudformation底层来实现aws服务的部署。

进入cloudformation之后,看到会出现stack

检查ec2 instance

最后清理cloudformation
