aws(学习笔记第十八课) 使用aws cdk(python)举行摆设

打印 上一主题 下一主题

主题 824|帖子 824|积分 2472

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的安装
      1. npm install -g aws-cdk
      复制代码

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

  • 开始简单的aws cdk程序开发

    • 程序文件夹作成(使用git bash中执行)
      留意,没有特殊分析,执行的命令都是在项目的文件夹下
      1. mkdir finlay_20241215 && cd finlay_20241215
      复制代码
    • 激活virtual environment venv
      1. python -m venv .venv
      2. source .venv/Scripts/activate
      复制代码
    • 作成cdk的工程
      1. cdk init app --language python
      复制代码
    • 将pip的download url指向aliyun阿里云
      1. pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/
      2. pip config set install.trusted-host mirrors.aliyun.com
      复制代码
    • 编写cdk的python代码(finlay_20241215/app.py)
      1. #!/usr/bin/env python3
      2. import os
      3. import aws_cdk as cdk
      4. from aws_cdk import (
      5.         aws_ec2 as ec2,Stack
      6. )
      7. from constructs import Construct
      8. from finlay_20241215.finlay_20241215_stack import Finlay20241215Stack
      9. app = cdk.App()
      10. class Finlay20241215Stack(Stack):
      11.     def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None:
      12.         super().__init__(scope, construct_id, **kwargs)
      13.         # VPC
      14.         my_vpc = ec2.Vpc(
      15.             self,
      16.             id="my-vpc",
      17.             cidr="192.168.0.0/16",
      18.             nat_gateways=0, # NatGatewayを作成しない指定
      19.             subnet_configuration=[
      20.                 ec2.SubnetConfiguration(
      21.                     name="my-public-subnet",
      22.                     subnet_type=ec2.SubnetType.PUBLIC,
      23.                     cidr_mask=24
      24.                 )
      25.             ]
      26.         )
      27.         # security group
      28.         my_ec2_security_group = ec2.SecurityGroup(
      29.             self,
      30.             id="my-ec2-sg",
      31.             vpc=my_vpc,
      32.             allow_all_outbound=True,
      33.             security_group_name="my-ec2-sg"
      34.         )
      35.         # add ingress rule
      36.         my_ec2_security_group.add_ingress_rule(
      37.             peer=ec2.Peer.ipv4("0.0.0.0/0"),
      38.             connection=ec2.Port.tcp(22),
      39.             description="allow ssh access"
      40.         )
      41.         #  set ami
      42.         amzn_linux = ec2.MachineImage.latest_amazon_linux(
      43.             generation=ec2.AmazonLinuxGeneration.AMAZON_LINUX,
      44.             edition=ec2.AmazonLinuxEdition.STANDARD,
      45.             virtualization=ec2.AmazonLinuxVirt.HVM,
      46.             storage=ec2.AmazonLinuxStorage.GENERAL_PURPOSE,
      47.             cpu_type=ec2.AmazonLinuxCpuType.X86_64
      48.         )
      49.         # launch ec2 instance
      50.         my_ec2_instance = ec2.Instance(
      51.             self,
      52.             id="my-ec2-instance",
      53.             instance_type=ec2.InstanceType.of(
      54.                 ec2.InstanceClass.BURSTABLE2,
      55.                 ec2.InstanceSize.MICRO
      56.             ),
      57.             machine_image=amzn_linux,
      58.             vpc=my_vpc,
      59.             vpc_subnets=ec2.SubnetSelection(
      60.                 subnet_type=ec2.SubnetType.PUBLIC
      61.             ),
      62.             instance_name="my-ec2-instance",
      63.             security_group=my_ec2_security_group
      64.         )
      65. Finlay20241215Stack(app, "Finlay20241215Stack")
      66. app.synth()
      复制代码
    • pip导入必须要的cdk依靠包
      1. pip install -r requirements.txt
      复制代码
    • 执行cdk diff
      检察将要举行的cdk执行的差分
      1. cdk diff
      复制代码


3. 代码动作


  • 执行cdk bootstrap

    默认aws下,是没有执行cdk所需要的role的,第一次需要执行cdk bootstrap
    1. cdk bootstrap
    复制代码

    之后查抄aws的role作成情况。

  • 为aws cli的用户附上权限
    这里,固然已经主动天生了role来表现能够执行cdk,但是aws cli的执行用户还是没有能够sts:AssumeRole即assume这些role的权限。需要继承准备。

    • 选择aws cli用户,添加权限

      这里,选择创建内联权限

      选择JSON直接举行编辑

      权限JSON代码
      1. {
      2.         "Version": "2012-10-17",
      3.         "Statement": [
      4.                 {
      5.                         "Effect": "Allow",
      6.                         "Action": [
      7.                                 "sts:AssumeRole"
      8.                         ],
      9.                         "Resource": [
      10.                                 "arn:aws:iam::*:role/cdk-*"
      11.                         ]
      12.                 }
      13.         ]
      14. }
      复制代码


至此,aws cli的当前用户就能够执行cdk-开头的role,有权限执行aws cdk。

  • 执行deploy
    1. cdk --require-approval never deploy
    复制代码
    默认需要承认(approval),会导致不执行摆设,这里设置成--require-approval never

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

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

查抄ec2 instance

末了清算cloudformation

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

钜形不锈钢水箱

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表