0 写在前面的话
公司最近转型serverless要把一些内部CMS和部分外部网站放到AWS上,先简单的实现个S3(vue)+API Gateway+lambda的无服务建站的小例子,
感觉一般的网站真心没必要再自己弄EC2了,尤其初创公司,开始公司用户少,这套方案按访问量收费不香吗?lambda每月还有几万的免费访问量,真的很省钱,
还有各种高可用,动态扩容,安全性,都不用考虑了,找个码农直接开干,业务流程跑通了再说。闲话不说下面开干
1.1 S3(Vue)设置
1.1 创建并设置S3存储桶
#1 创建S3存储桶并开启静态网站托管功能 #2 设置索引文档名称为index.html

1.2 创建简单Vue页面

<!--APP.vue-->
<template>
<div id="app">
<img src="./assets/logo.png">
<h3><router-link to="/changeComponent">test vue router</router-link></h3>
<router-view/>
</div>
</template>
<script>
export default {
name: 'App'
}
</script>
<style>
#app {
font-family: 'Avenir', Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-align: center;
color: #2c3e50;
margin-top: 60px;
}
</style>
<!--ChangeComponent-->
<template>
<div>
<h1>test get string form lambda</h1>
<button @click='getLamda'>lambda</button>
<h2>{{msg}}</h2>
</div>
</template>
<script>
import axios from 'axios'
export default {
name: 'ChangeComponent',
data () {
return {
msg: 'click the button you will get lambda return'
}
},
methods: {
getLamda(){
axios.get('https://哈哈这个要先建好APIGateWay才会有哦/default/demo4lambda').then(
response => {
console.log(response.data)
this.msg=response.data
},
error => {
console.log('error')
}
)
}
}
}
</script>
<!--HelloWorld-->
<template>
<div class="hello">
<h1>{{ msg }}</h1>
<h2>Essential Links</h2>
</div>
</template>
<script>
export default {
name: 'HelloWorld',
data () {
return {
msg: 'Welcome to Your Vue.js App'
}
},
}
</script>
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
h1, h2 {
font-weight: normal;
}
ul {
list-style-type: none;
padding: 0;
}
li {
display: inline-block;
margin: 0 10px;
}
a {
color: #42b983;
}
</style>
<!--index.js-->
import Vue from 'vue'
import Router from 'vue-router'
import HelloWorld from '@/components/HelloWorld'
import ChangeComponent from '@/components/ChangeComponent'
Vue.use(Router)
export default new Router({
routes: [
{
path: '/',
name: 'HelloWorld',
component: HelloWorld
},
{
path: '/changeComponent',
name: 'ChangeComponent',
component: ChangeComponent
}
]
})
1.3 上传Vue页面至S3

1.4 允许S3共有访问

1.5 设置S3页面访问白名单
{
"Version": "2012-10-17",
"Id": "Policy1618sfdsa313fd336",
"Statement": [
{
"Sid": "Stmt16ssss1112
"Principal": "*",
"Action": "s3:*",
"Resource": "arn:aws-cn:s3:::demo4lambda/*",
"Condition": {
"NotIpAddress": {
"aws:SourceIp": "123.456.789.10/32"
},
"Bool": {
"aws:SecureTransport": "false"
}
}
}
]
}1.2 创建API GateWay
# 1 创建 REST API
# 2 集成类型选择lambda函数
# 3 设置content-type,header添加跨站允许


1.3 创建lambda
1.3.1 创建lambda
# 运行时选择Node.js

1.3.2 编写lambda并部署

1.4测试
访问网站可以实现页面跳转和调用lambda返回数据
1.5 后续
1.5.1 域名问题
现在用的域名使是s3的域名,后续需要使用cloudfront来设置域名,然后再讲lambda也绑定自己的域名就可以取消APIgateway里面关于跨站的设置了
1.5.2 DB问题
lambda需要访问DB,后面还需要加上DB的设置,这样就需要lambda加入到VPC网络里
1.5.3 安全问题
安全问题使用AWF和SecurityGroup实现防火墙配置
最后 评论超过100,博主继续更新这个帖子
版权声明:本文为baidu_31405631原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。