ImageArgs

data class ImageArgs(val architecture: Output<String>? = null, val bootMode: Output<String>? = null, val deleteAutoSnapshot: Output<Boolean>? = null, val description: Output<String>? = null, val detectionStrategy: Output<String>? = null, val diskDeviceMappings: Output<List<ImageDiskDeviceMappingArgs>>? = null, val features: Output<ImageFeaturesArgs>? = null, val force: Output<Boolean>? = null, val imageFamily: Output<String>? = null, val imageName: Output<String>? = null, val imageVersion: Output<String>? = null, val instanceId: Output<String>? = null, val licenseType: Output<String>? = null, val name: Output<String>? = null, val platform: Output<String>? = null, val resourceGroupId: Output<String>? = null, val snapshotId: Output<String>? = null, val tags: Output<Map<String, String>>? = null) : ConvertibleToJava<ImageArgs>

Provides a ECS Image resource.

NOTE: If you want to create a template from an ECS instance, you can specify the instance ID (InstanceId) to create a custom image. You must make sure that the status of the specified instance is Running or Stopped. After a successful invocation, each disk of the specified instance has a new snapshot created. NOTE: If you want to create a custom image based on the system disk of your ECS instance, you can specify one of the system disk snapshots (SnapshotId) to create a custom image. However, the specified snapshot cannot be created on or before July 15, 2013. NOTE: If you want to combine snapshots of multiple disks into an image template, you can specify DiskDeviceMapping to create a custom image. For information about ECS Image and how to use it, see What is Image. NOTE: Available since v1.64.0.

Example Usage

Basic Usage

