aws cli가 다운받아져 있고 현재 상황에서 aws configure해서 로그인이 되어 있다면
aws configure list하면 목록이 나온다.
그렇기 때문에 springBoot에서 S3 실행하면 따로 api키를 입력하지 않아도 실행이 된다.
이때, AWS 인증 정보를 찾는 우선순위는 아래와 같다.
도커 빌드 과정에서 테스트가 실패 원인) 해당 환경에서는 aws 인증정보가 없어서
dockerfile > RUN gradle build --no-daemon -x test
: -x test 옵션을 추가하면 Gradle 빌드 시 테스트를 실행하지 않음.
application-test.yml에서 S3 자동 설정 제외
: src/main/resources/application-test.yml에 아래 내용 추가해 테스트 환경에서 S3 서버 찾는 시도를 하지 않도록 막음
spring:
autoconfigure:
exclude: io.awspring.cloud.autoconfigure.s3.S3AutoConfiguration
이때 Test class에 @ActiveProfiles("test")
추가
🙋♀️ @ActiveProfiles("test")
는 Spring Boot가 application-test.yml을 우선 적용하도록 설정하는 역할을 한다.
일반적으로 테스트 코드에서 특정 프로파일을 강제 적용할 때 사용됨.
만약, application-testing.yml 파일을 참조하려면 @ActiveProfiles("testing")으로 설정해야 한다
Dockerizing 하는 과정
1) 애플리케이션 코드 준비(git pull)
2) Dockerfile 작성
3) docker build로 Docker 이미지 생성
docker build -t seyoen3/app:8 .
:.
빼먹으면 안된다!!
4) Docker push로 Docker hub에 업로드
docker push seyoen3/app:8
→ 이후 docker pull로 해당 이미지 다운받아 docker에서 컨테이너로 실행가능
docker pull seyoen3/app:8
docker run -d -p 8080:8080 --name app seyoen3/app:8
🙋♀️Docker 이미지 내부에 환경 변수, API Key, 민감한 설정 파일이 포함될 가능성이 있어 보안 상 해당 패키지를 Private(비공개)로 설정하는게 좋다
docker login ghcr.io -u [github아이디] //이후, password에 accessToken 입력
docker run -d -p 8080:8080 --name app [이미지]
컨테이너 실행🙋♀️ ghcr.io는 GitHub Container Registry(GHCR)의 도메인이며, GitHub Packages에서 제공하는 Docker 이미지 저장소이다. 비공개(Private) 패키지는 EC2에서 다운로드하려면 반드시 docker login ghcr.io 과정을 거쳐야 한다.(공개(Public) 패키지는 로그인 없이 다운로드 가능)
deploy:
runs-on: ubuntu-latest
needs: [ buildImageAndPush ]
steps:
- name: AWS SSM Send-Command
uses: peterkimzz/aws-ssm-send-command@master
id: ssm
with:
aws-region: ${{ secrets.AWS_REGION }}
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
instance-ids: "i-015d44766db7d2a9f"
working-directory: /
comment: Deploy
command: |
docker pull ghcr.io/${{ env.OWNER_LC }}/app20250314:latest
docker stop app1 2>/dev/null
docker rm app1 2>/dev/null
docker run -d --name app1 -p 8080:8080 ghcr.io/${{ env.OWNER_LC }}/app20250314:latest
docker rmi $(docker images -f "dangling=true" -q)
nslookup
: 특정 DNS(Domain Name System) 조회를 수행하는 명령어
curl
: Command-line URL tool의 약자로, 터미널에서 HTTP 요청을 보내고 응답을 확인할 수 있는 명령어
ex. curl https://example.com → 브라우저에서 페이지를 여는 것과 동일한 효과)