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
安装cdk
IDE for your programming language
# 一般使用vs code
AWS 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 venv
python -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 bootstrap
cdk 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 deploy
approval
),会导致不执行部署,这里设置成--require-approval never
可以看到,这里还是通过cloudformation
底层来实现aws
服务的部署。
进入cloudformation
之后,看到会出现stack
检查ec2 instance
最后清理cloudformation