import * as pulumi from "@pulumi/pulumi";
import * as alicloud from "@pulumi/alicloud";
import * as random from "@pulumi/random";
const _default = alicloud.getZones({
availableResourceCreation: "Instance",
});
const defaultGetInstanceTypes = alicloud.ecs.getInstanceTypes({
instanceTypeFamily: "ecs.sn1ne",
});
const defaultGetImages = alicloud.ecs.getImages({
nameRegex: "^ubuntu_18.*64",
owners: "system",
});
const defaultNetwork = new alicloud.vpc.Network("default", {
vpcName: "terraform-example",
cidrBlock: "172.17.3.0/24",
});
const defaultSwitch = new alicloud.vpc.Switch("default", {
vswitchName: "terraform-example",
cidrBlock: "172.17.3.0/24",
vpcId: defaultNetwork.id,
zoneId: _default.then(_default => _default.zones?.[0]?.id),
});
const defaultSecurityGroup = new alicloud.ecs.SecurityGroup("default", {
name: "terraform-example",
vpcId: defaultNetwork.id,
});
const defaultInstance = new alicloud.ecs.Instance("default", {
availabilityZone: _default.then(_default => _default.zones?.[0]?.id),
instanceName: "terraform-example",
securityGroups: [defaultSecurityGroup&#46;id],
vswitchId: defaultSwitch.id,
instanceType: defaultGetInstanceTypes.then(defaultGetInstanceTypes => defaultGetInstanceTypes.ids?.[0]),
imageId: defaultGetImages.then(defaultGetImages => defaultGetImages.ids?.[0]),
internetMaxBandwidthOut: 10,
});
const defaultGetResourceGroups = alicloud.resourcemanager.getResourceGroups({});
const defaultInteger = new random.index.Integer("default", {
min: 10000,
max: 99999,
});
const defaultImage = new alicloud.ecs.Image("default", {
instanceId: defaultInstance.id,
imageName: `terraform-example-${defaultInteger.result}`,
description: "terraform-example",
architecture: "x86_64",
resourceGroupId: defaultGetResourceGroups.then(defaultGetResourceGroups => defaultGetResourceGroups.ids?.[0]),
tags: {
FinanceDept: "FinanceDeptJoshua",
},
});
import pulumi
import pulumi_alicloud as alicloud
import pulumi_random as random
default = alicloud.get_zones(available_resource_creation="Instance")
default_get_instance_types = alicloud.ecs.get_instance_types(instance_type_family="ecs.sn1ne")
default_get_images = alicloud.ecs.get_images(name_regex="^ubuntu_18.*64",
owners="system")
default_network = alicloud.vpc.Network("default",
vpc_name="terraform-example",
cidr_block="172.17.3.0/24")
default_switch = alicloud.vpc.Switch("default",
vswitch_name="terraform-example",
cidr_block="172.17.3.0/24",
vpc_id=default_network.id,
zone_id=default.zones[0].id)
default_security_group = alicloud.ecs.SecurityGroup("default",
name="terraform-example",
vpc_id=default_network.id)
default_instance = alicloud.ecs.Instance("default",
availability_zone=default.zones[0].id,
instance_name="terraform-example",
security_groups=[default_security_group&#46;id],
vswitch_id=default_switch.id,
instance_type=default_get_instance_types.ids[0],
image_id=default_get_images.ids[0],
internet_max_bandwidth_out=10)
default_get_resource_groups = alicloud.resourcemanager.get_resource_groups()
default_integer = random.index.Integer("default",
min=10000,
max=99999)
default_image = alicloud.ecs.Image("default",
instance_id=default_instance.id,
image_name=f"terraform-example-{default_integer['result']}",
description="terraform-example",
architecture="x86_64",
resource_group_id=default_get_resource_groups.ids[0],
tags={
"FinanceDept": "FinanceDeptJoshua",
})
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using AliCloud = Pulumi.AliCloud;
using Random = Pulumi.Random;
return await Deployment.RunAsync(() =>
{
var @default = AliCloud.GetZones.Invoke(new()
{
AvailableResourceCreation = "Instance",
});
var defaultGetInstanceTypes = AliCloud.Ecs.GetInstanceTypes.Invoke(new()
{
InstanceTypeFamily = "ecs.sn1ne",
});
var defaultGetImages = AliCloud.Ecs.GetImages.Invoke(new()
{
NameRegex = "^ubuntu_18.*64",
Owners = "system",
});
var defaultNetwork = new AliCloud.Vpc.Network("default", new()
{
VpcName = "terraform-example",
CidrBlock = "172.17.3.0/24",
});
var defaultSwitch = new AliCloud.Vpc.Switch("default", new()
{
VswitchName = "terraform-example",
CidrBlock = "172.17.3.0/24",
VpcId = defaultNetwork.Id,
ZoneId = @default.Apply(@default => @default.Apply(getZonesResult => getZonesResult.Zones[0]?.Id)),
});
var defaultSecurityGroup = new AliCloud.Ecs.SecurityGroup("default", new()
{
Name = "terraform-example",
VpcId = defaultNetwork.Id,
});
var defaultInstance = new AliCloud.Ecs.Instance("default", new()
{
AvailabilityZone = @default.Apply(@default => @default.Apply(getZonesResult => getZonesResult.Zones[0]?.Id)),
InstanceName = "terraform-example",
SecurityGroups = new[]
{
defaultSecurityGroup.Id,
},
VswitchId = defaultSwitch.Id,
InstanceType = defaultGetInstanceTypes.Apply(getInstanceTypesResult => getInstanceTypesResult.Ids[0]),
ImageId = defaultGetImages.Apply(getImagesResult => getImagesResult.Ids[0]),
InternetMaxBandwidthOut = 10,
});
var defaultGetResourceGroups = AliCloud.ResourceManager.GetResourceGroups.Invoke();
var defaultInteger = new Random.Index.Integer("default", new()
{
Min = 10000,
Max = 99999,
});
var defaultImage = new AliCloud.Ecs.Image("default", new()
{
InstanceId = defaultInstance.Id,
ImageName = $"terraform-example-{defaultInteger.Result}",
Description = "terraform-example",
Architecture = "x86_64",
ResourceGroupId = defaultGetResourceGroups.Apply(getResourceGroupsResult => getResourceGroupsResult.Ids[0]),
Tags =
{
{ "FinanceDept", "FinanceDeptJoshua" },
},
});
});
package main
import (
"fmt"
"github.com/pulumi/pulumi-alicloud/sdk/v3/go/alicloud"
"github.com/pulumi/pulumi-alicloud/sdk/v3/go/alicloud/ecs"
"github.com/pulumi/pulumi-alicloud/sdk/v3/go/alicloud/resourcemanager"
"github.com/pulumi/pulumi-alicloud/sdk/v3/go/alicloud/vpc"
"github.com/pulumi/pulumi-random/sdk/v4/go/random"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
_default, err := alicloud.GetZones(ctx, &alicloud.GetZonesArgs{
AvailableResourceCreation: pulumi.StringRef("Instance"),
}, nil)
if err != nil {
return err
}
defaultGetInstanceTypes, err := ecs.GetInstanceTypes(ctx, &ecs.GetInstanceTypesArgs{
InstanceTypeFamily: pulumi.StringRef("ecs.sn1ne"),
}, nil)
if err != nil {
return err
}
defaultGetImages, err := ecs.GetImages(ctx, &ecs.GetImagesArgs{
NameRegex: pulumi.StringRef("^ubuntu_18.*64"),
Owners: pulumi.StringRef("system"),
}, nil)
if err != nil {
return err
}
defaultNetwork, err := vpc.NewNetwork(ctx, "default", &vpc.NetworkArgs{
VpcName: pulumi.String("terraform-example"),
CidrBlock: pulumi.String("172.17.3.0/24"),
})
if err != nil {
return err
}
defaultSwitch, err := vpc.NewSwitch(ctx, "default", &vpc.SwitchArgs{
VswitchName: pulumi.String("terraform-example"),
CidrBlock: pulumi.String("172.17.3.0/24"),
VpcId: defaultNetwork.ID(),
ZoneId: pulumi.String(_default.Zones[0].Id),
})
if err != nil {
return err
}
defaultSecurityGroup, err := ecs.NewSecurityGroup(ctx, "default", &ecs.SecurityGroupArgs{
Name: pulumi.String("terraform-example"),
VpcId: defaultNetwork.ID(),
})
if err != nil {
return err
}
defaultInstance, err := ecs.NewInstance(ctx, "default", &ecs.InstanceArgs{
AvailabilityZone: pulumi.String(_default.Zones[0].Id),
InstanceName: pulumi.String("terraform-example"),
SecurityGroups: pulumi.StringArray{
defaultSecurityGroup.ID(),
},
VswitchId: defaultSwitch.ID(),
InstanceType: pulumi.String(defaultGetInstanceTypes.Ids[0]),
ImageId: pulumi.String(defaultGetImages.Ids[0]),
InternetMaxBandwidthOut: pulumi.Int(10),
})
if err != nil {
return err
}
defaultGetResourceGroups, err := resourcemanager.GetResourceGroups(ctx, &resourcemanager.GetResourceGroupsArgs{}, nil)
if err != nil {
return err
}
defaultInteger, err := random.NewInteger(ctx, "default", &random.IntegerArgs{
Min: 10000,
Max: 99999,
})
if err != nil {
return err
}
_, err = ecs.NewImage(ctx, "default", &ecs.ImageArgs{
InstanceId: defaultInstance.ID(),
ImageName: pulumi.Sprintf("terraform-example-%v", defaultInteger.Result),
Description: pulumi.String("terraform-example"),
Architecture: pulumi.String("x86_64"),
ResourceGroupId: pulumi.String(defaultGetResourceGroups.Ids[0]),
Tags: pulumi.StringMap{
"FinanceDept": pulumi.String("FinanceDeptJoshua"),
},
})
if err != nil {
return err
}
return nil
})
}
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.alicloud.AlicloudFunctions;
import com.pulumi.alicloud.inputs.GetZonesArgs;
import com.pulumi.alicloud.ecs.EcsFunctions;
import com.pulumi.alicloud.ecs.inputs.GetInstanceTypesArgs;
import com.pulumi.alicloud.ecs.inputs.GetImagesArgs;
import com.pulumi.alicloud.vpc.Network;
import com.pulumi.alicloud.vpc.NetworkArgs;
import com.pulumi.alicloud.vpc.Switch;
import com.pulumi.alicloud.vpc.SwitchArgs;
import com.pulumi.alicloud.ecs.SecurityGroup;
import com.pulumi.alicloud.ecs.SecurityGroupArgs;
import com.pulumi.alicloud.ecs.Instance;
import com.pulumi.alicloud.ecs.InstanceArgs;
import com.pulumi.alicloud.resourcemanager.ResourcemanagerFunctions;
import com.pulumi.alicloud.resourcemanager.inputs.GetResourceGroupsArgs;
import com.pulumi.random.integer;
import com.pulumi.random.integerArgs;
import com.pulumi.alicloud.ecs.Image;
import com.pulumi.alicloud.ecs.ImageArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
public class App {
public static void main(String[] args) {
Pulumi.run(App::stack);
}
public static void stack(Context ctx) {
final var default = AlicloudFunctions.getZones(GetZonesArgs.builder()
.availableResourceCreation("Instance")
.build());
final var defaultGetInstanceTypes = EcsFunctions.getInstanceTypes(GetInstanceTypesArgs.builder()
.instanceTypeFamily("ecs.sn1ne")
.build());
final var defaultGetImages = EcsFunctions.getImages(GetImagesArgs.builder()
.nameRegex("^ubuntu_18.*64")
.owners("system")
.build());
var defaultNetwork = new Network("defaultNetwork", NetworkArgs.builder()
.vpcName("terraform-example")
.cidrBlock("172.17.3.0/24")
.build());
var defaultSwitch = new Switch("defaultSwitch", SwitchArgs.builder()
.vswitchName("terraform-example")
.cidrBlock("172.17.3.0/24")
.vpcId(defaultNetwork.id())
.zoneId(default_.zones()[0].id())
.build());
var defaultSecurityGroup = new SecurityGroup("defaultSecurityGroup", SecurityGroupArgs.builder()
.name("terraform-example")
.vpcId(defaultNetwork.id())
.build());
var defaultInstance = new Instance("defaultInstance", InstanceArgs.builder()
.availabilityZone(default_.zones()[0].id())
.instanceName("terraform-example")
.securityGroups(defaultSecurityGroup.id())
.vswitchId(defaultSwitch.id())
.instanceType(defaultGetInstanceTypes.ids()[0])
.imageId(defaultGetImages.ids()[0])
.internetMaxBandwidthOut(10)
.build());
final var defaultGetResourceGroups = ResourcemanagerFunctions.getResourceGroups(GetResourceGroupsArgs.builder()
.build());
var defaultInteger = new Integer("defaultInteger", IntegerArgs.builder()
.min(10000)
.max(99999)
.build());
var defaultImage = new Image("defaultImage", ImageArgs.builder()
.instanceId(defaultInstance.id())
.imageName(String.format("terraform-example-%s", defaultInteger.result()))
.description("terraform-example")
.architecture("x86_64")
.resourceGroupId(defaultGetResourceGroups.ids()[0])
.tags(Map.of("FinanceDept", "FinanceDeptJoshua"))
.build());
}
}
resources:
defaultNetwork:
type: alicloud:vpc:Network
name: default
properties:
vpcName: terraform-example
cidrBlock: 172.17.3.0/24
defaultSwitch:
type: alicloud:vpc:Switch
name: default
properties:
vswitchName: terraform-example
cidrBlock: 172.17.3.0/24
vpcId: ${defaultNetwork.id}
zoneId: ${default.zones[0].id}
defaultSecurityGroup:
type: alicloud:ecs:SecurityGroup
name: default
properties:
name: terraform-example
vpcId: ${defaultNetwork.id}
defaultInstance:
type: alicloud:ecs:Instance
name: default
properties:
availabilityZone: ${default.zones[0].id}
instanceName: terraform-example
securityGroups:
- ${defaultSecurityGroup.id}
vswitchId: ${defaultSwitch.id}
instanceType: ${defaultGetInstanceTypes.ids[0]}
imageId: ${defaultGetImages.ids[0]}
internetMaxBandwidthOut: 10
defaultInteger:
type: random:integer
name: default
properties:
min: 10000
max: 99999
defaultImage:
type: alicloud:ecs:Image
name: default
properties:
instanceId: ${defaultInstance.id}
imageName: terraform-example-${defaultInteger.result}
description: terraform-example
architecture: x86_64
resourceGroupId: ${defaultGetResourceGroups.ids[0]}
tags:
FinanceDept: FinanceDeptJoshua
variables:
default:
fn::invoke:
function: alicloud:getZones
arguments:
availableResourceCreation: Instance
defaultGetInstanceTypes:
fn::invoke:
function: alicloud:ecs:getInstanceTypes
arguments:
instanceTypeFamily: ecs.sn1ne
defaultGetImages:
fn::invoke:
function: alicloud:ecs:getImages
arguments:
nameRegex: ^ubuntu_18.*64
owners: system
defaultGetResourceGroups:
fn::invoke:
function: alicloud:resourcemanager:getResourceGroups
arguments: {}

