olindata的aws cli extras
akinaka的Python项目详细描述
akinaka
这是一个通用的通用工具,用于管理TerraForm不负责的AWS中的内容——您可以将其看作是对AWS
cli的扩展。
目前它只做三件事:blue/green部署用于插入gitlab、ami清理和rds副本到其他帐户。
安装
pip3 install akinaka
要求和假设
ASG名称格式:"随你所愿*-蓝色/绿色*"-粗体部分是必要的,即你必须有两个ASG,一个以"-blue"结尾,一个以"-green"结尾。
对于要运行akinaka的iam角色/用户,以下权限是必需的:
sts:AssumeRole
如果您希望使用每个功能,则上述角色/用户将假定IAM角色具有以下权限:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "2018121701",
"Effect": "Allow",
"Action": [
"ec2:AuthorizeSecurityGroupIngress",
"ec2:DescribeInstances",
"ec2:CreateKeyPair",
"ec2:CreateImage",
"ec2:CopyImage",
"ec2:DescribeSnapshots",
"elasticloadbalancing:DescribeLoadBalancers",
"ec2:DeleteVolume",
"ec2:ModifySnapshotAttribute",
"autoscaling:DescribeAutoScalingGroups",
"ec2:DescribeVolumes",
"ec2:DetachVolume",
"ec2:DescribeLaunchTemplates",
"ec2:CreateTags",
"ec2:RegisterImage",
"autoscaling:DetachLoadBalancerTargetGroups",
"ec2:RunInstances",
"ec2:StopInstances",
"ec2:CreateVolume",
"autoscaling:AttachLoadBalancerTargetGroups",
"elasticloadbalancing:DescribeLoadBalancerAttributes",
"ec2:GetPasswordData",
"elasticloadbalancing:DescribeTargetGroupAttributes",
"elasticloadbalancing:DescribeAccountLimits",
"ec2:DescribeImageAttribute",
"elasticloadbalancing:DescribeRules",
"ec2:DescribeSubnets",
"ec2:DeleteKeyPair",
"ec2:AttachVolume",
"autoscaling:DescribeAutoScalingInstances",
"ec2:DeregisterImage",
"ec2:DeleteSnapshot",
"ec2:DescribeRegions",
"ec2:ModifyImageAttribute",
"elasticloadbalancing:DescribeListeners",
"ec2:CreateSecurityGroup",
"ec2:CreateSnapshot",
"elasticloadbalancing:DescribeListenerCertificates",
"ec2:ModifyInstanceAttribute",
"elasticloadbalancing:DescribeSSLPolicies",
"ec2:TerminateInstances",
"elasticloadbalancing:DescribeTags",
"ec2:DescribeTags",
"ec2:DescribeLaunchTemplateVersions",
"ec2:DescribeSecurityGroups",
"ec2:DescribeImages",
"ec2:DeleteSecurityGroup",
"elasticloadbalancing:DescribeTargetHealth",
"elasticloadbalancing:DescribeTargetGroups"
],
"Resource": "*"
},
{
"Sid": "2018121702",
"Effect": "Allow",
"Action": [
"ssm:PutParameter",
"ssm:GetParameter",
"autoscaling:UpdateAutoScalingGroup",
"ec2:ModifyLaunchTemplate",
"ec2:CreateLaunchTemplateVersion",
"autoscaling:AttachLoadBalancerTargetGroups"
],
"Resource": [
"arn:aws:autoscaling:*:*:autoScalingGroup:*:autoScalingGroupName/*",
"arn:aws:ssm:eu-west-1:[YOUR_ACCOUNT]:parameter/deploying-status-*",
"arn:aws:ec2:*:*:launch-template/*"
]
}
]
}
关于角色假设的说明
akinaka使用iam角色访问多个帐户。大多数命令都要求您指定要为其执行任务的角色列表,并且该角色必须具有sts:assumerole权限。这不仅是很好的安全性,而且有助于确保您对您认为您在为之做事的帐户执行操作;)
展开
使用update
父命令,然后使用asg
和targetgroup
子命令(update targetgroup
仅在蓝色/绿色部署时需要)。
示例:
# For standalone ASGs (not blue/green)
akinaka.py update \
--region eu-west-1 \
--role-arn arn:aws:iam::123456789100:role/management_assumable \
asg \
--asg workers \
--ami ami-000000
# For blue/green ASGs
akinaka.py update \
--region eu-west-1 \
--role-arn arn:aws:iam::123456789100:role/management_assumable \
asg \
--lb lb-asg-ext \
--ami ami-000000
# For blue/green ASGs with multiple Target Groups behind the same ALB
akinaka.py update \
--region eu-west-1 \
--role-arn arn:aws:iam::123456789100:role/management_assumable \
asg \
--target-group application-1a \
--ami ami-000000
对于蓝/绿部署,下一步是检查新ASG的运行状况。 对于gitlab ci/cd管道,这将作为 输出,以便在下一个作业中使用。
一旦确认新的ASG按预期工作:
akinaka.py update --region eu-west-1 --role-arn arn:aws:iam::123456789100:role/management_assumable asg --new blue
--role arn
的值用于承担目标帐户中具有足够
执行修改ASG和目标组的操作的权限。像这样的,
akinaka
能够执行跨帐户部署。如果你
不要提供IAM角色ARN,以确保您正在部署到帐户
你认为你是。
清理
目前支持ami、ebs和rds快照清理。
常用选项:
--role arns
是一个以空格分隔的IAM ARN列表,可以由您正在使用的令牌假定
运行此命令。在这些帐户中找到的正在运行的实例的AMI将不会被删除。不要与--role arn
混淆,它被update
父命令接受,用于部署。
阿米斯
根据指定的保留期清理ami及其快照,并推断ami使用情况(将 不删除当前正在使用的AMI)。您可以选择指定一个ami名称模式,它将 保留找到的所有AMI的最新版本。
用法:
akinaka.py cleanup \
--region eu-west-1 \
--role-arns "arn:aws:iam::198765432100:role/management_assumable arn:aws:iam::123456789100:role/management_assumable" \
ami \
--exceptional-amis cib-base-image-*
--retention 7
以上将删除所有AMI及其快照,除了那些:
- 小于7天且
- AWS帐户"123456789100"或"198765432100"和
- 如果ami名称与模式"cib base image-*"匹配,则有多个匹配项,并且是最早的匹配项 < > >
--exceptional amis
是一个用空格分隔的精确名称或模式列表,用于保存最新的
的AMI版本。例如,模式"cib base image-*"将与正常全局匹配,并且
如果有多个匹配项,则只会删除最新的匹配项(否则不会有任何效果)。
--retention
是要从删除中排除的保留期。例如;--retention 7
将在7天内保留所有发现的AMI,如果它们不在--例外AMI
列表中。
EBS卷
删除所有未连接到实例的EBS卷(是否已停止):
akinaka.py cleanup \
--region eu-west-1 \
--role-arns "arn:aws:iam::198765432100:role/management_assumable arn:aws:iam::123456789100:role/management_assumable" \
ebs
rds快照
This will delete all snapshots tagged "akinaka-made":
akinaka.py cleanup \
--not-dry-run \
--region eu-west-1 \
--role-arns "arn:aws:iam::876521782800:role/OlinDataAssumedAdministrator" \
rds \
--tags "akinaka-made"
< H2> RDS 使用rds执行经常必要但复杂的任务。
复制
在帐户之间复制加密的rds实例:
akinaka.py copy --region eu-west-1 \
rds \
--source-role-arn arn:aws:iam::198765432100:role/management_assumable \
--target-role-arn arn:aws:iam::123456789100:role/management_assumable \
--snapshot-style running_instance \
--source-instance-name DB_FROM_ACCOUNT_198765432100 \
--target-instance-name DB_FROM_ACCOUNT_123456789100 \
--target-security-group SECURITY_GROUP_OF_TARGET_RDS \
--target-db-subnet SUBNET_OF_TARGET_RDS \
--region
是可选的,因为它将默认为环境变量aws\u default\u region
容器
与EKS和ECR交互的功能有限。目前,它只是通过一个假定角色将Docker登录到另一个假定角色:
pip3 install akinaka
0
上面将在注册帐户中承担角色arn:aws:iam::0123456789:role/registry rw
,并弹出一个docker login
行供您使用-与aws ecr get login
完全相同,但适用于假定的角色。
计费
查看您的每日AWS估算账单x天。默认为今天的估计帐单。
pip3 install akinaka
1
示例输出:
pip3 install akinaka
2
您可以为--days ago
标志指定任何整数值。这是可选的。为今天(当天)设置的默认值。
您可以为--region
标志指定任何区域。
贡献
只需将模块放入并在 例如,给定一个名为 以及模块的 添加需要子命令的命令并没有太大的不同,但是您可能需要看一下已经存在的akinaka.py
中添加一个条目即可轻松添加模块,有些模块可以在其\uu init\/code>中(或加载的其他地方,但这是最干净的方式)单击
>。
akinaka moo
的模块和一个名为moo
的命令和文件,在akinaka.py
的适当位置添加这两行代码:
3
pip3 install akinaka
commands.py中的以下内容:
4
pip3 install akinaka
update
和cleanup
示例。
推荐PyPI第三方库