AWS CloudFormation 스택을 시작 템플릿으로 마이그레이션 - Amazon EC2 Auto Scaling

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

AWS CloudFormation 스택을 시작 템플릿으로 마이그레이션

기존 AWS CloudFormation 스택 템플릿을 시작 구성에서 시작 템플릿으로 마이그레이션할 수 있습니다. 이렇게 하려면, 시작 템플릿을 기존 스택 템플릿에 직접 추가한 다음, 시작 템플릿을 스택 템플릿의 Auto Scaling 그룹과 연결합니다. 그런 다음, 수정된 템플릿을 사용하여 스택을 업데이트합니다.

시작 템플릿으로 마이그레이션할 때이 주제에서는 CloudFormation 스택 템플릿에서 시작 구성을 시작 템플릿으로 다시 작성하는 지침을 제공하여 시간을 절약합니다. 시작 템플릿으로 시작 구성을 마이그레이션하기에 대한 자세한 내용은 Auto Scaling 그룹을 시작 템플릿으로 마이그레이션(을)를 참조하세요.

시작 구성을 사용하는 Auto Scaling 그룹 찾기

시작 구성을 사용하는 Auto Scaling 그룹을 찾으려면
  • 다음 describe-auto-scaling-groups 명령을 사용하여 지정된 리전에서 시작 구성을 사용하는 Auto Scaling 그룹의 이름을 나열합니다. 결과를 (aws:cloudformation:stack-name태그 키로 필터링하여) a CloudFormation 스택과 연결된 그룹으로 좁히는 --filters 옵션을 포함합니다.

    aws autoscaling describe-auto-scaling-groups --region REGION \ --filters Name=tag-key,Values=aws:cloudformation:stack-name \ --query 'AutoScalingGroups[?LaunchConfigurationName!=`null`].AutoScalingGroupName'

    다음은 출력의 예입니다.

    [ "{stack-name}-group-1", "{stack-name}-group-2", "{stack-name}-group-3" ]

    에서 마이그레이션할 Auto Scaling 그룹을 찾고 출력을 필터링하는 데 유용한 추가 AWS CLI 명령을 찾을 수 있습니다Auto Scaling 그룹을 시작 템플릿으로 마이그레이션.

중요

스택 리소스AWSEB의 이름이 인 경우 이를 통해 생성되었음을 의미합니다 AWS Elastic Beanstalk. 이러한 경우에는 Elastic Beanstalk가 시작 구성을 제거하고 해당 내용을 시작 템플릿으로 바꾸도록 Beanstalk 환경을 업데이트해야 합니다.

시작 템플릿을 사용하도록 스택 업데이트

이 섹션의 단계를 따라 다음을 수행합니다.

  • 상응하는 시작 템플릿 속성을 사용하여 시작 구성을 시작 템플릿으로 다시 작성합니다.

  • 새로운 시작 템플릿을 Auto Scaling 그룹에 연결합니다.

  • 이 업데이트를 배포합니다.