Import

ECS Image can be imported using the id, e.g.

$ pulumi import alicloud:ecs/image:Image example <id>

Constructors

Link copied to clipboard
constructor(architecture: Output<String>? = null, bootMode: Output<String>? = null, deleteAutoSnapshot: Output<Boolean>? = null, description: Output<String>? = null, detectionStrategy: Output<String>? = null, diskDeviceMappings: Output<List<ImageDiskDeviceMappingArgs>>? = null, features: Output<ImageFeaturesArgs>? = null, force: Output<Boolean>? = null, imageFamily: Output<String>? = null, imageName: Output<String>? = null, imageVersion: Output<String>? = null, instanceId: Output<String>? = null, licenseType: Output<String>? = null, name: Output<String>? = null, platform: Output<String>? = null, resourceGroupId: Output<String>? = null, snapshotId: Output<String>? = null, tags: Output<Map<String, String>>? = null)

Properties

Link copied to clipboard
val architecture: Output<String>? = null

The system architecture of the system disk. If you specify a data disk snapshot to create the system disk of the custom image, you must use Architecture to specify the system architecture of the system disk. Valid values: i386, x86\_64, arm64. Default value: x86\_64.

Link copied to clipboard
val bootMode: Output<String>? = null

The new boot mode of the image. Valid values:

Link copied to clipboard
val deleteAutoSnapshot: Output<Boolean>? = null

Not the public attribute and it used to automatically delete dependence snapshots while deleting the image.

Link copied to clipboard
val description: Output<String>? = null

The new description of the custom image. The description must be 2 to 256 characters in length It cannot start with http:// or https://. This parameter is empty by default, which specifies that the original description is retained.

Link copied to clipboard
val detectionStrategy: Output<String>? = null

The mode in which to check the custom image. If you do not specify this parameter, the image is not checked. Only the standard check mode is supported.

Link copied to clipboard

Snapshot information for the image See disk_device_mapping below.

Link copied to clipboard
val features: Output<ImageFeaturesArgs>? = null

Features See features below.

Link copied to clipboard
val force: Output<Boolean>? = null

Whether to perform forced deletion. Value range:

Link copied to clipboard
val imageFamily: Output<String>? = null

The name of the image family. The name must be 2 to 128 characters in length. It must start with a letter and cannot start with acs: or aliyun. It cannot contain http:// or https://. It can contain letters, digits, periods (.), colons (:), underscores (\_), and hyphens (-). By default, this parameter is empty.

Link copied to clipboard
val imageName: Output<String>? = null

The name of the custom image. The name must be 2 to 128 characters in length. It must start with a letter and cannot start with acs: or aliyun. It cannot contain http:// or https://. It can contain letters, digits, periods (.), colons (:), underscores (\_), and hyphens (-). By default, this parameter is empty. In this case, the original name is retained.

