사용자는 ECS에서 필요로하는 Docker Image를 가져올 저장소가 필요합니다. 그렇기 때문에 사용자는 ECR 리포지토리를 생성합니다. Docker image는 최대 5개가 저장될 수 있으며, 그 후에 생성되면 그전에 생성된 Image가 삭제되어야합니다. 즉, Docker image는 리포지토리에 5개만 있도록 구성하도록 사용자는 설정을 해야합니다. 그리고 아래 코드를 사용해서 Image를 생성합니다.
package main
import (
"fmt"
"log"
"net"
"net/http"
)
func main() {
log.Print("HTTPserver: Enter main()")
http.HandleFunc("/health", handler)
log.Fatal(http.ListenAndServe("0.0.0.0:8080", nil))
}
// printing request headers/params
func handler(w http.ResponseWriter, r *http.Request) {
log.Print("request from address: %q\n", r.RemoteAddr)
fmt.Fprintf(w, "%s %s %s\n", r.Method, r.URL, r.Proto)
fmt.Fprintf(w, "Host = %q\n", r.Host)
fmt.Fprintf(w, "RemoteAddr = %q\n", r.RemoteAddr)
if err := r.ParseForm(); err != nil {
log.Print(err)
}
for k, v := range r.Form {
fmt.Fprintf(w, "Form[%q] = %q\n", k, v)
}
fmt.Fprintf(w, "\n===> local IP: %q\n\n", GetOutboundIP())
}
func GetOutboundIP() net.IP {
conn, err := net.Dial("udp", "8.8.8.8:80")
if err != nil {
log.Fatal(err)
}
defer conn.Close()
localAddr := conn.LocalAddr().(*net.UDPAddr)
return localAddr.IP
}
cat << EOF > Dockerfile
FROM golang:alpine AS builder
ENV GO111MODULE=on \
CGO_ENABLED=0 \
GOOS=linux \
GOARCH=amd64
WORKDIR /build
COPY ./HTTPserver.go .
# Build the application
RUN go build -o HTTPserver ./HTTPserver.go
WORKDIR /dist
RUN cp /build/HTTPserver .
# Build a small image
FROM scratch
COPY --from=builder /dist/HTTPserver /
EXPOSE 8080
ENTRYPOINT ["/HTTPserver"]
EOF
aws ecr get-login-password --region ap-northeast-2 | docker login --username AWS --password-stdin $AccountID.dkr.ecr.ap-northeast-2.amazonaws.com
docker build -t wsi-fargate-ecr-repo .
docker tag wsi-fargate-ecr-repo:latest $AccountID.dkr.ecr.ap-northeast-2.amazonaws.com/wsi-fargate-ecr-repo:latest
docker push $AccountID.dkr.ecr.ap-northeast-2.amazonaws.com/wsi-fargate-ecr-repo:latest