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태그 키로 필터링하여 결과를 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 그룹을 마이그레이션하여 템플릿을 시작합니다. 있습니다.

중요

스택 리소스 이름에 해당 스택 리소스가 포함되어 있다면 해당 리소스가 를 통해 생성되었음을 의미합니다 AWS Elastic Beanstalk. AWSEB 이러한 경우에는 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. NoDevicetrue로 설정된 시작 구성에 BlockDeviceMapping 구조가 있는 경우, Amazon EC2에서 디바이스를 생략하도록 시작 템플릿에서 NoDevice에 대한 빈 문자열을 지정해야 합니다.

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

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

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

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

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

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

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

    --- 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::AutoScaling AWS::AutoScaling::AutoScaling 그룹 참조하십시오.

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

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

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

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

Auto Scaling 그룹의 UpdatePolicy 속성을 지정하지 않은 경우 시작 템플릿이 정확한지 확인하지만 Auto Scaling 그룹의 인스턴스 전체에 변경 내용을 CloudFormation 배포하지는 않습니다. 모든 새 인스턴스는 시작 템플릿을 사용하지만, 기존 인스턴스는 (시작 구성이 존재하지 않음에도) 원래 시작된 시작 구성으로 계속 실행됩니다. 단, 구매 옵션을 변경하는 경우(예를 들어, 혼합 인스턴스 정책을 추가하는 방식을 통해)는 예외입니다. 이 경우 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. 스택 업데이트가 완료되면 UPDATE_COMPLETE 스택 이벤트를 CloudFormation 발행합니다. 자세한 내용은 AWS CloudFormation 사용 설명서스택 업데이트 진행 상황 모니터링을 참조하세요.

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

시작 구성 매핑 참조

참조를 위해 다음 표에는 리소스의 모든 최상위 속성과 AWS::AutoScaling::LaunchConfiguration리소스의 해당 속성이 나열되어 있습니다. 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

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