Link copied to clipboard
val imageVersion: Output<String>? = null

The image version.

Link copied to clipboard
val instanceId: Output<String>? = null

The instance ID.

Link copied to clipboard
val licenseType: Output<String>? = null

The type of the license that is used to activate the operating system after the image is imported. Set the value to BYOL. BYOL: The license that comes with the source operating system is used. When you use the BYOL license, make sure that your license key is supported by Alibaba Cloud.

Link copied to clipboard
val name: Output<String>? = null

. Field 'name' has been deprecated from provider version 1.227.0. New field 'image_name' instead.

Link copied to clipboard
val platform: Output<String>? = null

The operating system distribution for the system disk in the custom image. If you specify a data disk snapshot to create the system disk of the custom image, use Platform to specify the operating system distribution for the system disk. Valid values: Aliyun, Anolis, CentOS, Ubuntu, CoreOS, SUSE, Debian, OpenSUSE, FreeBSD, RedHat, Kylin, UOS, Fedora, Fedora CoreOS, CentOS Stream, AlmaLinux, Rocky Linux, Gentoo, Customized Linux, Others Linux, Windows Server 2022, Windows Server 2019, Windows Server 2016, Windows Server 2012, Windows Server 2008, Windows Server 2003. Default value: Others Linux.

Link copied to clipboard
val resourceGroupId: Output<String>? = null

The ID of the resource group to which to assign the custom image. If you do not specify this parameter, the image is assigned to the default resource group.

Link copied to clipboard
val snapshotId: Output<String>? = null

The ID of the snapshot that you want to use to create the custom image.

Link copied to clipboard
val tags: Output<Map<String, String>>? = null

The tag The following arguments will be discarded. Please use new fields as soon as possible:

Functions

Link copied to clipboard
open override fun toJava(): ImageArgs