使用Cython编译运行保护Python源代码

一、背景

Python语言被广泛使用,在数据处理、机器学习等领域有统治地位。Python作为解释型语言,其主要优势就是跨平台、代码简洁,然而这也带来负面的影响,那就是解释型语言的运行效率低。因此,针对Python语言的编译运行有很多解决方案,其中一种是Cython。Cython可以将Python代码转换为C语言并编译为动态链接库,然后Python代码中可直接调用这些动态链接库。如此虽然提升了速度,但也带来一系列问题。一是编译后的动态链接库失去了跨平台特性,每个硬件架构平台(如X86_64和ARM)、不同操作系统版本(Glibc版本差异)的动态链接库是不通用的,都需要重新编译。二是要达到和C相近的性能,Python代码需要做优化才可以完全按C语言编译执行,由此带来代码改动的工作量,即需要在代码中按照Cython语言的要求对变量添加类型声明。如果不做这些优化,那么使用Cython比直接运行原Python效率提升有限,有提升但没有上升一个数量级,远不及C的运行速度。

虽然有着这两点缺点,不过使用Cython还有一个额外的收获,那就是编译后的动态链接库可封装代码,在一定程度上起到保护源代码的作用,让原始代码不再直接可读。由于反编译C代码动态链接库的门槛较高,因此这个方式在一定程度上提升了获取源代码的难度,实现了比较初步的源代码保护。因此本文不探讨Cython编译后的加速效果,而是介绍编译后保护代码明文的效果。

Continue reading “使用Cython编译运行保护Python源代码”

如何切换Cloud9的Owner

注意:Cloud9宣布了将在2024年7月之后不再为新账号提供服务,原有AWS账号可继续使用。请参考本文末尾的官网说明。

一、背景

使用Cloud9时候经常遇到一个问题,创建Cloud9开发环境的是另外的IAM User或者是联合登陆的IAM Role,在环境创建好之后使用另外的账户去操作Cloud9,在本Region的Cloud9界面下的My environment下是看不到别人创建的Cloud9的。由此必须切换到创建Cloud9的身份重新登陆AWS控制台。这样使用非常不便。另外,如果创建Cloud9的是一个IAM Role,可能无法直接登陆。

此时,可以通过CLI为现有的Cloud9增加新的权限,即可让其他人有权限使用。

Continue reading “如何切换Cloud9的Owner”

使用CodeWhisperer代码提示和补全提升开发效率

一、CodeWhisperer简介

Amazon CodeWhisperer是一款辅助开发的代码生成服务,可根据进行代码生成、代码补全、代码审查等。Amazon CodeWhisperer支持多种编程语言,包括Python、Java、JavaScript、TypeScript、C#、Go、Rust、PHP、Ruby、Kotlin、C、C++、Shell 脚本、SQL、Scala、JSON、YAML和HCL等。

目前,CodeWhisperer支持的IDE包括VS Code、IntelliJ IDEA、Visual Studio、PyCharm、WebStorm和Rider等。此外,CodeWhisperer还支持MacOS下的终端/Iterm2用于CLI交互。您可以使用这些IDE的插件/扩展连接到CodeWhisperer,并享受便捷的开发效率。

Continue reading “使用CodeWhisperer代码提示和补全提升开发效率”

使用AWS Java SDK V2创建EC2、并通过Userdata指定Hostname

本文相关代码、POM文件在Github这里

本文介绍了如果通过Userdata在首次创建EC2时候自定义主机名Hostname。本文使用Java语言,通过AWSSDK的方式调用API发起操作。本文提供了代码和POM参考,在Amazon Linux 2的EC2上编译、测试通过。

Continue reading “使用AWS Java SDK V2创建EC2、并通过Userdata指定Hostname”

在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”

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即可。

ECS 201 Workshop(四)通过CodeDeploy实现蓝绿发布

ECS是AWS自行研发的容器管理平台,相对于流行的K8S架构,ECS更加简单易用,学习门槛相对很低。此外,Fargate无服务器技术的支持,将ECS完全从管理底层架构中解放出来,用户不需要再去关心Node节点的EC2配置,而是只在乎启动的任务,非常便于高效、快速的将既有容器投入使用。

ECS 201 Workshop分成:

共四个部分。此外,在ECS实验之前,还有一个基础篇是如何Build容器镜像,请参考

下面开始第四篇。演示视频如下:

Continue reading “ECS 201 Workshop(四)通过CodeDeploy实现蓝绿发布”

使用AWS CLI Profile时候遇到 报告”Key不存在” 的解决办法

1、故障现象

在AWS CLI下,执行aws s3 ls命令的时候,报告如下错误。

An error occurred (InvalidAccessKeyId) when calling the ListBuckets operation: The AWS Access Key Id you provided does not exist in our records.

经过测试,执行其他CLI命令也会遇到相同的错误。

Continue reading “使用AWS CLI Profile时候遇到 报告”Key不存在” 的解决办法”

使用Profile切换AWS CLI认证区域

由于AWS中国区和海外区的系统完全隔离,因此在日常使用过程中经常会遇到需要切换AWS CLI的Access Key的问题。例如当向国内的S3上传文件,需要运行 aws configure 配置一个国内的Access Key;当给海外传输文件的时候,需要一个海外AWS账户的Access key,如此切换非常不方便。这时候,可以通过设置Profile进行切换。

Continue reading “使用Profile切换AWS CLI认证区域”

使用AWS CLI创建RDS for MySQL数据库

本文描述了如何从AWS CLI命令行工具管理创建并管理RDS Aurora for MySQL数据库集群。

一、准备工作

1、配置CLI

首先在要操作API的Linux上或者本地Windows上,配置好API,且设置API的默认区域是要进行操作的区域。

2、确认创建RDS时候要调用的安全规则组

请进入VPC界面,安全规则组的管理界面中,提前创建好一个数据库专用的安全组,并记录下他的ID,如下图,其中sg-0246xxxxx开头的这一串就是安全规则组ID,后续会用到。

Continue reading “使用AWS CLI创建RDS for MySQL数据库”