인프런 커뮤니티 질문&답변

19님의 프로필 이미지

작성한 질문수

비전공자도 이해할 수 있는 CI/CD 입문·실전

[실습] 컨테이너 기반의 프로젝트에서 많이 쓰는 CI/CD 구축 방법

Github Actions로 ECR 에 이미지 push 후, EC2 에 ssh 로 접속해 pull 받을 때 발생하는 문제

24.10.03 11:12 작성

·

79

·

수정됨

0

======CMD======
sudo docker stop github-action-prod || true
sudo docker rm github-action-prod || true
sudo docker pull [ECR URL]/github-action-prod:latest
sudo docker run -d --name github-action-prod -p 8080:8080 [ECR URL]/github-action-prod:latest
======END======
err: Error response from daemon: No such container: github-action-prod
err: Error response from daemon: No such container: github-action-prod
err: Error response from daemon: Head "https://[ECR URL]/v2/github-action-prod/manifests/latest": no basic auth credentials
2024/10/03 02:07:08 Process exited with status 1

위와 같이 컨테이너를 찾을 수 없다 그러고 'no basic auth credentials' 이런 문구가 출력됩니다
로그인도 잘됐고, ECR에 push도 잘 됐는데 왜 이런 문제가 발생하는 걸까요ㅜㅜ

실행한 스크립트는 아래와 같습니다

    steps:
      - name: Github Repository 파일 불러오기
        # uses 키워드로 Github Actions의 라이브러리를 사용할 수 있다
        uses: actions/checkout@v4

      - name: JDK 17 설치
        uses: actions/setup-java@v4
        with:
          distribution: corretto
          java-version: 17

      - name: application.yml 파일 만들기
        run: echo "${{ secrets.APPLICATION_PROPERTIES }}" > ./src/main/resources/application.yml

      - name: 테스트 & 빌드
        run: ./gradlew clean build

      - name: AWS Resource에 접근할 수 있게 AWS credentials 설정
        uses: aws-actions/configure-aws-credentials@v4
        with:
          aws-region: ap-northeast-2
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}

      # ECR 에 업로드 하기 위한 과정
      - name: ECR에 로그인하기
        id: login-ecr
        uses: aws-actions/amazon-ecr-login@v2

      - name: Docker 이미지 생성
        run: docker build -t github-action-prod .

      - name: Docker 이미지에 Tag 붙이기
        run: docker tag github-action-prod ${{ steps.login-ecr.outputs.registry }}/github-action-prod:latest

      - name: ECR에 Docker 이미지 Push하기
        run: docker push ${{ steps.login-ecr.outputs.registry }}/github-action-prod:latest

      # ECR 에 업로드한 Docker Image 를 EC2 로 가져와 실행시키기
      - name: SSH로 EC2에 접속하기
        uses: appleboy/ssh-action@v1.0.3
        with:
          host: ${{ secrets.EC2_HOST }}
          username: ${{ secrets.EC2_USERNAME }}
          key: ${{ secrets.EC2_PRIVATE_KEY }}
          script_stop: true
          script: |
            sudo docker stop github-action-prod || true
            sudo docker rm github-action-prod || true
            sudo docker pull ${{ steps.login-ecr.outputs.registry }}/github-action-prod:latest
            sudo docker run -d --name github-action-prod -p 8080:8080 ${{ steps.login-ecr.outputs.registry }}/github-action-prod:latest

답변 2

0

JSCODE 박재성님의 프로필 이미지
JSCODE 박재성
지식공유자

2024. 10. 03. 21:11

안녕하세요 19님!

말씀해주신 에러를 수강생분들이 많이 만나곤 하는데요~!!

보여주신 에러가 발생하는 데에는 여러 원인이 있을 수 있습니다.

 

  1. IAM의 Role(AmazonEC2ContainerRegistryFullAccess 권한이 추가되어 있는 지 확인하기)을 생성해서 EC2에 셋팅을 했는 지 체크해보세요!

     

  2. ECR Credential Helper 설치하셨는 지 확인 한 번 해보시겠어요~?

     

  3. Github Actions 코드에서 셋팅한 IAM의 사용자에 권한이 잘 부여되어 있는 지 확인 해보시기 바랍니다!

 

위 3가지 체크해보시고 났는데도 해결이 안 되신다면 다시 한 번 질문 남겨주세요:D