스택 템플릿을 수정하고 스택을 업데이트하려면
  1. AWS CloudFormation 사용 설명서스택 템플릿 수정에 설명된 것과 동일한 일반적인 스택 템플릿 수정 절차를 따릅니다.

  2. 시작 구성을 시작 템플릿으로 다시 작성합니다. 다음 예를 참조하세요.

    예: 간단한 시작 구성

    --- Resources: myLaunchConfig: Type: AWS::AutoScaling::LaunchConfiguration Properties: ImageId: ami-02354e95b3example InstanceType: t3.micro SecurityGroups: - !Ref EC2SecurityGroup KeyName: MyKeyPair BlockDeviceMappings: - DeviceName: /dev/xvda Ebs: VolumeSize: 150 DeleteOnTermination: true UserData: Fn::Base64: !Sub | #!/bin/bash -xe yum install -y aws-cfn-bootstrap /opt/aws/bin/cfn-signal -e $? --stack ${AWS::StackName} --resource myASG --region ${AWS::Region}

    예: 상응하는 시작 템플릿

    --- Resources: myLaunchTemplate: Type: AWS::EC2::LaunchTemplate Properties: LaunchTemplateName: !Sub ${AWS::StackName}-launch-template LaunchTemplateData: ImageId: ami-02354e95b3example InstanceType: t3.micro SecurityGroupIds: - Ref! EC2SecurityGroup KeyName: MyKeyPair BlockDeviceMappings: - DeviceName: /dev/xvda Ebs: VolumeSize: 150 DeleteOnTermination: true UserData: Fn::Base64: !Sub | #!/bin/bash -x yum install -y aws-cfn-bootstrap /opt/aws/bin/cfn-signal -e $? --stack ${AWS::StackName} --resource myASG --region ${AWS::Region}

    Amazon EC2가 지원하는 모든 속성에 대한 참조 정보는 AWS CloudFormation 사용 설명서AWS::EC2::LaunchTemplate를 참조하세요.

    시작 템플릿에 값이 !Sub ${AWS::StackName}-launch-templateLaunchTemplateName 속성이 어떻게 포함되어 있는지 확인합니다. 이것은 스택 이름을 시작 템플릿의 이름에 포함시키길 원할 경우 필요합니다.

  3. IamInstanceProfile 속성이 시작 구성에 있는 경우 속성을 구조로 변환하고 인스턴스 프로파일의 이름 또는 ARN를 지정해야 합니다. 예제는 AWS::EC2::LaunchTemplate를 참조하세요.

  4. 시작 구성에 AssociatePublicIpAddress, InstanceMonitoring 또는 PlacementTenancy 속성이 있는 경우, 이러한 내용들을 구조로 변환해야 합니다. 예제는 AWS::EC2::LaunchTemplate를 참조하세요.

    단, Auto Scaling 그룹에 사용한 서브넷의 MapPublicIpOnLaunch 속성 값이 시작 구성의 AssociatePublicIpAddress 속성 값과 일치하는 경우는 예외입니다. 이 경우 AssociatePublicIpAddress 속성을 무시할 수 있습니다. AssociatePublicIpAddress 속성은 MapPublicIpOnLaunch 속성을 재정의하여 인스턴스가 시작 시 퍼블릭 IPv4 주소를 수신할지 여부를 변경하는 데만 사용됩니다.

  5. SecurityGroups 속성의 보안 그룹을 시작 템플릿의 두 위치 중 하나로 복사할 수 있습니다. 일반적으로, 보안 그룹을 SecurityGroupIds 속성에 복사합니다. 하지만, 시작 템플릿 내에 NetworkInterfaces 구조를 생성하여 AssociatePublicIpAddress 속성을 지정하는 경우에는 보안 그룹을 네트워크 인터페이스의 Groups 속성에 대신 복사해야 합니다.

  6. 가 로 NoDevice 설정된 시작 구성에 BlockDeviceMapping 구조가 있는 true경우 Amazon EC2가 디바이스를 생략하도록 시작 템플릿NoDevice에에 대한 빈 문자열을 지정해야 합니다.

  7. 시작 구성에 SpotPrice 속성이 있는 경우, 시작 템플릿에서 해당 속성을 생략하는 것이 좋습니다. 스팟 인스턴스가 현재 스팟 가격으로 시작됩니다. 이 가격은 온디맨드 가격을 초과하지 않습니다.

    스팟 인스턴스를 요청하려면 상호 배타적인 두 가지 옵션이 있습니다.

    • 첫 번째는 시작 템플릿의 InstanceMarketOptions 구조를 사용하는 것입니다(권장하지 않음). 자세한 내용은 AWS CloudFormation 사용 설명서AWS::EC2::LaunchTemplate InstanceMarketOptions를 참조하세요.

    • 다른 방법은 Auto Scaling 그룹에 MixedInstancesPolicy 구조를 추가하는 것입니다. 이렇게 하면 요청을 만드는 방법에 대한 더 많은 옵션이 제공됩니다. 시작 템플릿의 스팟 인스턴스 요청은 Auto Scaling 그룹당 두 개 이상의 인스턴스 유형 선택을 지원하지 않습니다. 하지만, 혼합 인스턴스 정책은 Auto Scaling 그룹당 두 개 이상의 인스턴스 유형 선택을 지원합니다. 스팟 인스턴스 요청은 두 개 이상의 인스턴스 유형 중에서 선택할 수 있는 이점이 있습니다. 자세한 내용은 AWS CloudFormation 사용 설명서AWS::AutoScaling::AutoScalingGroup MixedInstancesPolicy를 참조하세요.

  8. AWS::AutoScaling::AutoScalingGroup 리소스에서 LaunchConfigurationName 속성을 제거합니다. 시작 템플릿을 그 자리에 추가합니다.

    다음 예제에서 Ref 내장 함수는 논리적 ID가 인 AWS::EC2::LaunchTemplate 리소스의 ID를 가져옵니다myLaunchTemplate. GetAtt 함수는 Version 속성에 대한 시작 템플릿의 최신 버전 번호(예: 1)를 가져옵니다.

    예: 혼합 인스턴스 정책 미사용

    --- Resources: myASG: Type: AWS::AutoScaling::AutoScalingGroup Properties: LaunchTemplate: LaunchTemplateId: !Ref myLaunchTemplate Version: !GetAtt myLaunchTemplate.LatestVersionNumber ...

    예: 혼합 인스턴스 정책 사용

    --- Resources: myASG: Type: AWS::AutoScaling::AutoScalingGroup Properties: MixedInstancesPolicy: LaunchTemplate: LaunchTemplateSpecification: LaunchTemplateId: !Ref myLaunchTemplate Version: !GetAtt myLaunchTemplate.LatestVersionNumber ...

    Amazon EC2 Auto Scaling에서 지원하는 모든 속성에 대한 참조 정보는 AWS CloudFormation 사용 설명서AWS::AutoScaling::AutoScalingGroup를 참조하세요.

  9. 이러한 업데이트를 배포할 준비가 되면 CloudFormation 절차에 따라 수정된 스택 템플릿으로 스택을 업데이트합니다. 자세한 내용은 AWS CloudFormation 사용 설명서스택 템플릿 수정을 참조하세요.

