使用自动缩放最佳实践同步aws ec2中的IIS服务器

时间:2014-04-02 10:54:42

标签: iis powershell amazon-ec2 msdeploy aws-powershell

我们使用负载均衡的自动扩展Web服务器(IIS)在Amazon EC2上运行我们的Web应用程序。

在自动扩展之前,我们的部署过程是文件复制到几个大型Web服务器。

现在,通过自动扩展,我们可以随意显示和消失5到12个Web服务器,从而使部署过程更加困难。

为了解决这个问题,我编写了一个powershell脚本,用于检索自动扩展组中的服务器IP,并使用MSDeploy将它们与指定的部署服务器同步(在自动扩展组之外的负载均衡器中)。然后它创建一个新的AMI并更新自动扩展配置。

似乎一切都很好,在重建部署服务器之后,同步脚本不会更新网站的运行状态。所以我可以将网站置于维护模式。

我想知道:

  • 其他人如何解决问题(特别是在autoscaling ec2中同步iis服务器)(在IIS 8没有WFF的情况下)

  • 启动/停止同步失败的原因

代码:

Set-AWSCredentials -AccessKey XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX -SecretKey XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Set-DefaultAWSRegion "us-west-2"

$date = get-date
$dateString = $date.ToString("yyyyMMdd-HHmm")
$name = $dateString +  "Web"
$imageId = new-ec2image -InstanceId x-xxxxxxxx -Name $name -NoReboot 1

$launchConfiguration = New-ASLaunchConfiguration -LaunchConfigurationName $name -ImageId $imageId -InstanceType "m3.medium" -SecurityGroups @('Web') -InstanceMonitoring_Enabled $false

Update-AsAutoScalingGroup -AutoScalingGroupName "XxxxxxxxxxxxXxxxxxxxxx" -LaunchConfigurationName $name

$a = Get-ASAutoScalingInstance | select -expandproperty InstanceId | Get-EC2Instance | select -expandproperty RunningInstance | select -property PrivateIpAddress

foreach($ip in $a)
{
        $command = "C:\Program Files\IIS\Microsoft Web Deploy V3\msdeploy.exe"
        $arg = "-dest:webServer,computerName=" + $ip.PrivateIpAddress;
        $args = @('-verb:sync', '-source:webServer', $arg)
        &$command $args
}

1 个答案:

答案 0 :(得分:5)

不要尝试"同步"网络服务器。考虑进行一次性安装 - 并允许用于部署的工具启动来管理同步。

我过去所做的是使用CloudFormation创建环境,并结合使用cfn-init和cfn-hup进行安装。然后,部署过程就会成为将新软件包重新部署到某个地方(如S3),然后使用CloudFormation来破坏版本的情况。

这会触发cfn-hup更新,每个服务器都会从S3下载软件包并重新安装。

此外 - 如果您的扩展组扩展,它将自动使用cfn-init在向负载均衡器注册实例之前完全下载并安装包

这里有几个类似的StackOverflow问题

此外,我在很多月前写了两篇关于它的文章

这应该足以让你开始。