Amazon web services 如何轻松格式化AWS CLI命令
我正在使用AWS EMR进行大量工作,当您通过AWS管理控制台构建EMR群集时,可以单击按钮导出创建EMR群集的AWS CLI命令 然后,它将为您提供一个大的CLI命令,该命令不会以任何方式进行格式化,即,如果您复制并粘贴该命令,则所有命令都将显示在一行中 我正在使用这些由其他人创建的EMR CLI命令,使用AWS SDK Boto3库在Python中创建EMR集群,也就是说,我正在查看CLI命令以获取所有配置详细信息。AWS管理控制台UI上提供了一些配置详细信息,但并非所有配置详细信息,因此我更容易使用您可以导出的CLI命令 但是,AWS CLI命令很难读取,因为它没有格式化。是否在线提供类似于的AWS CLI命令格式化程序?Amazon web services 如何轻松格式化AWS CLI命令,amazon-web-services,aws-cli,emr,amazon-emr,Amazon Web Services,Aws Cli,Emr,Amazon Emr,我正在使用AWS EMR进行大量工作,当您通过AWS管理控制台构建EMR群集时,可以单击按钮导出创建EMR群集的AWS CLI命令 然后,它将为您提供一个大的CLI命令,该命令不会以任何方式进行格式化,即,如果您复制并粘贴该命令,则所有命令都将显示在一行中 我正在使用这些由其他人创建的EMR CLI命令,使用AWS SDK Boto3库在Python中创建EMR集群,也就是说,我正在查看CLI命令以获取所有配置详细信息。AWS管理控制台UI上提供了一些配置详细信息,但并非所有配置详细信息,因
我可以使用的另一个解决方案是克隆EMR群集,并在AWS管理控制台上通过EMR群集创建屏幕获取所有配置详细信息,但我仍然很好奇是否可以格式化CLI命令并以这种方式执行。能够格式化导出的CLI命令的另一个好处是,我可以将其放在一个汇合页面上进行文档编制。下面是一些快速python代码:
导入shlex
导入json
进口稀土
def格式_命令(命令):
tokens=shlex.split(命令)
格式化=“”
对于令牌中的令牌:
#旗帜得到一个新的行
如果令牌.startswith(“--”):
格式化+='\\\n'
#JSON数据
如果('[','{')中的标记[0]:
json_data=json.loads(令牌)
data=json.dumps(json_数据,缩进=4)。替换('\n','\n'))
格式化+=“{}”。格式(数据)
#引号标记(当它包含空格时)
elif重新匹配('\s',标记):
格式化+=“{}”。格式(标记)
#剩余代币的简单打印
其他:
格式化+=标记+“”
返回格式
示例=“aws emr创建集群——应用程序名称=spark Name=ganglia Name=hadoop--tags'Project=MyProj'--ec2属性“{”KeyName:“emr密钥”,“AdditionalSlaveSecurityGroup:”[“sg-3822994c”,“sg-ccc76987”,“InstanceProfile:“emr_ec2_默认角色”,“ServiceAccessSecurityGroup:“sg-60832c2b”,“SubnetId:“subnet-3c76ee33”,“子网””EmrManagedSlaveSecurityGroup:“sg-dd832c96”,“EmrManagedMasterSecurityGroup:“sg-b4923dff”,“AdditionalMasterSecurityGroups:”[“sg-382299C”,“sg-ccc76987”]}'--服务角色EMR_默认角色--发布标签EMR-5.14.0--名称“测试群集”---实例组[{“InstanceCount”:1,“EBSCOConfiguration:{“EBSBlockDeviceConfig”:[{“卷规格化”:{”SizeInGB:32,“VolumeType”:“gp2”},“VolumeSpeeringInstance”:1}]},“InstanceGroupType”:“MASTER”,“InstanceType”:“m4.xlarge”,“Name”:“MASTER”},{“InstanceCount”:1,“EBSCOConfiguration”:{“EbsBlockDeviceConfigs”:[{“VolumeSpecification”:“{”SizeInGB:32,“VolumeType”:“XL2”},“VolumeSpeeringInstanceType”:“CORE”,“InstanceType”:“m4.arge”,“Name”:“CORE”}]'--configurations'[{“Classification”:“spark defaults”,“Properties”:{“spark.sql.avro.compression.codec”:“snappy”,“spark.eventLog.enabled”:“true”,“spark.dynamicAllocation.enabled”:“false”},“configurations”:[]},{“Classification”:“spark env”,“Properties”:{},“configurations”:[{“Classification”:“导出”,“Properties”:{“spark_守护进程内存”:“4g”},”配置“:[]}]]'--缩小行为在任务完成时终止--区域us-east-1”“”
打印(格式化_命令(示例))
输出如下所示:
aws emr create-cluster \
--applications Name=spark Name=ganglia Name=hadoop \
--tags Project=MyProj \
--ec2-attributes '{
"ServiceAccessSecurityGroup": "sg-60832c2b",
"InstanceProfile": "EMR_EC2_DefaultRole",
"EmrManagedMasterSecurityGroup": "sg-b4923dff",
"KeyName": "emr-key",
"SubnetId": "subnet-3c76ee33",
"AdditionalMasterSecurityGroups": [
"sg-3822994c",
"sg-ccc76987"
],
"AdditionalSlaveSecurityGroups": [
"sg-3822994c",
"sg-ccc76987"
],
"EmrManagedSlaveSecurityGroup": "sg-dd832c96"
}' \
--service-role EMR_DefaultRole \
--release-label emr-5.14.0 \
--name Test Cluster \
--instance-groups '[
{
"EbsConfiguration": {
"EbsBlockDeviceConfigs": [
{
"VolumeSpecification": {
"VolumeType": "gp2",
"SizeInGB": 32
},
"VolumesPerInstance": 1
}
]
},
"InstanceCount": 1,
"Name": "Master",
"InstanceType": "m4.xlarge",
"InstanceGroupType": "MASTER"
},
{
"EbsConfiguration": {
"EbsBlockDeviceConfigs": [
{
"VolumeSpecification": {
"VolumeType": "gp2",
"SizeInGB": 32
},
"VolumesPerInstance": 1
}
]
},
"InstanceCount": 1,
"Name": "CORE",
"InstanceType": "m4.xlarge",
"InstanceGroupType": "CORE"
}
]' \
--configurations '[
{
"Properties": {
"spark.eventLog.enabled": "true",
"spark.dynamicAllocation.enabled": "false",
"spark.sql.avro.compression.codec": "snappy"
},
"Classification": "spark-defaults",
"Configurations": []
},
{
"Properties": {},
"Classification": "spark-env",
"Configurations": [
{
"Properties": {
"SPARK_DAEMON_MEMORY": "4g"
},
"Classification": "export",
"Configurations": []
}
]
}
]' \
--scale-down-behavior TERMINATE_AT_TASK_COMPLETION \
--region us-east-1
这是一个完美的人,谢谢分享。对于任何使用它的人来说,它与Python2.7.14而不是Python3一起工作。我还做了一个“查找和替换”在记事本++中删除\个字符。谢谢Ryan Widmaier。我把的放进去,所以理论上如果你把它倒进一个shell中,它会运行,尽管我没有实际测试它。另外,为python3更新,这实际上只是打印调用。是有意义的,是的,我注意到这只是打印调用,只是想澄清一下,以防有人被删除使用这个不懂Python的人(愚蠢的Python 2.7-3更改…)