19님의 프로필 이미지
19
질문자

2024. 10. 04. 09:09

넵 3가지 전부 되어있었는데요, 아래 AI 가 달아준 댓글대로 EC2에 직접 접근해 ECR 로그인을 해놓으니까 CI/CD가 동작됩니다
그렇다면 위 3가지중에 제대로 되지 않은 부분이 있었기 때문에, Github Actions 코드에서 문제가 되었던 걸까요?!

JSCODE 박재성님의 프로필 이미지
JSCODE 박재성
지식공유자

2024. 10. 04. 09:28

AI가 얘기해준 aws ecr 로그인 방식은 세션 방식으로 인증이 진행되다보니
시간이 지나면 로그인을 매번 다시 해주어야 한다는 불편함이 있을거에요!

 

이걸 해결하기 위해서 셋팅하는 게 ECR Credential Helper 입니다!

아래 두 과정 전부 셋팅 잘 하신 상태이시죠~??

image.png

 

19님의 프로필 이미지
19
질문자

2024. 10. 04. 17:42

넵넵 맞습니다
두 과정 모두 수행했고, 다만 처음에 'credsStore'를 'credStore'로 설정하고 진행했다가 오타를 발견하고 'credsStore'로 수정했는데도 동작하지 않았습니다

이 부분이 영향을 줬으려나요..?

JSCODE 박재성님의 프로필 이미지
JSCODE 박재성
지식공유자

2024. 10. 04. 23:56

아마 그 부분은 영향을 안 주지 않았을까 싶어요...!!

혹시 해당 부분의 CI/CD 강의만 다시 처음부터 환경 설정하신 뒤에

따라해보신 뒤에 놓친 부분이 없는 지 확인 한 번 부탁드려도 될까요~??

그렇게 분명 놓친 것 없이 똑같이 따라했는데도 불구하고 작동하지 않는다면

아래 카톡으로 연락 한 번 남겨주세요~~

https://open.kakao.com/o/sHdY8yrg

같이 시간 맞춰서 줌으로 디버깅 도와드릴게요:)

0

인프런 AI 인턴님의 프로필 이미지

2024. 10. 03. 11:16

안녕하세요, 인프런 AI 인턴입니다. 19님.

질문해주신 내용과 관련하여 유사한 문제를 다룬 기존 답변을 찾았습니다. “no basic auth credentials” 에러 메시지는 Docker가 Amazon ECR(Elastic Container Registry)에서 이미지를 가져오는 과정에서 발생하는 인증 문제를 나타내며, 보통 IAM 사용자 설정이나 Docker 로그인에서의 문제로 인해 발생할 수 있습니다.

문제 요약

GitHub Actions에서 Amazon ECR에 이미지를 푸시한 후, EC2 인스턴스에 SSH로 접속하여 이미지를 풀이할 때 인증 관련 오류가 발생합니다. 이는 Docker 클라이언트가 ECR에 접근할 권한이 없어서 발생하는 문제입니다.

해결 방안

  1. AWS CLI로 ECR 로그인 검증: EC2 인스턴스 내에서 aws ecr get-login-password 명령어를 사용하여 ECR에 로그인하는 과정을 검증해 보세요. 아래는 예시입니다.

    aws ecr get-login-password --region ap-northeast-2 | sudo docker login --username AWS --password-stdin 593793060220.dkr.ecr.ap-northeast-2.amazonaws.com
    
  2. IAM 역할 확인: EC2 인스턴스에 연결된 IAM 역할이 AmazonEC2ContainerRegistryReadOnly 또는 AmazonEC2ContainerRegistryFullAccess 권한을 가지고 있는지 확인하세요.

  3. Docker config 설정: EC2 인스턴스의 Docker 설정(~/.docker/config.json)을 확인하여, 올바른 인증 정보가 포함되어 있는지 확인합니다.

  4. GitHub Secrets 설정 확인: AWS_ACCESS_KEY_ID 및 AWS_SECRET_ACCESS_KEY가 올바른지 확인하세요. 여기에는 적절한 권한이 부여된 IAM 사용자의 키가 있어야 합니다.

기존 답변 링크

위의 조치를 통해 문제를 해결할 수 있다면 좋겠습니다. 문제 해결에 도움이 되는 다른 질문이나 방법을 함께 검토해보시길 권장드립니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

19님의 프로필 이미지

작성한 질문수

질문하기