[工作随笔]Python 和 CDK的aws-route53那些事

2022-10-31 17:51:07 浏览数 (1)

CDK介绍

1.什么是CDK?

CDK,与使用 YAML(或 JSON)的声明式方法相比,CDK 允许您命令式声明基础设施。主要语言为 TypeScript,同时也支持另外几种语言。

2.为什么要使用 CDK?

增强基础设施,为了操作awk的接口,对awk的实例等进行操作

3.route53是干啥的? Route 53 是一种具有很高可用性和可扩展性的域名系统 (DNS) Web 服务。您可以使用 Route 53 以任意组合执行三个主要功能:域注册、DNS 路由和运行状况检查。如果选择使用 Route 53 来执行所有这三种功能:

  • 1)域名注册
  • 2)将 Internet 流量路由到您的域的资源
  • 3)检查资源的运行状况

如何使用route53

1.安装route53

代码语言:javascript复制
## 方法一:python官方源安装
pip3 install aws-cdk.aws-route53

## 方法二:阿里云镜像源安装
pip3 install aws-cdk.aws-route53 -i https://mirrors.aliyun.com/pypi/simple/

## 方法三:使用pycharm直接安装

2.添加托管区域

  • 添加公共托管区域
代码语言:javascript复制
## 导入aws_route53别名为route53
import aws_cdk.aws_route53 as route53

## 使用route53的PublicHostedZone方法来添加公共托管区域
route53.PublicHostedZone(self, "HostedZone",
## zone_name制定区域名
    zone_name="fully.qualified.domain.com"
)
  • 添加私有托管区域

使用PrivateHostedZone添加私有托管区域 enableDnsHostnamesenableDnsSupport必须已为正在为专用托管区域配置的专有网络。

代码语言:javascript复制
## 导入ec2实例方法
import aws_cdk.aws_ec2 as ec2
## 导入route53方法
import aws_cdk.aws_route53 as route53

## 实例化vpc
vpc = ec2.Vpc(self, "VPC")

## 实例化私有区域
zone = route53.PrivateHostedZone(self, "HostedZone",
    zone_name="fully.qualified.domain.com",
    vpc=vpc
)

注意:可以使用zone.addVpc()添加额外的VPC。

3.添加记录

  • 为区域添加TXT记录
代码语言:javascript复制
## 导入route53
import aws_cdk.aws_route53 as route53

## 使用TxtRecord方法
route53.TxtRecord(self, "TXTRecord",
    zone=my_zone,
    record_name="_foo", 
    # 如果名称以“.”结尾,则按原样使用;
    # 如果它以“.”结尾,后跟区域名称,则会自动添加一个结尾“.”;
    # 否则,将自动添加“.”、区域名称和尾随的“.”。
    # 如果未指定,则默认为区域根目录。
    ## 值
    values=["Bar!", "Baz?"],
    ## ttl刷新时间
    ttl=Duration.minutes(90)
)
  • 为区域添加一个A记录
代码语言:javascript复制
## 导入route53
import aws_cdk.aws_route53 as route53

## 使用ARecord方法,添加A记录
route53.ARecord(self, "ARecord",
## 指定zone名
    zone=my_zone,
## 指定目标主机
    target=route53.RecordTarget.from_ip_addresses("1.2.3.4", "5.6.7.8")
)
  • 添加指向cloudfront分布的aaaa记录
代码语言:javascript复制
## 导入route53
import aws_cdk.aws_route53 as route53
## 导入target
import aws_cdk.aws_route53_targets as targets

## 使用AaaaRecord方法添加aaaa记录
route53.AaaaRecord(self, "Alias",
    zone=my_zone,
## 指定目标
target=route53.RecordTarget.from_alias(targets.CloudFrontTarget(distribution))
)

结构可用于A、AAAA、CAA、CNAME、MX、NS、SRV和TXT记录。 使用CaaAmazonRecord构造轻松限制证书颁发机构,只允许向Amazon颁发域证书。

4.将记录添加到现有托管区域

  • 如果知道托管区域的ID和名称,可以直接导入
代码语言:javascript复制
zone = HostedZone.from_hosted_zone_attributes(self, "MyZone",
    zone_name="example.com",
    hosted_zone_id="ZOJJZC49E0EPZ"
)
  • 如果不知道托管区域的ID和名称,则需要使用HostedZone.fromLookup发现并导入
代码语言:javascript复制
HostedZone.from_lookup(self, "MyZone",
    domain_name="example.com"
)

0 人点赞