ECR

Hoju·2022년 8월 25일
0
post-custom-banner

사용자는 ECS에서 필요로하는 Docker Image를 가져올 저장소가 필요합니다. 그렇기 때문에 사용자는 ECR 리포지토리를 생성합니다. Docker image는 최대 5개가 저장될 수 있으며, 그 후에 생성되면 그전에 생성된 Image가 삭제되어야합니다. 즉, Docker image는 리포지토리에 5개만 있도록 구성하도록 사용자는 설정을 해야합니다. 그리고 아래 코드를 사용해서 Image를 생성합니다.

ECR Repo Create

  1. ECR에 Private Repositories를 생성합니다.
  2. 생성확인
  3. 이제 ECR Repositories에 대한 수명 주기 정책 규칙을 생성하도록 하겠습니다.
  4. 우측에 규칙 생성을 선택합니다. 그런 다음 규칙 우선 순위와 규칙 설명을 선택합니다.
  5. 이미지 상태는 모두 선택하도록 합니다. 즉, 개수에만 Focus를 맞추는 거기 떄문입니다.
  6. 매치 범위에서 “개수 이상 이미지”를 선택 후 개수는 “5”를 입력합니다.
  7. 저장을 하도록 합니다. 요약을 확인합니다. expire → 만기

ECR Repo로 Docker Image Push

  1. httpserver.go
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
}
  1. Dockerfile
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
  1. Image ECR repo로 Push
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
  1. Image 확인(이미지를 사용해서 ECS 작업 정의를 생성합니다.)
profile
Devops가 되고 싶은 청소년
post-custom-banner

0개의 댓글