Serverless Framework를 사용하여 go를 정기적으로 실행

7950 단어 5ServerlessFramework
공부가 촉촉했을 때의 메모입니다.

sls 설치


npm install serverless -g

go 템플릿 만들기


sls create -u https://github.com/serverless/serverless-golang/ -p go-hatena

go modules 초기화


go mod init go-hatena

필요한 패키지 설치


go get github.com/aws/aws-lambda-go/lambda

serverless.yml 편집



아래와 같은 느낌으로 .aws/credentials를 일용, 프라이빗용으로 나누고 있다.
$ vim ~/.aws/credentials
[default]
aws_access_key_id = hoge
aws_secret_access_key = huga
cloudfront=true
[private]
aws_access_key_id = hogehoge
aws_secret_access_key = hugahuga

이번, lambda의 배포는 private용으로 실시하고 싶다.
그래서 serverless.yml에 그 설정을 써 간다.
service: go-hatena

provider:
  name: aws
  runtime: go1.x
  stage: ${opt:stage, self:custom.defaultStage}
  #profileオプション追加
  profile: ${opt:profile, self:custom.defaultProfile}
  #regionオプション追加
  region: ${opt:region, self:custom.defaultRegion}

custom:
  defaultStage: dev
  #何も指定がなければ private profile
  defaultProfile: private
  #何も指定がなければ 東京リージョン
  defaultRegion: ap-northeast-1

package:
 exclude:
   - ./**
 include:
   - ./bin/**

functions:
  hello:
    handler: bin/main

또한 aws 계정을 지정하여 배포하는 또 다른 방법으로 --aws-profile 옵션을 사용하는 방법도 있습니다. 참고
serverless deploy --aws-profile private

Makefile 만들기



Makefile이라는 파일을 만들고 빌드 및 배포 명령을 설명합니다.
build:
    GOOS=linux go build -o bin/main

deploy:
    sls deploy

빌드, 배포


make build
make deploy

이제 aws의 lambda를 보러 가면 함수가 배포되고 있다.



실행



Makefile에 다음을 추가하고,
run:
    sls invoke -f hello

실행. 응답이 돌아온다.
$ make run
sls invoke -f hello
{
    "message": "Go Serverless v1.0! Your function executed successfully!"
}
$ 

만든 함수를 정기적으로 실행



serverless.yml에 schedule을 추가
functions:
  hello:
    handler: bin/main
    events:
      - schedule: cron(0/1 * * * ? *)

정기적으로 실행되고 있는 것은 cloudWatchLogs에서 확인할 수 있다. 알기 쉽게 하기 위해서 「hello!!」라고 로그 표시하도록 한다.

main.go
func Handler() (Response, error) {
    fmt.Println("hello!!") // 追記
    return Response{
        Message: "Go Serverless v1.0! Your function executed successfully!",
    }, nil
}

빌드하고 배포
make build
make deploy

정기적으로 실행 중인지 확인



hello!! 라고 정기적으로 표시되고 있다.



cloudWatchLogs 보존 기간 설정



기본적으로 sls에서는 CloudWatch Logs의 보존 기간은 무기한 같다.
개인 계정의 경우, 과금되어도 싫기 때문에 보존 기간을 설정한다.

serverless.yml 수정
provider:
  logRetentionInDays: 1 #追加

또, 이 logRetentionInDays에 지정할 수 있는 일수는 정해져 있다
[1, 3, 5, 7, 14, 30, 60, 90, 120, 150, 180, 365, 400, 545, 731, 1827, 3653]

상기 이외의 일수를 지정하면 배포로 화난다.
Invalid retention value. Valid values are: [1, 3, 5, 7, 14, 30, 60, 90, 120, 150, 180, 365, 400, 545, 731, 1827, 3653] (Service: AWSLogs; Status Code: 400; Error Code: InvalidParameterException; Request ID: 8aca73dc-43a1-11e9-a81a-6bf91d5376af).

lambda 버전 관리하지 않음



기본적으로 sls는 배포 된 모든 버전의 lambda를 저장하는 것 같습니다.
이번 놀이로 만지고 있을 뿐이므로, 버전 관리를 하지 않도록 설정.
provider:
  versionFunctions: false #追加

정기 실행 중지



lambda 관리 콘솔에서 CloudWatchEvents를 활성화/비활성화할 수 있습니다.
무효로 해, 보존하면 정기 실행은 멈춘다



참고



htps : // 이 m/이무라 81gt/이고 ms/5cf490468f95세 3d100b
htps : // 치카 씨. 하테나 bぉg. 코m/엔트리/2018/06/27/083316
htps : // v.ぁsss d. jp / e tc / se r ゔ r r ぇ s-f 라메를 rk ぁ mb이다-c 론-에 ぇ 쿠 /
htps // ch. 가 - ch. 이. jp/엔트리/2018/12/12/120000

좋은 웹페이지 즐겨찾기