스택 리소스의 업데이트 동작 이해

CloudFormation 는 제공한 업데이트된 템플릿과 이전 버전의 스택 템플릿에서 설명한 리소스 구성 간의 변경 사항을 비교하여 스택 리소스를 업데이트합니다. 변경되지 않은 리소스 구성은 업데이트 프로세스 동안 영향을 받지 않는 상태로 유지됩니다.

CloudFormation 는 Auto Scaling 그룹에 대한 UpdatePolicy 속성을 지원합니다. 업데이트 중에이 로 UpdatePolicy 설정된 경우이 절차의 단계를 수행한 후 AutoScalingRollingUpdate CloudFormation 가 InService 인스턴스를 대체합니다. UpdatePolicy가 로 설정된 경우AutoScalingReplacingUpdate CloudFormation 는 Auto Scaling 그룹과 해당 웜 풀(있는 경우)을 대체합니다.

Auto Scaling 그룹에 대한 UpdatePolicy 속성을 지정하지 않은 경우 시작 템플릿의 정확성이 확인되지만 CloudFormation 는 Auto Scaling 그룹의 인스턴스에 변경 사항을 배포하지 않습니다. 모든 새 인스턴스는 시작 템플릿을 사용하지만, 기존 인스턴스는 (시작 구성이 존재하지 않음에도) 원래 시작된 시작 구성으로 계속 실행됩니다. 단, 구매 옵션을 변경하는 경우(예를 들어, 혼합 인스턴스 정책을 추가하는 방식을 통해)는 예외입니다. 이 경우 Auto Scaling 그룹은 새 구매 옵션에 맞게 기존 인스턴스를 새 인스턴스로 점진적으로 교체합니다.

