Oredemo understand series -Build and deploy Serverless Framework Golang with Docker container
5497 단어 도커나도 아는 시리즈serverlessAWS
PC에 시코시코 도구를 정돈하는 인생이 힘들어졌습니다.
PC에 부딪히는 것은 Docker와 에디터만으로 좋지 않을까.
빌드와 배포라는 역할은 Docker 컨테이너에 맡겨 버리면 좋지 않을까 하는 것으로,
이번에 처음으로 Serverless Framework를 이용한 Slack app를 Deploy한 경험을,
1억년과 2천년 전부터 몇번 눈에 띄는 재료입니다만 메모를 남겨 두려고 생각합니다.
계기
@T_스미사키에 slack에서 EC2를 멈추거나 긁는다 슬랙 앱 만들고,
막상 자신의 AWS 계정에 빌드 + 배포할까 생각했는데 오라의 macOS에 Golang과 Serverless가 들어 있지 않았다.
앞으로 설정이라든지 흥분됩니다!
오 멘도쿠사.
빌드 및 배포를 컨테이너에 맡기는 구성
PC에 Docker가 들어 있었기 때문에 이렇게 했습니다.
PC에 Docker가 들어 있었기 때문에 이렇게 했습니다.
로컬 PC와 컨테이너 데이터 공유
로컬 PC에 git clone 한 repository 디렉토리는 Docker Volume에서 공유합니다.
Docker 컨테이너에서 빌드 실행/Serverless 애플리케이션을 배포할 수 있습니다.
Docker 컨테이너를 사용한 Golang 빌드
-v
에서 로컬 PC의 소스 코드 디렉토리를 Docker 컨테이너의 /go/src/app
와 공유 --rm
에서 Docker 컨테이너를 실행 한 후 이미지 삭제 cd <repository>
docker run --rm -v "$PWD":/go/src/app -w /go/src/app awscli-command:latest make dep-ensure
Docker 컨테이너를 사용하여 Serverless 애플리케이션 배포
Dockerhub에 게시된 serverless 컨테이너 사용
~/.aws/credentials
를 -v
에서 공유 -v
에서 공유 ~/.aws/credentials
항목에 배포 대상 AWS 계정을 지정하도록 AWS_PROFILE
및 AWS_DEFAULT_REGION
를 -e
옵션으로 지정 -rm
에서 Docker 컨테이너를 실행 한 후 이미지 삭제 ※로컬 PC 또한
docker save
로 컨테이너를 export 하는 것은 아니지만 ~/.aws/credentials
를 공유하는 것이 이 방법은 saml2aws
를 serverless 컨테이너에 넣어 임시적인 토큰을 건네버리면 좋다고 생각합니다.cd <repository>
docker run --rm -v ${HOME}/.aws/credentials:/root/.aws/credentials -v ${PWD}:/go/src/app \
-e AWS_PROFILE=${aws_profile} -e AWS_DEFAULT_REGION=${region} \
-w /go/src/app \
softinstigate/serverless sls deploy
Docker로 wrapping 한 인수 긴 문제를 어떻게 할까
Docker 컨테이너에서 Golang 빌드와 Serverless Framework 배포를 구현할 수 있습니다.
인수가 길고 건초염이 되는 문제가 남아 있습니다.
이 여러 번 반복되는 내용은 Makefile에서 해결됩니다.
인수 길고 매운 문제는 예를 들어
Golang 용 컨테이너 빌드 또는 ...
docker build -f Dockerfile . -t awscli-command:latest
dep의 종속성 해결이거나 ..
docker run --rm -v "$PWD":/go/src/app -w /go/src/app awscli-command:latest make dep-ensure
Golang의 빌드이거나 ...
docker run --rm -v "$PWD":/go/src/app -w /go/src/app awscli-command:latest make build-golang
Serverless deploy이거나 ...
docker run --rm -v ${HOME}/.aws/credentials:/root/.aws/credentials -v ${PWD}:/go/src/app \
-e AWS_PROFILE=${aws_profile} -e AWS_DEFAULT_REGION=${region} \
-w /go/src/app \
softinstigate/serverless sls deploy
자주 사용하는 명령은 shell history가 아닌 Makefile에 보관합니다.
docker build -f Dockerfile . -t awscli-command:latest
docker run --rm -v "$PWD":/go/src/app -w /go/src/app awscli-command:latest make dep-ensure
docker run --rm -v "$PWD":/go/src/app -w /go/src/app awscli-command:latest make build-golang
docker run --rm -v ${HOME}/.aws/credentials:/root/.aws/credentials -v ${PWD}:/go/src/app \
-e AWS_PROFILE=${aws_profile} -e AWS_DEFAULT_REGION=${region} \
-w /go/src/app \
softinstigate/serverless sls deploy
aws_profile = default
region = us-east-1
build-docker-golang:
docker build -f Dockerfile . -t awscli-command:latest
dep-ensure:
dep ensure
build-golang:
go get github.com/aws/aws-lambda-go/lambda
env GOOS=linux go build -ldflags="-s -w" -o bin/igniter handler/igniter/main.go
env GOOS=linux go build -ldflags="-s -w" -o bin/interaction handler/interaction/main.go
run-dep-ensure:
docker run --rm -v "$PWD":/go/src/app -w /go/src/app awscli-command:latest make dep-ensure
run-build:
ifeq ($(OS),Windows_NT)
# for Windows(ToDo: get folder path)
docker run --rm -v "$PWD":/go/src/app -w /go/src/app awscli-command:latest make build-golang
else
docker run --rm -v "$PWD":/go/src/app -w /go/src/app awscli-command:latest make build-golang
endif
sls-deploy:
docker run --rm -v ${HOME}/.aws:/root/.aws -v ${PWD}:/go/src/app \
-e AWS_PROFILE=${aws_profile} -e AWS_DEFAULT_REGION=${region} \
-w /go/src/app \
softinstigate/serverless sls deploy
$ make build-docker-golang
$ make run-dep-ensure
$ make run-build
$ make sls-deploy aws_profile=MYAWSPROFILE region=ap-northeast-1
이제 Docker와 에디터가 들어 있는 PC라면 Serverless Lambda Golang인 환경의 빌드와 배포를 실현할 수 있게 되었습니다.
지금 더 편리하지만 네 컨테이너.
라는 것으로 awscli slack app의 UI 괴롭힌다.
finish
Reference
이 문제에 관하여(Oredemo understand series -Build and deploy Serverless Framework Golang with Docker container), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/gamisan9999/items/0c10465b83636c4051bb텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)