创建apigateway
我创建的是Rest Api的网关
创建lambda函数
首先得创建一个lambda函数,代码我用的是golang 1.x。代码如下:
package main
import (
"context"
"errors"
"fmt"
"github.com/aws/aws-lambda-go/events"
"github.com/aws/aws-lambda-go/lambda"
)
var (
// ErrNameNotProvided is thrown when a name is not provided
HTTPMethodNotSupported = errors.New("no name was provided in the HTTP body")
)
func HandleRequest(ctx context.Context, request events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) {
fmt.Printf("Body size = %d. \n", len(request.Body))
fmt.Printf("Headers:%+v\n", request.Headers)
for key, value := range request.Headers {
fmt.Printf(" %s: %s\n", key, value)
}
if request.HTTPMethod == "GET" {
fmt.Printf("GET METHOD\n")
return events.APIGatewayProxyResponse{Body: "GET WERBEN", StatusCode: 200}, nil
} else if request.HTTPMethod == "POST" {
fmt.Printf("POST METHOD\n")
return events.APIGatewayProxyResponse{Body: "POST WERBEN", StatusCode: 200}, nil
} else {
fmt.Printf("NEITHER\n")
return events.APIGatewayProxyResponse{}, HTTPMethodNotSupported
}
}
func main() {
lambda.Start(HandleRequest)
}
同时创建一个apigateway,然后apigateway的添加到lambda的触发器。
这里要注意,golang的代码再lambda里面不想nodejs那样可以在线编辑的,要上传lambda的代码,上传的时候需要上传的golang编译后的可执行文件,需要在linux上编译好,然后将可执行文件打包成zip文件上传。然后要注意可执行文件的名称,默认是hello,可以在下面的位置修改。
将阿里云域名授权给AWS的DNS解析
在services里面找到Route 53,这个AWS对应阿里云的域名解析产品
点击左边的托管区域
点击右边的“创建托管区”,因为我是将二级域名交给aws托管,所以我这里填的域名地址是:aws.xxx.com,也就是在这个二级域名下的三级域名解析都托管给aws来解析了。点击创建托管区。
创建托管区后,点击域名,会看到有两条(NS和SOA)解析记录。
这里的NS记录需要同步到阿里云的域名解析哪里去。看下面这里,完成这里就完成将aws.xxx.com的解析托管给aws了,这样aws那边就可以给aws.xxx.com添加A、CNAME等记录了。
这里可能有生效时间的问题,我用一个简单的方法来测试,回到AWS Route 53 在aws那边添加一条werben.aws.xxx.com的A记录,然后在自己电脑上,ping werben.aws.xxx.com,如果ping到的ip是对的,那就说明托管成功了
自定义域名
在apigateway界面,左边导航下有个自定义域名的菜单,点击进入,输入自定义的域名名称,我这是一个三级子域名。假如是api.aws.xxx.com,
点击创建 ,点击创建新的ACM证书
点击请求证书,请求公有证书,下一步,
点击请求
这里有一个等待验证的状态
点开证书链接,点击“在 Route 53 中创建记录”
这时候在Route 53中会多一条CNAME记录
最后还需要在Route 53里添加一条A记录,api.aws.xxx.com A 其值在Api Gateway里面的 域名,如下图
最后可以通过自定义域名访问api gateway了