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를 감지하는 아키텍처를 구성하는 글을 마치겠습니다. 감사합니다!