import boto3, sys, datetime, socket
def _get_boto_session(profile_name: str) -> boto3.Session:
"""
Get the boto3 session. Works with profile configured in runtime.
:param profile_name: The configured AWS profile name. Pass in None to use default credentials chain.
:returns: The Boto session.
"""
if profile_name == None:
session = boto3.Session(region_name="ap-southeast-1")
return session
else:
session = boto3.Session(profile_name=profile_name)
return session
def _check(
session: boto3.Session,
trainer_name: str,
):
ret_and_indent = "
"
step_2_needed = None
# AWS pricing for SIN
c5_xlarge_instance_minute_price = 0.003266666666666667
ebs_gp2_100gb_minute_price = 0.00023148148148148146
# AWS pricing for NRT
c5_xlarge_instance_minute_price = 0.0035666666666666668
ebs_gp2_100gb_minute_price = 0.00023148148148148146
# AWS pricing for PAX
c5_xlarge_instance_minute_price = 0.0028333333333333335
ebs_gp2_100gb_minute_price = 0.00023148148148148146
c5_xlarge_minute_price = (
c5_xlarge_instance_minute_price + ebs_gp2_100gb_minute_price
)
ec2_client = session.client("ec2")
sum_cost = 0.0
instances_dict = {}
response = None
real_reservations = []
if trainer_name == "all":
response = ec2_client.describe_instances(
Filters=[
{
"Name": "instance-state-name",
"Values": [
"running",
],
},
],
DryRun=False,
MaxResults=500,
)
real_reservations += [response["Reservation"]]
while "NextToken" in response and response["NextToken"] != None:
nt = response["NextToken"]
response = ec2_client.describe_instances(
Filters=[
{
"Name": "instance-state-name",
"Values": [
"running",
],
},
],
DryRun=False,
MaxResults=500,
NextToken=nt,
)
real_reservations += [response["Reservation"]]
else:
response = ec2_client.describe_instances(
Filters=[
{
"Name": "instance-state-name",
"Values": [
"running",
],
},
{
"Name": "tag:trainer",
"Values": [
trainer_name,
],
},
],
DryRun=False,
MaxResults=500,
)
real_reservations += [response["Reservations"]]
while "NextToken" in response and response["NextToken"] != None:
nt = response["NextToken"]
response = ec2_client.describe_instances(
Filters=[
{
"Name": "instance-state-name",
"Values": [
"running",
],
},
{
"Name": "tag:trainer",
"Values": [
trainer_name,
],
},
],
DryRun=False,
MaxResults=500,
NextToken=nt,
)
real_reservations += [response["Reservations"]]
for reservations in real_reservations:
for reservation in reservations:
for instances in reservation["Instances"]:
up_time = round(
(
datetime.datetime.now(datetime.timezone.utc)
- instances["UsageOperationUpdateTime"]
).seconds
/ 60
)
name = None
trainer = None
student = None
node_role = None
for tag in instances["Tags"]:
if tag["Key"] == "Name":
name = tag["Value"]
if tag["Key"] == "trainer":
trainer = tag["Value"]
if tag["Key"] == "student":
student = tag["Value"]
if tag["Key"] == "role":
node_role = tag["Value"]
if (
name == None
or trainer == None
or student == None
or node_role == None
) and (name != "lab-control"):
step_2_needed = "Setup In-Progress ..."
cost = 0.0
cost = round(up_time * c5_xlarge_minute_price, 2)
if name != "lab-control":
sum_cost += cost
instances_dict.update(
{
(trainer if trainer != None else " ")
+ ":"
+ (student if student != None else " ")
+ ":"
+ (node_role if node_role != None else " ")
+ ":"
+ instances["InstanceId"]: "
| 实例 ID | 公网 IP | 私网 IP | 建议角色 | 讲师标签 | 学生标签 | 名称 | 启动时间 (分钟) | " ) print("
|---|
选择一个 "练习" 开始实验。
' ) if m_public_ip != "monitor1_address": print("") if "None" not in pd_dashboard_url: print( '
PD 仪表板 - ' + pd_dashboard_url + "" ) monitor_ip = m_public_ip.strip() grafana_port = 3000 timeout_seconds = 1 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.settimeout(timeout_seconds) result = sock.connect_ex((monitor_ip, int(grafana_port))) if result == 0: print( '
Grafana 仪表板 - http://' + monitor_ip + ":3000" ) sock.close() print("") else: None print( '
连接中控机的步骤: 在环境准备就绪后,按照以下步骤登录中控机节点 monitor1 (更多详细信息或 Windows 笔记本电脑用户请参阅本指南)。
'
)
print(
' 1. 保护下载好的 TiUP 中控机私钥 (单击密钥文件名进行下载): chmod 400 pe-class-key-singapore.pem'
)
print(
' 2. 确保 ssh-agent 已经运行在您的笔记本上了 (Windows 用户请参阅本指南)。'
)
print(
' 3. 将身份添加到身份验证代理: ssh-add pe-class-key-singapore.pem'
)
print(
' 4. SSH 登录到 TiUP 中控机: ssh -A -o ServerAliveInterval=30 -o ServerAliveCountMax=5 ec2-user@'
+ m_public_ip
+ "
",
)
print(
'
课堂中基本的 TiDB 集群拓扑:
