awslambda,aws lambda
AWS Lambda笔记-内容分发(CDN)-7
cloudformation.tempalte中AWS组件关联关系,完整配置笔记的最后部分。
CloudFront都是例行公事的配置,这里主要有HTTP的版本,原站信息,缓存方式,是否支持压缩,被允许的HttpMethod类型,具体Forward信息等,详细看以下配置及具体备注。
以上配置好,我们可以部署(./gradlew deploy), 可以登陆 CloudFront的控制台
,获取域名( d3se3kgs51ey11.cloudfront.net ),可以dig测试下,我们的域名是否已经全球解析。第一个是国内dig的结果,域名解析到日本IP。第二个代理到美国域名解析的是美国IP。可以看出域名已经成功解析到各个区域。我们访问: ,( d3se3kgs51ey11.cloudfront.net 替换成你自己在CloudFront中域名)会相对会快一点点。
CloudFront配置成功后,我需要手动配置自定义域名的NS记录和SSL证书的认证。这些也可以通过CloudFormation模版自动化,不过这些操作都是一次性的,所有就不增加CloudFormation内容的复杂度,同时该域名没有配置邮箱,也不方面在申请SSL证书时通过邮件认证。
进入AWS Route 53 管理页面 ,点击左侧菜单“托管区域”。
重点:这边我们需要保存下, 托管区域:Z09377931HZWDHZB7ST9N ,在后续配置中需要使用到。
点击域名,可以看到该域名的NS,SOA记录。
在自己的域名解析管理中增加NS记录
进入AWS Certificate Manger 页面 ,点击“请求证书” ,按照提示
步骤 1: 添加域名
步骤 2:选择验证方法 (选择DNS验证)
步骤 3: 添加标签 (可以不操作)
步骤 4:审核并请求
步骤 5:验证
按步骤操作完成,回到“证书管理”页面,查看申请证书的域名,点击“在Route 53中创建记录” 这时会自动创建一个NS记录,等待一会儿域名状态从“等待审核” 变成 “已颁发”。
Alias(别名)是Route53提供的强大功能之一,相比CName记录,别名记录可以直接指向AWS资源,例如ELB,CloudFront。别名在DNS中没有对应的概念,使用别名免费,而CName是付费服务。另外一个有点是Alias比CName少一步获取最终IP地址,减少解析的负担,继续发布工程(./gradlew deploy)发布成功后,我dig配置的域名可以发现解析的A记录多很多,到此自定义域名配置成功。但是使用http访问 ,将放回403信息,提醒:The request could not be satisfied. 接下来我们将继续SSL证书配置。
这里只需要在 AWS::CloudFront::Distribution 的 Properties 增加:
执行
发布成功后,我们访问API就变成:
现在这个API使用自定义域名且配置SSL,但是还没有权限控制,后续我们需要对该方法进行权限控制。
查看 CloudFormation
]的“事件”提示具体的错误信息:
AWS Lambda笔记--HelloWorld-3
InputModel.java
OutputModel.java
Handler.java
setting.build 文件:gradle指定子目录项目
build.gradle 文件
构建完成,检查 lambda-test/build/libs/lambda-test-1.0-all.jar 文件是否存在。
当在页面中调用函数 ]() 时,可能会出现 Task time out after xxx 时,需要在create-function 的时候加入参数 --timeout 10 或更大,默认3秒,最大900秒。
重复执行创建函数命令则会出现:An error occurred (ResourceConflictException) when calling the CreateFunction operation: Function already exist: book-test ; 这时候需去 上删除lambda 函数:book-test。
同时执行 tail -f /tmp/test.txt , 返回{"value":"HelloWorld"}
若结果显示timeout则创建lambda函数时需要调整 time 时间
一个完整的HelloWorld算完成了。
AWS Lambda本身的架构和内部实现是怎样的
AWS Lambda服务是基于容器实现的弹性计算集群,并且集成AWS已有的消息服务和计费服务。弹性计算集群是一个计算资源池,用户程序启动时根据服务器的负载起不同的容器,类似于AWS的EC2服务和OpenStack的Nova服务,不过调度的从虚拟机改为容器。由于容器的启动时间只有毫秒级,通过容器虚拟化带来的overhead比虚拟机小,这样才能实现AWS Lambda弹性调度与按秒计费的需求。
因为AWS Lambda只需要实现容器的创建、销毁和调度,数据存储使用外部的S3、RDS、DynamoDB等服务,所以基于LXC或Docker实现一个能够自动调度容器的CaaS服务即可,除了AWS自研的容器调度系统,开源社区还可以考虑Kuberntes、Mesos和docker-swarm。