AWS에서 가용 영역 종료 시뮬레이션
7792 단어 availabilityzonedevopsawscli
AZ 비활성화
AZ에 대한 모든 네트워크 트래픽을 차단하는 것이 이를 시뮬레이션하는 가장 좋은 방법인 것 같습니다. 내가 사용한 방법은 AZ의 모든 서브넷에 대한 ACL을 새 ACL로 변경하는 것이었습니다. AWS cli는 기본적으로 새 ACL에 대해 Deny All 트래픽이 있는 ACL을 생성합니다.
#!/bin/bash
# prereq
# - jq
# - aws-cli
AZ=eu-west-1c
# use the subnetId to get the NetworkAclAssociationId to create the new acl association
for SUBNETID in $(aws ec2 describe-subnets --region ${AZ%?}| jq ".Subnets[] | select(.AvailabilityZone==\"$AZ\")" | jq -r '.SubnetId')
do
aws ec2 describe-network-acls --region ${AZ%?}| jq -r ".[] | .[].Associations[] | select(.SubnetId==\"$SUBNETID\")" | jq -r '.NetworkAclAssociationId' >> NetworkAclAssociationId.tmp
# Need to take a backup of the original NetworkAclId's to be able to reverse the change
aws ec2 describe-network-acls --region ${AZ%?}| jq -r ".[] | .[].Associations[] | select(.SubnetId==\"$SUBNETID\")" | jq -r '.NetworkAclId' >> NetworkAclId-restore.tmp
done
여러 VPC가 있으므로 각 VPC에 대해 서로 다른 ACL을 생성해야 했습니다.
# create the dummy ACL and create a file containing the NetworkAclId for the dummy ACL for each VPC
for VPCID in $(aws ec2 describe-subnets --region ${AZ%?} | jq -r ".Subnets[] | select(.AvailabilityZone==\"$AZ\")" | jq -r '.VpcId')
do
aws ec2 create-network-acl --vpc-id $VPCID --region ${AZ%?} | jq -r '.NetworkAcl.NetworkAclId' >> NetworkAclId.tmp
done
그런 다음 NetworkAclAssociationId 및 NetworkAclId 목록을 가져오고 ACL 연결을 변경하는 함수를 만들었습니다.
# Function ChangeAcl takes two arguments for disable or enable
# $1 should be NetworkAclAssociationId filename
# $2 should be NetworkAclId filename
function ChangeAcl() {
# needed to read from two files so used a count to poll through the lines of the second file
count=1
cat $1 | while read NetworkAclAssociationId
do
echo $(sed -n "${count}p" < $2)
echo $NetworkAclAssociationId
aws ec2 replace-network-acl-association --region ${AZ%?} --association-id $NetworkAclAssociationId --network-acl-id $(sed -n "${count}p" < $2)
((count=count+1))
done
}
# Call the function to create new disable ACL association
ChangeAcl NetworkAclAssociationId.tmp NetworkAclId.tmp
이 시점에서 특정 AZ에 대한 모든 트래픽을 비활성화했으며 이제 리소스가 예상대로 재배포되고 다운타임이 없는지 확인할 수 있습니다.
다시 활성화
다시 활성화하려면 몇 가지 추가 단계가 필요합니다.
# Get the new networkAclAssociationId for the subnets
for SUBNETID in $(aws ec2 describe-subnets --region ${AZ%?} | jq ".Subnets[] | select(.AvailabilityZone==\"$AZ\")" | jq -r '.SubnetId')
do
aws ec2 describe-network-acls --region ${AZ%?} | jq -r ".[] | .[].Associations[] | select(.SubnetId==\"$SUBNETID\")" | jq -r '.NetworkAclAssociationId' >> NetworkAclAssociationId-restore.tmp
done
# Restore the subnets to the original ACL's
ChangeAcl NetworkAclAssociationId-restore.tmp NetworkAclId-restore.tmp
# delete the dummy ACL's
cat NetworkAclId.tmp | while read deleteNetworkAclId
do
aws ec2 delete-network-acl --network-acl-id $deleteNetworkAclId --region ${AZ%?}
done
즉, 모든 트래픽을 원래 구성으로 복원해야 합니다.
Reference
이 문제에 관하여(AWS에서 가용 영역 종료 시뮬레이션), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/austincunningham/aws-simulate-killing-an-availability-zone-3jmp텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)