Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon ec2 AWS AMI-过滤器最新版本_Amazon Ec2_Aws Cli - Fatal编程技术网

Amazon ec2 AWS AMI-过滤器最新版本

Amazon ec2 AWS AMI-过滤器最新版本,amazon-ec2,aws-cli,Amazon Ec2,Aws Cli,也许我试图错误地使用AWS EC2,请帮助我。我想通过一个用户数据脚本创建一个基本的ami,这没问题,它可以工作。然而,下一步是制作一个图像,但是由于对象没有标记,因此要对其进行过滤有点困难,我可以添加区域、专有网络、安全组和状态的标准,这将找到对象,我可以创建图像 但是,我不想覆盖现有的图像,所以理想情况下,我需要用名称和版本标记它,没有问题。但是,我需要子图像来查找该图像,我希望通过名称和版本查找,但动态查找,即最新的。在docker中,只要容器被标记,就相当简单,使用最新版本可以省略,并且

也许我试图错误地使用AWS EC2,请帮助我。我想通过一个用户数据脚本创建一个基本的ami,这没问题,它可以工作。然而,下一步是制作一个图像,但是由于对象没有标记,因此要对其进行过滤有点困难,我可以添加区域、专有网络、安全组和状态的标准,这将找到对象,我可以创建图像

但是,我不想覆盖现有的图像,所以理想情况下,我需要用名称和版本标记它,没有问题。但是,我需要子图像来查找该图像,我希望通过名称和版本查找,但动态查找,即最新的。在docker中,只要容器被标记,就相当简单,使用最新版本可以省略,并且它将自动提取最新版本。这里有类似的技术吗?你们用什么?我可能用错了吗?

以下是我所做的:

注意:虽然这是用于标记实例的,但可以轻松修改以使用图像

注意:我不是powershell power用户,因此如果您看到明显的低效率,请让我知道

我使用Jenkins构建机器,因此它有我用于标记的环境变量,但是它调用具有此签名的powershell脚本,因此您可以手动调用或通过其他脚本调用它:

param(
    ...
    [Parameter(Mandatory=$true)][string]$Tag_Name,
    [Parameter(Mandatory=$true)][string]$Tag_Version
)
在这个脚本中,我将实例标记设置为:

#Get metadata from ec2 service
$identityDocument = (Invoke-WebRequest http://169.254.169.254/latest/dynamic/instance-identity/document/).Content | ConvertFrom-Json

$tags = @( 
    @{Key = "Name"; Value = $Tag_Name},
    @{Key = "Version"; Value = $Tag_Version}
)

New-EC2Tag -Resource $identityDocument.instanceId -Tag $tags
在另一个脚本中,我可以按名称查询、查找所有实例、将结果解析为[InstanceId,Version]的哈希表、按版本排序并获得最上面的一个

$instanceName = "hello-world"
$instances = GetHashTableOfFilteredInstances $instanceName
$instanceId = GetNewestInstance($instances)

Write-Host 'Information for ' $instanceName
Write-Host '================='
Write-Host 'The newest instance is ' $instanceId
Write-Host '================='

function GetHashTableOfFilteredInstances($tagName){
    $instances = Get-EC2Instance -Filter @( `
      @{name='tag:Name'; values=$tagName};`
    ) | Select-Object -ExpandProperty instances

    $actInstances= @{}

    foreach($instance in $instances){
       foreach($tag in $instance.Tag){
          if ($tag.Key -ne "Version") {
             Continue;
          }

          $actInstances.Add($tag.Value, $instance.InstanceId)
       }
    }

    return $actInstances
 }

 function GetNewestInstance($instances){
     return ($instances.GetEnumerator() | Sort-Object Key -descending)[0].Value
 }

当然,我可以按创建的时间进行过滤,如下所示:$ami=Get-EC2Image-Region$Region-Owner self | Where Object{$\ Name.StartsWith(“windows iis ami”)}| `排序Object-Property CreationDate-Descending | `选择Object-First 1 | `选择-ExpandProperty ImageId