在CLI和CloudFormation中使用最新AMI

本文更新于2023年8月,加入了Amazon Linux 2023的查询方法

一、背景

在CloudFormation中,如果采用hardcode方式嵌入了当前的AMI ID,那么在未来一段时间AMI版本升级后,旧的版本就会过期,导致新创建的环境都必须再次运行yum update进行版本升级。同时,当AMI版本达到一定时间后,因为版本较旧存在安全隐患,可能会下架无法调用,这时候CloudFormation就失效了不能在运行。由此,需要一个在CloudFormation中能使用调用到最新AMI的办法。

本文将分别介绍在AWS CLI下调用最新AMI ID和在CloudFormation中调用System Manager查询的方法。

Continue reading “在CLI和CloudFormation中使用最新AMI”

在使用Windows Server 2019 (1809)的EC2上安装WSL运行Ubuntu Linux

一、背景

在Windows 10上可以使用WSL和新的Terminal直接运行Linux,同时,还可以通过Windows Store在线商店安装需要的Linux发行版。但在Windows Server上,没有在线商店可用。因此,安装方法可以参考如下。

首先检查确认版本高于 Windows Server 2019 (version 1709) 版本。例如EC2上选择Windows Server 2019的话版本是1809版本,可运行WSL 1。如果系统版本是1903或者更高可运行WSL2。

Continue reading “在使用Windows Server 2019 (1809)的EC2上安装WSL运行Ubuntu Linux”

使用IAM创建日常Admin账户并设置留底账户

一、背景

当系统规模不大时候,通常一个AWS Account(账户ID是12位数字)只有几个高权限管理员负责云平台运维,此时可能大家共享同一个登录用户名,由此带来审计不便,且存在安全风险。

由此,可考虑将根账户(root账户)或者一个最高权限的IAM用户作为留底账户保护起来,并额外创建几个新的管理员账号下发给团队。同时,新创建的管理员账号对留底账号和其他管理员账号没有修改权限,以避免各自串通和干扰,确保各自的独立性。

Continue reading “使用IAM创建日常Admin账户并设置留底账户”

为Aurora MySQL启用审计日志(Audit Log)

一、背景

在数据库RDS创建界面中,点击Addional额外设置之后可以展开日志设置,有四个选项,分别是:

Select the log types to publish to Amazon CloudWatch Logs:

  • Audit log
  • Error log
  • General log
  • Slow query log

这几个选项打开后,Cloudwatch会输出General log和Error log,可以看到失败的登录记录,但是无法看到Audit log,也就是无法看到每一条SQL查询、更新级别的日志。

这是由于,RDS日志需要额外打开选项。

Continue reading “为Aurora MySQL启用审计日志(Audit Log)”

使用CloudTrail和Athena分析S3访问日志

本文更新于2023年8月,新增了对于大量CloudTrail历史数据,需要实现创建分区键的说明。否则按照CloudTrail控制台推荐的默认的Athena建表语句进行查询,将是针对数个GB数据的全表扫描带来不必要的成本。按照本文新增章节,创建带有分区键的Athena表,即可显著降低查询成本。分区键推荐采用Region和日期的方式。

一、背景

S3存储桶的文件读写日志包括Server Access Log和CloudTrail两种方式。二者之间的差别可参考如下网址:

https://docs.aws.amazon.com/zh_cn/AmazonS3/latest/userguide/logging-with-S3.html

在官方上描述非常详细,可看到CloudTrail采集的信息更加丰富,因此本文将介绍使用CloudTrail做分析。如下截图。

Continue reading “使用CloudTrail和Athena分析S3访问日志”

EKS 101 动手实验(四)在ARM架构上构建应用并使用ALB Ingress部署应用

EKS动手实验合集请参考这里

EKS 1.30 版本 @2024-07 AWS Global区域测试通过

一、关于多架构支持

前文的实验中,分别创建了两个Nodegroup,一个Nodegroup是使用X8664架构Intel处理器的t3.xlarge(或m5.xlarge/m6i.xlarge)机型,另一个Nodegroup是使用Graviton处理器的ARM机型t4g.xlarge或m6g.xlarge。由于ARM架构的容器景象和X8664架构的容器镜像并不通用,因此本文会重新构建一个ARM版本的image,并上传到ECR镜像仓库中,再部署到节点组。

注意,如果您希望将一个应用同时运行在两种架构的节点上,则需要对同一个应用作两种架构的编译和构建。可参考本文配置。

Continue reading “EKS 101 动手实验(四)在ARM架构上构建应用并使用ALB Ingress部署应用”

EKS 101 动手实验(三)启用CloudWatch Container Insight、新建Nodegroup节点组以及调整节点组机型配置

EKS动手实验合集请参考这里

一、启用CloudWatch Container Insight

2023年11月之后发布的新版CloudWatch Container Insight支持对EKS的EC2节点采集多种运行参数用于监控和诊断,建议在2023年11月之前安装的旧版本升级到新版本。升级方法见本文末尾的参考文档。

以往的CloudWatch Container Insight部署需要手工拉起FluentBit的部署和服务,如今可通过EKS Addon功能直接安装,大大简化了部署。本文将讲解EKS Addon方式安装。如果需要参考以前的FluentBit部署方式,请见本文末尾的参考文档。

Continue reading “EKS 101 动手实验(三)启用CloudWatch Container Insight、新建Nodegroup节点组以及调整节点组机型配置”

EKS 101 动手实验(二)部署AWS Load Balancer Controller

EKS动手实验合集请参考这里

EKS 1.30 版本 @2024-07 AWS Global区域测试通过

一、部署AWS Load Balancer Controller

1、为EKS生成IAM的OIDC授权

执行如下命令。请注意替换集群名称和区域为实际操作的环境。

eksctl utils associate-iam-oidc-provider --region ap-southeast-1 --cluster eksworkshop --approve
Continue reading “EKS 101 动手实验(二)部署AWS Load Balancer Controller”

使用Session Manager登录EC2

本文更新于2023年8月,更新了EC2创建向导中选择IAM Role选项位置的截图为2023年新UI截图。目前AWS海外区和中国区的EC2创建向导界面均为本版本界面。

本文针对Amazon Linux、Redhat Enterprise Linux、Ubuntu等已经内置了SSM Agent的AMI镜像,对于Debian等没有预装SSM Agent的AMI,可参考本文对Debian进行配置。

一、Session Manager简介

Session Manager是System Manager(以下简称SSM)里边的管理套件其中的一个组件。它是一项Region级别的区域性服务。使用Session Manager在特定系统上可以快速免密钥登录EC2。

Continue reading “使用Session Manager登录EC2”

Python批量开关EC2脚本

前提条件:

  • 需要本机配置AWS CLI的AK/SK;
  • 本机安装Python3;
  • 本机安装boto3库(执行pip3 install boto3)。

Python脚本如下:

import boto3.ec2
client = boto3.client('ec2')
ec2action = boto3.resource('ec2')

response = client.describe_instance_status(
    IncludeAllInstances=True
)

for i in response['InstanceStatuses']:
    instance = ec2action.Instance(i['InstanceId'])
    response1 = instance.stop(
            #DryRun=True,
            Force=True
    )
    print("instance: ", i['InstanceId'], "is being stopped." )
    print(response1)

以上为关机脚本。如果需要批量开机,替换stop为start即可。