시작 구성에서 시작 템플릿으로 이동하기 위해 변경 사항을 롤백해야 하는 경우 롤백 작업을 테스트해야 합니다.

마이그레이션 추적

마이그레이션을 추적하려면
  1. AWS CloudFormation 콘솔에서 업데이트한 스택을 선택한 다음 [이벤트(Events)] 탭을 선택하여 스택 이벤트를 봅니다.

  2. 이벤트 목록을 최신 이벤트로 업데이트하려면 CloudFormation 콘솔에서 새로 고침 버튼을 선택합니다.

  3. 스택이 업데이트되는 동안, 각 리소스 업데이트에 대한 여러 이벤트를 확인하게 됩니다. 시작 템플릿을 만들려고 할 때 상태 사유 열에 문제가 있음을 나타내는 예외가 표시되는 경우, 잠재적 원인은 Amazon EC2 Auto Scaling 문제 해결: 시작 템플릿(을)를 참조하세요.

  4. (선택 사항) UpdatePolicy 속성 사용에 따라 Amazon EC2 콘솔의 Auto Scaling 그룹 페이지에서 Auto Scaling 그룹의 진행 상황을 모니터링할 수 있습니다. Auto Scaling 그룹을 선택합니다. Activity(활동) 탭에서 Activity history(활동 기록)의 Status(상태) 열에 Auto Scaling 그룹이 성공적으로 인스턴스를 시작 또는 해지했는지와 크기 조정 활동이 아직 진행 중인지 여부가 표시됩니다.

  5. 스택 업데이트가 완료되면 CloudFormation 는 UPDATE_COMPLETE 스택 이벤트를 실행합니다. 자세한 내용은 AWS CloudFormation 사용 설명서스택 업데이트 진행 상황 모니터링을 참조하세요.

  6. 스택 업데이트가 완료되면 Amazon EC2 콘솔의 템플릿 시작 페이지구성 시작 페이지를 엽니다. 새 시작 템플릿이 생성되고 시작 구성이 삭제된 것을 확인할 수 있습니다.

시작 구성 매핑 참조

참조 목적으로 다음 표에는 AWS::AutoScaling::WordWord::LaunchConfigurationWord::Word 리소스의 모든 최상위 속성이 나열되어 있으며 해당 속성은 AWS::EC2::LaunchTemplate 리소스에 나열되어 있습니다.

시작 구성 소스 속성 시작 템플릿 대상 속성
AssociatePublicIpAddress NetworkInterfaces.AssociatePublicIpAddress
BlockDeviceMappings BlockDeviceMappings
ClassicLinkVPCId 사용할 수 없음¹
ClassicLinkVPCSecurityGroups 사용할 수 없음¹
EbsOptimized EbsOptimized
IamInstanceProfile IamInstanceProfile.Arn 또는 IamInstanceProfile.Name 중 하나, 하지만 둘 다는 아님
ImageId ImageId
InstanceId InstanceId
InstanceMonitoring Monitoring.Enabled
InstanceType InstanceType
KernelId KernelId
KeyName KeyName
LaunchConfigurationName LaunchTemplateName
MetadataOptions MetadataOptions
PlacementTenancy Placement.Tenancy
RamDiskId RamDiskId
SecurityGroups SecurityGroupIds 또는 NetworkInterfaces.Groups 중 하나, 하지만 둘 다는 아님
SpotPrice InstanceMarketOptions.SpotOptions.MaxPrice
UserData UserData

1 EC2-Classic을 더 이상 사용할 수 없으므로 ClassicLinkVPCIdClassicLinkVPCSecurityGroups 속성을 시작 템플릿에서 사용할 수 없습니다.