
AWS
Yanbin_Q
真没什么要交待的,保持沉默
展开
-
实测 AWS Lambda 不同内存配置下的 CPU 核心数
目前(2023-05-25) AWS Lambda 的内存选择区间是 128MB ~ 10240MB, 最长运行时间为 15 分钟,但没有 vCPU 个数的选择。vCPU 的数量是基于所选内存大小而有不同的,如果我们在 Lambda 中需使用多进程充分发挥 CPU 性能的话,有必要了解当前 Lambda 所在运行环境的 CPU 内核数,甚至是单核的频率。组件的方法,可把 psutil 做成 Lambda 层以引用,或与 Lambda 函数代码一同打成 zip 包。原创 2023-05-30 10:57:13 · 369 阅读 · 0 评论 -
AWS SNS 订阅到 HTTP 的过程及消息报文
同邮件列表一样,订阅 SNS 消息也是需要确认的,不然 SNS 消息就可能恶意满天飞。本文试验如何用 HTTP 端点订阅 SNS 消息,订阅确认,以及发送消息到 SNS 主题后消息推送到 HTTP 端点的细节,重点是了解订阅及被推送过来消息时的 HTTP 报文内容。SNS 的 HTTP 端点订阅需要一个公网上的 HTTP URL, 对 SNS 可见,所以我在本地测试时在家中路由器上加一个端口映射,对 Modem 获得的公有 IP 的 8080 端口访问转发到写此文用所用机器的 8080 端口上。原创 2023-02-24 22:36:42 · 829 阅读 · 0 评论 -
使用 ECS Exec 直通 ECS 容器会话(适用于 Fargate 和 EC2)
基于 EC2 的 ECS 服务,要看看容器内的状态,一直以来都是先 SSM(Simple System Manager) 或 SSH 进到 EC2 实例,然后再。. 但是对使用 Farget 的 ECS 服务就无能为力了,因为找不到 SSM 或 SSH 的主体, 只能通过程序日志来大概了解容器内发生的事了。,连接过程中唯一的不同就是容器中也运行了一个 SSM Agent, 所以这个容器也就无所谓是在 EC2 实例还是在 Fargate 中。允许我们直接连接 Fargate 或 EC2 中的容器会话,见。原创 2023-02-24 22:33:43 · 672 阅读 · 0 评论 -
构建 AWS AMI 镜像(EC2 Image Builder + Terraform)
使用到 AWS 的 EC2 服务时,选择一个基础镜像后,要定制的话需要在 userdata 中写上一堆脚本。如果不想每次重复 userdata,或者要更快速的初始化一个虚拟机,就应该定制自己的 AMI,特别是在 Batch, ECS, EKS 选择的基础镜像还不方便使用 userdata。定制一个 AMI, 我们可以用aws create-image命令,或是 HashiCorp 提供的Packer(它不仅支持 AWS, 还能为 阿里云,Azure, Google 云,vmware, docker...原创 2022-04-13 09:02:41 · 2168 阅读 · 0 评论 -
使用原生的 Windows Docker 容器
一谈到 Docker 容器,按照以往的惯性思维,那就是 Linux 容器(LXC),和 Windows 没多大关系,顶多也就是在 Windows 的 Linux 虚拟机中跑 Docker 容器。不过自从 Windows Server 2016 开始,出现了 Windows 原生的 Docker 容器,它再也不只是 Linux 下的专利了。Docker 容器中可以运行 Windows 系统了, 每个 Windows 容器共享宿主机的 Windows 内核(--isolation=process,),或使用原创 2022-03-03 13:04:04 · 1879 阅读 · 0 评论 -
Windows 下的软件包管理(Chocolatey)
在 Mac OS X 或各个 Linux 发行版都有自己的软件包管理工具,如Mac OS X: brew, MacPorts已鲜有人使用了 Debian 系列: apt, 或 apt-get, 还有用 snap的 RedHat 系列: yum, 或 dnf Arch 系: pacman SUSE 系: YaST 或 Zypper Alpine 系: apk, 如 apk add openssh基于现代的远程服务器管理,还总是用 RDP(远程桌面)来连接就显得有点那个了,效率上与命令行...原创 2022-03-03 13:01:31 · 429 阅读 · 0 评论 -
AWS Windows EC2 实例的 userdata 应用笔记
因为平常主要是使用 EC2 的 Linux 实例,所以之前写过的一篇关于 UserData 的日志创建 AWS EC2 实例时 userdata 的一些知识默认就是讲的有关 Linux 实例的 UserData。本文补充上 Windows 的 EC2 实例 UserData 的基本使用,参考自 AWS 官方文档Run commands on your Windows instance at launch。Windows 的 UserData 被谁执行,依据所选择 AMI的不同有以下三种方式E...原创 2022-03-03 13:00:35 · 398 阅读 · 0 评论 -
配置 AWS Lambda Python Logging
通常在 Python 应用中简单的配置使用内置的 logging是这样的 1 2 3 4 5 6 import logging logging_format = '%(asctime)s - %(levelname)s - %(module)s(%(funcName)s:%(lineno)d) - %(message)s' logging.basicConfig(level=logging.INFO, for.原创 2022-01-26 13:09:37 · 614 阅读 · 0 评论 -
学习使用 AWS API Gateway V2
关于 AWS API Gateway V1, 写过一篇笔记Lambda + API Gateway 创建需 API Key 验证的 API。 AWS 又推出了 API Gateway V2(服务管理/理解层面), 它同样可以用来作 HTTP-PROXY 调用 REST API, WebSocket; AWS-PROXY 调用 Lambda, 还能直接调用 AWS 的其他服务,如 StepFunction, SQS 等。在 V1 中创建整套服务的过程基本是 Resource -> Method ..原创 2022-01-02 07:11:49 · 652 阅读 · 0 评论 -
Terraform 的变量使用及赋值规则
本人在 AWS 上建立基础架构的时候倾向于用 Terraform, 而不是 AWS 自家的 CloudFormation。倒不是因为 Terraform 支持多种类型的 Provider,而是它能模块化,不同项目共享 AWS 资源时也更方便。而使用 CloudFormation 的话,一不小心就会写出一个超大的 YAML 文件来,要使用共同的 AWS 资源时,谁来创建是个不小的问题。CloudFormation 稍值得称道的地方也就是有一个可视化的 Stack,但把 Terraform 执行的 stat..原创 2021-12-22 06:25:49 · 491 阅读 · 0 评论 -
AWS Assume IAM role 的使用
AWS 要授权给他人访问指定资源有哪几种方式呢?创建一个 AWS 帐号让别人用,那是 AWS 干的事 在自己帐号下创建一个用户,把 Access Key ID 和 Secret Access Key 告诉别人。可为该用户限定权限,但任何获得那两个 Key 的人都能使用该用户。 创建一个 IAM Role, 并指定谁(帐号或 Role) 能以该 Role 的身份来访问。被 Assume 的 Role 可限定权限和会话有效期。用 Assume Role 的方式具有更高的安全可控性,还不用维护 Acce原创 2021-11-12 08:49:46 · 2116 阅读 · 0 评论 -
构建 AWS Lambda Python Docker 镜像
AWS 的 Lambda 在 2020-12-01 开始支持用 Docker 镜像存放代码,见New for AWS Lambda - Container Image Support。AWS Lambda 最初的对发布包的限制是 50M, 解压后(因为执行前需要解压缩)不能超过 250M,对于压缩比小于 1/5 的包来说,要突破 50M 部署包的限制就要用 2018-11-29 推出的层(layer), 即把 Lambda 的依赖可以组织为层,每个 Lambda 可引用最多 5 个层,但最终 Lambda.原创 2021-11-12 08:49:21 · 499 阅读 · 0 评论 -
Lambda + API Gateway 创建需 API Key 验证的 API
希望在标题上尽量包含更多的信息,原本命题为: Lambda + API Gateway 创建需 API Key 验证的 API(Docker + Python + Terraform), 但是觉得太长了,于是只取了前半部份。仍然要在开头部分强调一下本文件打算要实现什么在 AWS 用 Lambda 和 API Gateway 创建 API 创建的 API 是 public 的,需要用 x-api-key来验证 Lambda 的实现代码打包在了一个 Docker镜像中 整个 AWS 的基础架...原创 2021-10-14 12:31:04 · 307 阅读 · 0 评论 -
AWS DynamoDB 的常用操作
AWS 提供的 NoSQL 数据库有 DynamoDB, DocumentDB(即 MongoDB), 和 Keyspaces(即 Cassandra)。还有一个神秘的早已消失于 AWS 控制台之外的 SimpleDB,它只能通过 API 才能使用。因为 AWS 有意要把它藏起来,不愿被新用户看到它,希望用 DynamoDB 替代它,关于用 aws cli 如何体验 AWS SimpleDB 可见本文后面部分。DynamoDB 所设计的读写容量参数的概念,AWS 为其标榜是为保证一致性与明确的性能表现,原创 2021-10-14 12:25:34 · 430 阅读 · 0 评论 -
创建 AWS EC2 实例时 userdata 的一些知识
我们在初始一个 AWS EC2 实例时,可以通过 user data 让 EC2 第一次启动后做些事情,可以放置 shell script 或 cloud-init 指令。在控制台设置 user data 可用明文文本,由 awscli 创建时可使用一个文件,或者通过 API 用 base64 编码的内容。下面是 user data 被执行时需知晓的一些知识是脚本时必须以#!开始,俗称 Shebang, 如#!/bin/bash user data是以root身份执行,所以不要用sud...原创 2021-10-14 12:25:05 · 1509 阅读 · 0 评论 -
DynamoDB Stream 应用及触发 Lambda 函数
DynamoDB Stream 的实质就是一个依附于表的流,对表的增删改像关系型数据的触发器一样,以日志形式按顺记录到该流中。我们可以用 API 去读取其中的记录,或用来触发一个 Lambda。DynamoDB Stream 非常类似于 Kinesis 的 Stream, 它们都是有 Shard 的概念,但是 DynamoDB Stream 的 Shard 数目是不太确定的。而且还能用 KCL(Kinesis Client Library) 来操作 DynamoDB Stream。DynamoDB St原创 2021-09-10 04:27:30 · 956 阅读 · 0 评论 -
如何调试 ECR Docker 镜像
常常因为在 AWS 上部署的 ECS 或 EKS 服务,甚至是使用了 ECR 镜像的 Lambda 服务这样或那样的原因无法启动,或其他莫名的异常,这时候最好能直接调试 ECR 上的 Docker 镜像,比调试用于打包 Docker 的源代码更接近真实环境。要调试 Docker 镜像需要先从 ECR 中下载到 AWS 服务用的镜像,下面以运行 Java 的 Docker 为例,同时用 IntelliJ IDEA 关联源代码进行远程调试。从 ECR 下载 Docker 镜像部分可参考推送 Docke.原创 2021-09-10 04:26:38 · 409 阅读 · 0 评论 -
AWS Session Manager 管理 EC2 实例
管理一个远程机器最常规的做法是 SSH(Unix/Linux, Mac) 或 PowerShell/RDP(Windows),这就要求远端机器要开通相应的访问端口及打开防火墙,配置好登陆用的用户名密码或 SSH Key。当选择一个 EC2 实例的时候,可以点击 "Connect" 按,它提供有三种连接选择:EC2 Instance Connect: 要求 EC2 配置了 SSH Key, 启动了 sshd 并开启了 ssh 的 Security Group,还要在实例上安装了ec2-instance-.原创 2021-02-25 05:11:46 · 1072 阅读 · 0 评论 -
Redis 中使用服务端 Lua 脚本
Redis 自 2.6 版本起加入了服务端的 Lua 脚本支持,即增添了EVAL,EVALSHA,SCRIPT相关命令。Lua 为何物,Lua 是一个非常轻量级,强大,高效,可内嵌的脚本语言; 产自于巴西,源码和二进制包都只有 200 多 KB。当前版本的 Redis 5.0.5 中 Lua 引擎版本是 Lua 5.1(自 Redis 2.6 起就没变,当前 Lua 为 5.3.5),可用...原创 2019-10-29 10:58:28 · 418 阅读 · 0 评论 -
AWS Python Lambda 使用 Layer
使用 Python 书写 AWS Lambda 的一个好处就是能够在控制台中直接编辑源代码,非常方便进行快速验证测试 AWS 环境相关的。这只限于使用 AWS 为 Python Lambda 运行时提供的默认组件(比如 boto3),尚若需要在自己的 Python Lambda 中使用其他的组件(如 redis), 就不得不把自己的代码及依赖打成一个 zip 包再部署,这时候就无法在控制台直接编辑...原创 2019-10-24 05:13:30 · 1165 阅读 · 0 评论 -
AWS Lambda 按序处理同一个 Kinesis Shard 中的消息
当 AWS Lambda 由 Kinesis 消息来触发时,一个 Kinesis Shard 会相应启动一个 Lambda 实例,比如说 Kinesis Stream 有 5 个 Shards, 那同时只会启动 5 个 Lambda 实例。那么把多条消息发送到同一个 Kinesis Shard 中去,这些消息会被如何消费呢?答案是按顺消息,不管这些消息是否被不同的 Lambda 实例处理。本文就是原创 2017-06-05 03:45:58 · 1659 阅读 · 0 评论 -
Terraform 使用 - 从最简单例子开始
Terraform 是一个 IT 基础架构自动化编排工具,它的口号是 "Write, Plan, and create Infrastructure as Code", 基础架构即代码。具体的说就是可以用代码来管理维护 IT 资源,比如针对 AWS,我们可以用它创建,修改,删除 S3 Bucket, Lambda, EC2 实例,Kinesis, VPC 等各种资源。并且在真正运行之前可以看到原创 2017-08-27 03:15:08 · 28582 阅读 · 4 评论 -
Terraform 进阶 - 部署 Lambda 并创建相关资源
昨日刚刚体验了 Terraform 是一个什么鬼东西 Terraform 使用 - 从最简单例子开始,今天再进一步。将来尝试的是使用 Terraform 来部署一个 Lambda 应用,并创建相关的资源。本例中的 Lambda 要由 Kinesis 来触发,并写数据到 S3 Bucket 中去,所以需要做的事情大致如下:创建 IAM Role, 该 Role 要能访问 S3原创 2017-08-29 15:14:47 · 2217 阅读 · 0 评论 -
实现 Amazon S3 数据(文件)分段上传
探索是否能以流式写数据到 S3通常,在我们项目中用 Java 代码上传数据到 S3 是下面那样的操作AmazonS3 s3Client = AmazonS3ClientBuilder.defaultClient();s3Client.putObject("bucket_name", "s3key.txt", new ByteArrayInputStream("hello".原创 2017-12-12 16:24:09 · 7277 阅读 · 0 评论 -
推送 Docker 镜像到 Amazon ECR 仓库
Docker 镜像在未指定仓库时默认是从 Docker Hub 拉取的。如果需向 Docker Hub 推送镜像的话还可用 docker login 在交互中完成登陆 Docker Hub 的操作。docker login 的命令格式是docker login [OPTIONS] [SERVER]所以我们可以连接到任何的 Docker 镜像仓库,也可以是本机,但我原创 2018-01-30 23:27:31 · 3168 阅读 · 0 评论 -
AWS SQS 队列的 DLQ 设置与行为
和 Lambda 类似,AWS 的 SQS 队列也提供了 DLQ(Dead Letter Queue) 来支持重试功能,可以设定某一个消息在接收多次重新变得可见后进入到另一个 SQS 队列中。比如说队列 user-id-queue,设定了它的 Redrive Policy 为三次接收后转入到另一个 SQS 队列 user-id-dlq, 就会显示为Maximum Receives 3Dead L...原创 2018-04-02 11:23:49 · 2367 阅读 · 0 评论 -
Dockerfile 中命令的两种书写方式的区别
最早的初衷是要研究一下运行 Docker 容器时如何向其传递参数,却冷不防掉入了另一个深渊,不得不关心起 Dockerfile 中命令(包括 RUN, CMD 和 ENTRYPOINT) 的两种不同写法上的区别。所以呢,先要稍稍了解一下 Dockerfile 中 RUN, CMD, ENTRYPOINT 这三个指令RUN 执行命令并创建新的镜像层,常用于安装软件包。可以多个,为避免创建过多的镜像层...原创 2018-04-02 11:24:54 · 1831 阅读 · 0 评论 -
如何向 Docker 容器传递参数
我们在运行 docker 镜像时希望能用下面的命令向容器传递命令行参数docker run <image-name> <command> arg1 arg2docker run <image-name> arg1 arg2其实只有第一种形式,紧随镜像名后那个总是一个命令,其后才是参数。如果要向 docker 容器传递参数时,Dockerfile 该如何写,这就有...原创 2018-04-02 11:25:40 · 14964 阅读 · 0 评论 -
AWS Batch 是如何向 Docker 容器传递参数
AWS Batch 提供了简单有效的方式来运行 Docker 镜像,在单纯执行一个计算任务时比 ECS 使用起来要方便许多。AWS Batch 在提交任务时可以执行 command, environment 和 parameters, 那么它将如何传递那些参数给 Docker 容器呢?首先看一下提交任务的脚本aws batch submit-job \ --job-name test-job ...原创 2018-04-02 11:26:52 · 1059 阅读 · 0 评论 -
AWS S3 应用 KMS Key 进行服务端数据加密
当我们把数据搬上云端,为了保护敏感数据一定要对数据存储进行加密。而对于 S3 上的数据加密最简单莫过于启用服务端数据加密,可以是 AES-256 或 AWS-KMS。进行了服务端加密码的文件有什么不同呢?首先从 AWS S3 文件列表视图中看到的文件大小与原始文件大小是一样的,其实数据在 AWS 机房是加密存储了的,比如说直接在 AWS 服务器上拷出那些 S3 文件是不能理解的。本文涉及的内容包括...原创 2018-05-14 06:31:54 · 4690 阅读 · 0 评论 -
AWS Lambda 重试与死信队列(DLQ)
AWS Lambda 允许设置 Debugging and error handling, 在 Lambda 出现异常,达到最大的重试次数后,把以下信息放到选择的 SNS 或 SQS 主题作为死信队列(DLQ - Dead Letter Queue),包括原始 Lambda 接收到的消息(基于 SNS 和 SQS 消息的总大小,可能会被截取,本人猜测,尤其是 Kinesis 的消息会比较大)...原创 2018-10-01 13:44:11 · 2319 阅读 · 0 评论 -
Amazon SQS 触发 AWS Lambda 及重试/DLQ
Amazon 在 2018 年 6 月份宣布可以设置用 SQS 来触发 Lambda,SQS 不再是单纯用于 ECS 服务中,或用于伸缩控制的。这儿就来亲自尝试一下用 SQS 驱动的 Lambda,以及要注意的要素。首先使用 Java 编写 Lambda 的话,AWS 在 com.amazonaws:aws-lambda-java-events:2.20 版本开始加入了 com.amazona...原创 2018-10-08 14:51:05 · 1695 阅读 · 0 评论 -
AWS S3 Key 前缀分布优化数据请求的性能
很早就想写下这篇日志的,因为实际使用 AWS S3 来存取文件使用什么样的 Key 对性能的影响是极其大的。当然,如果你对 S3 的并发请求在 50 以内是无所谓的,要是并发要求很高的话,Key 的选择就变得至关重要的,不可不察。S3 Key 从第一个字符算起的任意长度子字符串都被称作前缀(prefix), 而对 S3 文件访问性能影响不在完整的 Key, 恰恰是那个前缀。背景:我们最初在原创 2017-06-05 03:45:23 · 3557 阅读 · 0 评论