AWS AMI弃用(API:ec2:RunInstances未授权用于图像)

时间:2014-03-26 06:38:06

标签: amazon-web-services ami amazon-cloudformation

所以我一直在我的云形成模板中使用AWS AMI。

似乎他们每个月都会创建新图片,并在新版本发布后2周左右弃用旧图片。这会产生许多问题:

  1. 旧模板堆栈已损坏。
  2. 模板需要更新。
  3. 我错过了什么吗?

    E.G。 我正盯着

    API: ec2:RunInstances Not authorized for images: [ami-1523bd2f]
    

    我的错误 云形成事件。

    查看02.12图片ID: http://thecloudmarket.com/image/ami-1523bd2f--windows-server-2012-rtm-english-64bit-sql-2012-sp1-web-2014-02-12

    现在在哪里有一个新的图片ID: http://thecloudmarket.com/image/ami-e976efd3--windows-server-2012-rtm-english-64bit-sql-2012-sp1-web-2014-03-12

4 个答案:

答案 0 :(得分:10)

你的确是对的。发布新版本时,不推荐使用Windows AMI(请参阅http://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/Basics_WinAMI.html

截至今天没有“点击”解决方案,文档说:“AWS每年更新AWS Windows AMI几次。更新涉及弃用以前的AMI并用新的AMI和AMI ID替换它。更新后的AMI,使用名称而不是ID .AMI名称的基本结构通常是相同的,并在末尾添加了新日期。您可以使用查询或脚本按名称搜索AMI ,确认您找到了正确的AMI,然后启动您的实例。“

一种可能的解决方案可能是开发CloudFormation自定义资源,在启动EC2实例之前检查AMI可用性。

请参阅有关CFN自定义资源的文档:http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/crpg-walkthrough.html

来自re:Invent:https://www.youtube.com/watch?v=ZhGMaw67Yu0#t=945(和this sample code进行AMI查询)的演讲

您还可以选择基于亚马逊提供的AMI创建自己的自定义AMI。即使您不修改任何内容也是如此。您的自定义AMI将是亚马逊提供的AMI的精确副本,但在Amazon AMI弃用后仍然可用。

Netflix有开源工具来帮助管理AMI,请查看Aminator

Linux AMI在发布后几年被弃用(2003.11仍然可用!)但是,只要有补丁版本,Windows AMI就会被弃用。这是出于安全原因。

答案 1 :(得分:2)

这个ps脚本适合我的目的,我们使用windows 2012 base image:

$imageId = "xxxxxxx"

if ( (Get-EC2Image -ImageIds $imageId) -eq $null ) {

    $f1 = New-Object  Amazon.EC2.Model.Filter ; $f1.Name="owner-alias";$f1.Value="amazon"
    $f2 = New-Object  Amazon.EC2.Model.Filter ; $f2.Name="platform";$f2.Value="windows"

    $img = Get-EC2Image -Filters $f1,$f2 | ? {$_.Name.StartsWith("Windows_Server-2012-RTM-English-64Bit-Base")} | Select-Object -First 1

    $imageId =$img.ImageId

}

答案 2 :(得分:0)

我最近遇到了同样的错误。我已经在一个帐户中建立了一个自定义ami,并试图从另一个帐户运行EC2实例。

对我来说,问题是AMI没有正确的权限才能使我的用户从另一个帐户运行它。

要解决此问题,我登录了另一个帐户,并向ami添加了所需的权限:

aws ec2 modify-image-attribute --image-id youramiid --launch-permission "Add=[{UserId=youruserid}]"

更多信息,请访问this documentation page

答案 3 :(得分:0)

如果您正在使用培训材料并复制了代码,请确保将AMI名称替换为帐户下可见的AMI列表下可用的正确AMI Image值。与其他值相似。如果只是剪切和粘贴培训代码中的值,则可能现在不可用。