• 【学无止境】浅谈AWS: IAM+S3+Lex+Lambda


    在一个side project中用到了AWS的一些Services。AWS提供了很多的服务,比如

    • Compute
      • EC2
    • Storage
      • S3
    • Database
      • RDS
    • Networking & Content Dilivery
      • Route 53
    • Developer Tools
      • Cloud 9
    • Machine Learning
      • Amazon Lex
    • Security, Identity, & Compliance
      • IAM

    一开始接触有点头大,看到一个个新名词,有点不知所措。而且文档内容非常详细,感觉是写给技术人员而不是用户看的。静下心来学习了一段时间后,算是摸到了一点门道。下面就挑几个重点的讲下是怎么使用的。

    1. IAM

    Identity and Access Management

    权限控制

    一开始注册并登陆AWS之后,我们是作为root user进去的,权限非常大,比如可以管理账单,加减服务器等等。但是我们的应用调用AWS的服务时,肯定不能用root user的账号,否则会有安全隐患。这时,就需要在IAM里面创建其他的User,并给与相应的权限。

    IAM构建权限控制的层次关系如下:Group里面可以多个Users,一个User可以又多个Roles,一个Role可以有多个Policies。最细化的粒度是在Policy上,可以在Permissions policies中查看自己有哪些权限。

    Group
    	User
    		Role
    			Policy
    

    同时,为了方便管理,IAM还有一个Permissions boundary,to control the maximum permissions this user can have。一般可以不设。

    Access Key

    在调用AWS服务时,需要一个access key,这样AWS才知道这个HTTP request是哪个用户发来的,有没有权限调用对应的服务。生成路径如下:

    Users -> Summary -> Security credentials -> Access keys -> Create access key

    生成的access key格式如下:

    Access key ID:ABCDEFG
    Secret access key:ID:ABCDEFG
    

    MFA device

    如果想要给账号加一层防护,可以添加MFA device,即手机上装一个软件(比如Google Autenticator),之后每次登陆都需要额外输入一次手机令牌。

    Users -> Summary -> Security credentials -> Assigned MFA device

    2. S3

    S3 buckets,即文件服务器。一般用来存放一些静态文件。比如图片,视频,或者需要import的css,js脚本等等。

    Web上面的操作比较简单,创建一个bucket,然后往里面放东西即可。唯一需要注意的是它需要设置访问权限(Access),区域(Region)等属性。

    当然,除了在Web上直接操作,它也支持在程序中调用S3 API,完成上传或管理等操作。

    3. Lex

    Amazon Lex,可以完成一些NLP,语义识别与处理。一开始需要注意的是,不是每个Region都提供这项服务,为此,我选择了美东(N. Virginia)的服务器。

    初步使用下来的感受是,Lex是一个简单的以解决问题为导向的系统。我们可以和机器人对话,来订花,客服等等,但可能闲聊就比较难了。这是由它的设计决定的。

    Lex的核心有几个组成部分:

    • Bot:和我们对话的机器人,比如一个订机票的bot
    • Intent:机器人试图理解到我们的意图,比如订机票,查航班,订酒店。
    • Utterances:我们可以定义一些“话语”,和Intent相关联。比如“我要订机票”,“我想订一张机票”等等。
    • Slot type:试图拿到一些与意图有关的参数,比如订机票的话,需要什么时间,什么航班。

    分析订机票这个事件,对话可能如下

    A:我要订机票。
    Bot:你想要订哪个航班?
    A:BK8767。
    Bot:你想要订什么时间的?
    A:2019年11月1号。
    Bot:好的,给你定好了,订单号为12345。
    

    经过一系列的对话,机器人拿到了所有的Slot,即可以去做最终的Fulfillment,导向下单支付页面等等。当然,实际的对话肯定要比这个复杂,比如,顾客可能会问:11月1号从北京飞巴黎的航班有哪些,按价格高低排列。如此反复多次才会完成下单。这就需要额外的代码来支持这些功能。

    Lex支持扩展代码功能,它既支持在utterances处理的最初阶段调用Lambda,也支持在Fulfillment阶段再调用Lambda。

    • Lambda initialization and validation:拿到utterances之后做一些处理,比如validation,但同时它也可以做更多的事,甚至包括确定Slot的内容等等。
    • Fulfillment:拿到Intent和Slot之后,怎么去做进一步处理。

    当然,Lex也支持外部调用集成,比如自己写一个Presentation Layer,后台调用Lex做NLP,然后返回数据到前台进行展示。

    个人认为,Lex是一个简单的半集成的NLP Bot,可以用低成本,快速定制一个由业务需求驱动的机器人,但其中不涉及复杂/高阶的NLP处理。

    和S3甚至几乎所有的AWS服务一样,Lex的所有操作都可以通过Web Service完成。

    4. Lambda

    在上面我们说到了Lex支持调用Lambda,那么什么是Lambda呢?

    个人理解就是,比如一个Function,AWS会管理它的运行环境或生命周期,你只需要调用就好了。如下:

    def order_flowers_info(intent_request):
    	return something
    

    用户的需求很简单,调用order_flowers方法,然后得到something,我最终的关注点在于something对不对,其它并不那么重要。所以,可以在Lambda中实现这个方法,并完成调用。

    我觉得,Lambda更多的是面向其他的AWS服务。比如当你使用了AWS其他一些机器学习框架时,想要做一些hack或者写一些自己的逻辑,就可以用自集成的Lambda,非常方便。如果我自己有一个应用,那么我本地就直接写一个Function去调用,不需要集成Lambda。

  • 相关阅读:
    [leetcode] Maximum Depth of Binary Tree
    [leetcode] Binary Tree Zigzag Level Order Traversal
    [leetcode] Binary Tree Level Order Traversal
    软工第二次极限测试
    动手动脑的问题以及课后实验性的问题3
    计算几何--半平面交与平面区域
    拉格朗日插值法
    计算几何--最小圆覆盖与最小球覆盖
    计算几何--圆与球
    程序员修炼之道读后感1
  • 原文地址:https://www.cnblogs.com/maxstack/p/11499440.html
Copyright © 2020-2023  润新知