CloudFront服务发布二

接上篇,给合作方建好后,以为没事了,谁知过了2天,运营的人跑过来说也需要这个bucket的访问权限,只需要其中一个目录的上传删除权限即可,而且研发方已经建好了目录,好吧,作为一个优秀的运维人员,咱们是来者不拒呀,开工,建IAM用户,细节不废话了,这里我们主要讲如何设置用户的policy,建好用户后进入用户权限设置页,直接设置inline policy,json如下:

这样就设置好了,因为运营基本都是技术小白,所以还得提供个操作S3的工具,研发那边指定要选择S3 Browser,不知为何,其实CloudBerryLab我也测试[……]

继续阅读

CloudFront服务发布

最近公司要在海外上新业务,采用了亚马逊的CloudFront服务,源站采用的是S3服务,这也是亚马逊推荐的成熟架构,因为这次是合作,所以源站的数据主要是由对方上传,所以需要建一个bucket,给对方设置好上传下载的权限即可,基本需求就是这样,我们看来如何完成:

首先第一步先建立bukcet, 例如名称可以叫www.mindg.cn,具体建立过程就不说了,不管用web console还是用API都很简单,我们来进入下一步,因为是要对方访问,所以需要建立一个IAM用户,建立过程也不多说了,需要注意的是不用给用户设置密码,用户生成的key字符串一定要下载下来,因为亚马逊建用户时那个key页面只[……]

继续阅读

子类初始化父类的二种方法

类是面向对象编程中重要的概念,在大型项目中合理采用设计好的类,可以使系统逻辑更为清晰和健壮,在开发前期一般我们会设计一个或多个父类,设定好子类和父类的关系,其中很重要的就是父类初始化,所以今天我们来看看在子类中如何初始化父类和调用父类方法,只有了解了这些,你再看一些开源代码时才有头绪,否则双眼一抹黑,都不知道从哪里看起,所以对一些大型项目,理清他们类之间的关至关重要,其他不多说了,我们看具体实现方法:

第一种是在子类中显示的指定父类,调用父类的__init__()来初始化,我们看例子,现在我们有父类P,子类M,代码如下:

[……]

继续阅读

jquery插件datatables使用

如何把数据库中的数据以表格的形式展示到前端,实现有很多方法,最近用jquery的datatables插件来实现了发现还是比较简单的,今天我们来看一个例子,来说明这个插件的使用,基本原理是view函数从数据库中读出数据,jquery通过ajax获取数据并在前端展示出来,我们先定义一个models.py,如下:

然后定义我们的view函数:

因为datatables接收的是json格式数据,所以从数据库中读出的数据要序列化,就是这句:

json = se[……]

继续阅读

centos安装fabric遇到的问题

这是之前碰到的问题了,今天有空写出来,在centos 上用命令:

安装是会出现如下报错,因为太多,我就不全部贴了,部分内容如下:

src/MD2.c:31:20: 错误:Python.h:没有那个文件或目录
src/MD2.c:131: 错误:expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token
In file included from src/MD2.c:147:
src/hash_template.c:48: 错误:expecte[……]

继续阅读

Celery入门demo

Celery 中文是”芹菜”, 同时也是一个分布式任务队列.

什么是分布式任务队列呢?

任务队列是一种在线程或机器间分发任务的机制。

消息队列的输入是工作的一个单元,称为任务,独立的职程(Worker)进程持续监视队列中是否有需要处理的新任务。

Celery 用消息通信,通常使用中间人(Broker)在客户端和职程间斡旋。这个过程从客户端向队列添加消息开始,之后中间人把消息派送给职程。

Celery 系统可包含多个职程和中间人,以此获得高可用性和横向扩展能力。

以上引自官方网站译文。

如果不理解,没关系,今天我们全部跳过理论基础,直接采用案例去理解Celery[……]

继续阅读

pycharm安装mysql-python

最近用pycharm 自带的功能安装mysql-python,一直无法成功,看详细报错如下:

error: Microsoft Visual C++ 9.0 is required (Unable to find vcvarsall.bat). Get it from http://aka.ms/vcpython27

上网找了一圈说是需要安装vs2008什么的,就下在了下安装,然后再安装,还是不成功,不过报错变成下面的提示了:

_mysql.c(42) : fatal error C1083: Cannot open include file: ‘config-win.h’:[……]

继续阅读

socket批量解析域名

最近工作需要,要对一些域名进行操作,需求是这样的,用从N个域名解析中找出某N个IP地址,最终的目的是要删除这些IP,所以第一步就是看那些域名解析到了这些ip上,因为涉及的域名数量很多,每个都dig一遍人肉去查看非常费时间,所以本着咱们运维自动化的精神,那个写脚本是必须的了,一劳永逸工作是非常值得做的,我们先来看脚本内容:

脚本逐行解释,脚本还是用到了上次我们提到的socket模块,然后定义了三个函数,readFile()函数是读取文件,然后返回一个存有域名的列表,returnIP()这个函数是做实际解析工作的,函数返回一个i[……]

继续阅读

socket扫描端口

socket是网络编程中必要的模块,在我们日常运维中,我们也可以来实现我们一些功能,比如写一个不复杂的基于client/server架构的数据收集程序等,但今天我们不是讲如何网络编程,因为网络编程的概念太过庞大,这不是我们一篇文章能讲清楚的,希望往这方面发展的朋友我可以推荐你先把TCP/IP卷看看,建议至少要看3遍(这是我当时的的次数,如果有时间建议多看几遍),然后可以看下unix网络编程,好了,说远了,现在我们回到正题,看看如何用socket模块来扫描机器开放的端口,按惯例,先上代码:

脚本解释,前几行导入必要的模块,这些[……]

继续阅读

使用logging模块记录脚本日志

在日常我们写脚本调试时,对一般功能不复杂的脚本,我们一般用print函数来打印关键变量值,来判断程序是否是正常运行,但如果做教大的项目,用这种方法就显得力不从心,所以这时候我们就要用到功能强大的logging 模块了,再讲例子之前,我们先介绍下logging模块日志级别,以下表列出了logging定义的级别划分:

logging

对于某个级别的日志,只有日志记录器配置可以发布该级别的消息时,才会发布这个消息,例如:如果一个消息级别是CRITICAL,而日子记录器记录的是ERROR,这个消息会发出,因为50>40,反之如果是WARNING,就不会记录日志,因为30<40,说完日志级别,[……]

继续阅读