olindata的aws cli extras

akinaka的Python项目详细描述


akinaka

这是一个通用的通用工具,用于管理TerraForm不负责的AWS中的内容——您可以将其看作是对AWScli的扩展。

目前它只做三件事: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父命令,然后使用asgtargetgroup子命令(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及其快照,除了那些:

  1. 小于7天且
  2. AWS帐户"123456789100"或"198765432100"和
  3. 如果ami名称与模式"cib base image-*"匹配,则有多个匹配项,并且是最早的匹配项
  4. < > >

    --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的适当位置添加这两行代码:

    pip3 install akinaka
    
    3

    以及模块的commands.py中的以下内容:

    pip3 install akinaka
    
    4

    添加需要子命令的命令并没有太大的不同,但是您可能需要看一下已经存在的updatecleanup示例。

    欢迎加入QQ群-->: 979659372 Python中文网_新手群

    推荐PyPI第三方库


热门话题
在Eclipse中使用多个调用在一行上打印java   javajackson序列化问题。只有同一实体的第一个对象可以很好地序列化   Java中Deflate函数的等价充气   使用customlitview的java Android actionbar搜索   java“<T>T get()”是什么意思?(它有用吗?)   目标c使用CommonCrypto使用AES256加密,使用OpenSSL或Java解密   java在运行时更新资源文件   fileinputstream在java中访问并将数据写入现有文件   带集群的java Android Mapbox我希望每个功能都有不同的标记图像   java JDK8>JDK10:PKIX路径生成失败:SunCertPathBuilderException:找不到请求目标的有效证书路径   java使用Hk2生成具有指定构造函数参数的实例   为什么这个系统。出来Java中的println()打印到控制台?   java目录和文件名连接不起作用   使用mockito和通配符绘图的java