ISFJ 개발자의 이야기

Event Bridge를 이용해 ECR Image Push 감지 후 서버 실행하기 본문

Cloud/AWS

Event Bridge를 이용해 ECR Image Push 감지 후 서버 실행하기

ISFJ 개발자의 이야기 2025. 10. 2. 11:02

이번 블로그에서는 Event Bridge를 이용해서 ECR의 새로운 Image가 Push 될 경우 서버의 새로운 ECR Image를 실행되게하는 아키텍처 글을 작성해보려 합니다.

아키텍처는 아래와 같이 구성됩니다.

 

 

Event Bridge를 이용해 ECR Image Push를 감지하는 아키텍처를 구성하기 위해서는 아래의 순서를 따라야합니다.

 

1. ECR 생성

2. EC2 Server 생성

3. IAM 구성

4. Event Bridge 생성

 

ECR 생성

아래의 명령어를 이용해서 Image 저장소인 ECR Repository를 생성해줍니다.

aws ecr create-repository \
    --repository-name skills-app

 

EC2 Server 생성

다음으로 아래의 UserData를 갖도록 하는 EC2 Server를 하나 생성해줘야 합니다.

EC2의 권한은 AdministratorAccess, AmazonSSMManagedInstanceCore를 부여해주면 됩니다.

#!/bin/bash
sudo yum install docker -y
sudo systemctl enable docker
sudo usermod -aG docker ec2-user
sudo usermod -aG docker root
sudo systemctl start docker
sudo chmod 666 /var/run/docker.sock

docker --version

sudo yum install -y https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm-agent.rpm
sudo systemctl start amazon-ssm-agent

 

IAM 구성

아래의 명령어들을 이용해서 Event Bridge에서 사용할 정책과 역할을 생성해줍니다.

REGION="ap-northeast-2"
EC2_TAG_VALUE="skills-deployment-group"  # EC2 인스턴스 태그 값
ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text)

 

aws iam create-role \
  --role-name eventbridge-ssm-role \
  --assume-role-policy-document '{
    "Version": "2012-10-17",
    "Statement": [
      {
        "Effect": "Allow",
        "Principal": {
          "Service": "events.amazonaws.com"
        },
        "Action": "sts:AssumeRole"
      }
    ]
  }'

 

aws iam put-role-policy \
  --role-name eventbridge-ssm-role \
  --policy-name eventbridge-ssm-policy \
  --policy-document '{
    "Version": "2012-10-17",
    "Statement": [
      {
        "Effect": "Allow",
        "Action": [
          "ssm:SendCommand"
        ],
        "Resource": [
          "arn:aws:ssm:'$REGION':'$ACCOUNT_ID':document/AWS-RunShellScript",
          "arn:aws:ec2:'$REGION':'$ACCOUNT_ID':instance/*"
        ],
        "Condition": {
          "StringEquals": {
            "ec2:ResourceTag/DeploymentGroup": "'$EC2_TAG_VALUE'"
          }
        }
      },
      {
        "Effect": "Allow",
        "Action": [
          "ssm:GetCommandInvocation"
        ],
        "Resource": "*"
      }
    ]
  }'

 

aws iam attach-role-policy \
  --role-name eventbridge-ssm-role \
  --policy-arn arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryFullAccess

 

aws iam attach-role-policy \
  --role-name eventbridge-ssm-role \
  --policy-arn arn:aws:iam::aws:policy/AmazonSSMFullAccess

 

Event Bridge 생성

이제 마지막으로 ECR의 Image Push를 감지 후 서버를 재실행하는 Event Bridge Rule을 생성해주면 됩니다.

 

 

 

 

명령어는 아래와 같습니다. 참고해서 사용하시면 될 것 같습니다.

["aws ecr get-login-password --region ap-northeast-2 | docker login --username AWS --password-stdin <ACCOUNT_ID>.dkr.ecr.ap-northeast-2.amazonaws.com","docker stop skills-app || true","docker rm skills-app || true","docker pull <ACCOUNT_ID>.dkr.ecr.ap-northeast-2.amazonaws.com/skills-app:latest","docker run -d --name skills-app -p 8080:8080 <ACCOUNT_ID>.dkr.ecr.ap-northeast-2.amazonaws.com/skills-app:latest"]

 

Result

아래의 명령어로 새로운 이미지를 Push 시 사진과 같이 몇 초 뒤 컨테이너가 실행되는 모습을 볼 수 있습니다.

aws ecr get-login-password --region ap-northeast-2 | docker login --username AWS --password-stdin 362708816803.dkr.ecr.ap-northeast-2.amazonaws.com
docker build -t skills-app .
docker tag skills-app:latest 362708816803.dkr.ecr.ap-northeast-2.amazonaws.com/skills-app:latest
docker push 362708816803.dkr.ecr.ap-northeast-2.amazonaws.com/skills-app:latest

 

이것으로 Event Bridge를 이용해 ECR Image Push를 감지하는 아키텍처를 구성하는 글을 마치겠습니다. 감사합니다!

 

'Cloud > AWS' 카테고리의 다른 글

EC2 Hop Limit  (0) 2025.09.30
Lambda Git Actions CICD Pipeline  (0) 2025.09.27
Docker Container log를 Cloudwatch Logs에 저장하기  (2) 2025.06.14
Amazon Linux 2023 MFA Connect  (0) 2025.06.12
Amazon Linux 2023 Root ssh connect  (0) 2025.06.10