1. Packages
  2. AWS
  3. API Docs
  4. ecr
  5. LifecyclePolicy
AWS v6.54.0 published on Friday, Sep 27, 2024 by Pulumi

aws.ecr.LifecyclePolicy

Explore with Pulumi AI

aws logo
AWS v6.54.0 published on Friday, Sep 27, 2024 by Pulumi

    Manages an ECR repository lifecycle policy.

    NOTE: Only one aws.ecr.LifecyclePolicy resource can be used with the same ECR repository. To apply multiple rules, they must be combined in the policy JSON.

    NOTE: The AWS ECR API seems to reorder rules based on rulePriority. If you define multiple rules that are not sorted in ascending rulePriority order in the this provider code, the resource will be flagged for recreation every deployment.

    Example Usage

    Policy on untagged image

    import * as pulumi from "@pulumi/pulumi";
    import * as aws from "@pulumi/aws";
    
    const example = new aws.ecr.Repository("example", {name: "example-repo"});
    const exampleLifecyclePolicy = new aws.ecr.LifecyclePolicy("example", {
        repository: example.name,
        policy: `{
        "rules": [
            {
                "rulePriority": 1,
                "description": "Expire images older than 14 days",
                "selection": {
                    "tagStatus": "untagged",
                    "countType": "sinceImagePushed",
                    "countUnit": "days",
                    "countNumber": 14
                },
                "action": {
                    "type": "expire"
                }
            }
        ]
    }
    `,
    });
    
    import pulumi
    import pulumi_aws as aws
    
    example = aws.ecr.Repository("example", name="example-repo")
    example_lifecycle_policy = aws.ecr.LifecyclePolicy("example",
        repository=example.name,
        policy="""{
        "rules": [
            {
                "rulePriority": 1,
                "description": "Expire images older than 14 days",
                "selection": {
                    "tagStatus": "untagged",
                    "countType": "sinceImagePushed",
                    "countUnit": "days",
                    "countNumber": 14
                },
                "action": {
                    "type": "expire"
                }
            }
        ]
    }
    """)
    
    package main
    
    import (
    	"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/ecr"
    	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
    )
    
    func main() {
    	pulumi.Run(func(ctx *pulumi.Context) error {
    		example, err := ecr.NewRepository(ctx, "example", &ecr.RepositoryArgs{
    			Name: pulumi.String("example-repo"),
    		})
    		if err != nil {
    			return err
    		}
    		_, err = ecr.NewLifecyclePolicy(ctx, "example", &ecr.LifecyclePolicyArgs{
    			Repository: example.Name,
    			Policy: pulumi.Any(`{
        "rules": [
            {
                "rulePriority": 1,
                "description": "Expire images older than 14 days",
                "selection": {
                    "tagStatus": "untagged",
                    "countType": "sinceImagePushed",
                    "countUnit": "days",
                    "countNumber": 14
                },
                "action": {
                    "type": "expire"
                }
            }
        ]
    }
    `),
    		})
    		if err != nil {
    			return err
    		}
    		return nil
    	})
    }
    
    using System.Collections.Generic;
    using System.Linq;
    using Pulumi;
    using Aws = Pulumi.Aws;
    
    return await Deployment.RunAsync(() => 
    {
        var example = new Aws.Ecr.Repository("example", new()
        {
            Name = "example-repo",
        });
    
        var exampleLifecyclePolicy = new Aws.Ecr.LifecyclePolicy("example", new()
        {
            Repository = example.Name,
            Policy = @"{
        ""rules"": [
            {
                ""rulePriority"": 1,
                ""description"": ""Expire images older than 14 days"",
                ""selection"": {
                    ""tagStatus"": ""untagged"",
                    ""countType"": ""sinceImagePushed"",
                    ""countUnit"": ""days"",
                    ""countNumber"": 14
                },
                ""action"": {
                    ""type"": ""expire""
                }
            }
        ]
    }
    ",
        });
    
    });
    
    package generated_program;
    
    import com.pulumi.Context;
    import com.pulumi.Pulumi;
    import com.pulumi.core.Output;
    import com.pulumi.aws.ecr.Repository;
    import com.pulumi.aws.ecr.RepositoryArgs;
    import com.pulumi.aws.ecr.LifecyclePolicy;
    import com.pulumi.aws.ecr.LifecyclePolicyArgs;
    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) {
            var example = new Repository("example", RepositoryArgs.builder()
                .name("example-repo")
                .build());
    
            var exampleLifecyclePolicy = new LifecyclePolicy("exampleLifecyclePolicy", LifecyclePolicyArgs.builder()
                .repository(example.name())
                .policy("""
    {
        "rules": [
            {
                "rulePriority": 1,
                "description": "Expire images older than 14 days",
                "selection": {
                    "tagStatus": "untagged",
                    "countType": "sinceImagePushed",
                    "countUnit": "days",
                    "countNumber": 14
                },
                "action": {
                    "type": "expire"
                }
            }
        ]
    }
                """)
                .build());
    
        }
    }
    
    resources:
      example:
        type: aws:ecr:Repository
        properties:
          name: example-repo
      exampleLifecyclePolicy:
        type: aws:ecr:LifecyclePolicy
        name: example
        properties:
          repository: ${example.name}
          policy: |
            {
                "rules": [
                    {
                        "rulePriority": 1,
                        "description": "Expire images older than 14 days",
                        "selection": {
                            "tagStatus": "untagged",
                            "countType": "sinceImagePushed",
                            "countUnit": "days",
                            "countNumber": 14
                        },
                        "action": {
                            "type": "expire"
                        }
                    }
                ]
            }        
    

    Policy on tagged image

    import * as pulumi from "@pulumi/pulumi";
    import * as aws from "@pulumi/aws";
    
    const example = new aws.ecr.Repository("example", {name: "example-repo"});
    const exampleLifecyclePolicy = new aws.ecr.LifecyclePolicy("example", {
        repository: example.name,
        policy: `{
        "rules": [
            {
                "rulePriority": 1,
                "description": "Keep last 30 images",
                "selection": {
                    "tagStatus": "tagged",
                    "tagPrefixList": ["v"],
                    "countType": "imageCountMoreThan",
                    "countNumber": 30
                },
                "action": {
                    "type": "expire"
                }
            }
        ]
    }
    `,
    });
    
    import pulumi
    import pulumi_aws as aws
    
    example = aws.ecr.Repository("example", name="example-repo")
    example_lifecycle_policy = aws.ecr.LifecyclePolicy("example",
        repository=example.name,
        policy="""{
        "rules": [
            {
                "rulePriority": 1,
                "description": "Keep last 30 images",
                "selection": {
                    "tagStatus": "tagged",
                    "tagPrefixList": ["v"],
                    "countType": "imageCountMoreThan",
                    "countNumber": 30
                },
                "action": {
                    "type": "expire"
                }
            }
        ]
    }
    """)
    
    package main
    
    import (
    	"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/ecr"
    	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
    )
    
    func main() {
    	pulumi.Run(func(ctx *pulumi.Context) error {
    		example, err := ecr.NewRepository(ctx, "example", &ecr.RepositoryArgs{
    			Name: pulumi.String("example-repo"),
    		})
    		if err != nil {
    			return err
    		}
    		_, err = ecr.NewLifecyclePolicy(ctx, "example", &ecr.LifecyclePolicyArgs{
    			Repository: example.Name,
    			Policy: pulumi.Any(`{
        "rules": [
            {
                "rulePriority": 1,
                "description": "Keep last 30 images",
                "selection": {
                    "tagStatus": "tagged",
                    "tagPrefixList": ["v"],
                    "countType": "imageCountMoreThan",
                    "countNumber": 30
                },
                "action": {
                    "type": "expire"
                }
            }
        ]
    }
    `),
    		})
    		if err != nil {
    			return err
    		}
    		return nil
    	})
    }
    
    using System.Collections.Generic;
    using System.Linq;
    using Pulumi;
    using Aws = Pulumi.Aws;
    
    return await Deployment.RunAsync(() => 
    {
        var example = new Aws.Ecr.Repository("example", new()
        {
            Name = "example-repo",
        });
    
        var exampleLifecyclePolicy = new Aws.Ecr.LifecyclePolicy("example", new()
        {
            Repository = example.Name,
            Policy = @"{
        ""rules"": [
            {
                ""rulePriority"": 1,
                ""description"": ""Keep last 30 images"",
                ""selection"": {
                    ""tagStatus"": ""tagged"",
                    ""tagPrefixList"": [""v""],
                    ""countType"": ""imageCountMoreThan"",
                    ""countNumber"": 30
                },
                ""action"": {
                    ""type"": ""expire""
                }
            }
        ]
    }
    ",
        });
    
    });
    
    package generated_program;
    
    import com.pulumi.Context;
    import com.pulumi.Pulumi;
    import com.pulumi.core.Output;
    import com.pulumi.aws.ecr.Repository;
    import com.pulumi.aws.ecr.RepositoryArgs;
    import com.pulumi.aws.ecr.LifecyclePolicy;
    import com.pulumi.aws.ecr.LifecyclePolicyArgs;
    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) {
            var example = new Repository("example", RepositoryArgs.builder()
                .name("example-repo")
                .build());
    
            var exampleLifecyclePolicy = new LifecyclePolicy("exampleLifecyclePolicy", LifecyclePolicyArgs.builder()
                .repository(example.name())
                .policy("""
    {
        "rules": [
            {
                "rulePriority": 1,
                "description": "Keep last 30 images",
                "selection": {
                    "tagStatus": "tagged",
                    "tagPrefixList": ["v"],
                    "countType": "imageCountMoreThan",
                    "countNumber": 30
                },
                "action": {
                    "type": "expire"
                }
            }
        ]
    }
                """)
                .build());
    
        }
    }
    
    resources:
      example:
        type: aws:ecr:Repository
        properties:
          name: example-repo
      exampleLifecyclePolicy:
        type: aws:ecr:LifecyclePolicy
        name: example
        properties:
          repository: ${example.name}
          policy: |
            {
                "rules": [
                    {
                        "rulePriority": 1,
                        "description": "Keep last 30 images",
                        "selection": {
                            "tagStatus": "tagged",
                            "tagPrefixList": ["v"],
                            "countType": "imageCountMoreThan",
                            "countNumber": 30
                        },
                        "action": {
                            "type": "expire"
                        }
                    }
                ]
            }        
    

    Create LifecyclePolicy Resource

    Resources are created with functions called constructors. To learn more about declaring and configuring resources, see Resources.

    Constructor syntax

    new LifecyclePolicy(name: string, args: LifecyclePolicyArgs, opts?: CustomResourceOptions);
    @overload
    def LifecyclePolicy(resource_name: str,
                        args: LifecyclePolicyArgs,
                        opts: Optional[ResourceOptions] = None)
    
    @overload
    def LifecyclePolicy(resource_name: str,
                        opts: Optional[ResourceOptions] = None,
                        policy: Optional[str] = None,
                        repository: Optional[str] = None)
    func NewLifecyclePolicy(ctx *Context, name string, args LifecyclePolicyArgs, opts ...ResourceOption) (*LifecyclePolicy, error)
    public LifecyclePolicy(string name, LifecyclePolicyArgs args, CustomResourceOptions? opts = null)
    public LifecyclePolicy(String name, LifecyclePolicyArgs args)
    public LifecyclePolicy(String name, LifecyclePolicyArgs args, CustomResourceOptions options)
    
    type: aws:ecr:LifecyclePolicy
    properties: # The arguments to resource properties.
    options: # Bag of options to control resource's behavior.
    
    

    Parameters

    name string
    The unique name of the resource.
    args LifecyclePolicyArgs
    The arguments to resource properties.
    opts CustomResourceOptions
    Bag of options to control resource's behavior.
    resource_name str
    The unique name of the resource.
    args LifecyclePolicyArgs
    The arguments to resource properties.
    opts ResourceOptions
    Bag of options to control resource's behavior.
    ctx Context
    Context object for the current deployment.
    name string
    The unique name of the resource.
    args LifecyclePolicyArgs
    The arguments to resource properties.
    opts ResourceOption
    Bag of options to control resource's behavior.
    name string
    The unique name of the resource.
    args LifecyclePolicyArgs
    The arguments to resource properties.
    opts CustomResourceOptions
    Bag of options to control resource's behavior.
    name String
    The unique name of the resource.
    args LifecyclePolicyArgs
    The arguments to resource properties.
    options CustomResourceOptions
    Bag of options to control resource's behavior.

    Constructor example

    The following reference example uses placeholder values for all input properties.

    var awsLifecyclePolicyResource = new Aws.Ecr.LifecyclePolicy("awsLifecyclePolicyResource", new()
    {
        Policy = "string",
        Repository = "string",
    });
    
    example, err := ecr.NewLifecyclePolicy(ctx, "awsLifecyclePolicyResource", &ecr.LifecyclePolicyArgs{
    	Policy:     pulumi.Any("string"),
    	Repository: pulumi.String("string"),
    })
    
    var awsLifecyclePolicyResource = new LifecyclePolicy("awsLifecyclePolicyResource", LifecyclePolicyArgs.builder()
        .policy("string")
        .repository("string")
        .build());
    
    aws_lifecycle_policy_resource = aws.ecr.LifecyclePolicy("awsLifecyclePolicyResource",
        policy="string",
        repository="string")
    
    const awsLifecyclePolicyResource = new aws.ecr.LifecyclePolicy("awsLifecyclePolicyResource", {
        policy: "string",
        repository: "string",
    });
    
    type: aws:ecr:LifecyclePolicy
    properties:
        policy: string
        repository: string
    

    LifecyclePolicy Resource Properties

    To learn more about resource properties and how to use them, see Inputs and Outputs in the Architecture and Concepts docs.

    Inputs

    The LifecyclePolicy resource accepts the following input properties:

    Policy string | string
    The policy document. This is a JSON formatted string. See more details about Policy Parameters in the official AWS docs. Consider using the aws.ecr.getLifecyclePolicyDocument data_source to generate/manage the JSON document used for the policy argument.
    Repository string
    Name of the repository to apply the policy.
    Policy string | string
    The policy document. This is a JSON formatted string. See more details about Policy Parameters in the official AWS docs. Consider using the aws.ecr.getLifecyclePolicyDocument data_source to generate/manage the JSON document used for the policy argument.
    Repository string
    Name of the repository to apply the policy.
    policy String | String
    The policy document. This is a JSON formatted string. See more details about Policy Parameters in the official AWS docs. Consider using the aws.ecr.getLifecyclePolicyDocument data_source to generate/manage the JSON document used for the policy argument.
    repository String
    Name of the repository to apply the policy.
    policy string | LifecyclePolicyDocument
    The policy document. This is a JSON formatted string. See more details about Policy Parameters in the official AWS docs. Consider using the aws.ecr.getLifecyclePolicyDocument data_source to generate/manage the JSON document used for the policy argument.
    repository string
    Name of the repository to apply the policy.
    policy str | str
    The policy document. This is a JSON formatted string. See more details about Policy Parameters in the official AWS docs. Consider using the aws.ecr.getLifecyclePolicyDocument data_source to generate/manage the JSON document used for the policy argument.
    repository str
    Name of the repository to apply the policy.
    policy String |
    The policy document. This is a JSON formatted string. See more details about Policy Parameters in the official AWS docs. Consider using the aws.ecr.getLifecyclePolicyDocument data_source to generate/manage the JSON document used for the policy argument.
    repository String
    Name of the repository to apply the policy.

    Outputs

    All input properties are implicitly available as output properties. Additionally, the LifecyclePolicy resource produces the following output properties:

    Id string
    The provider-assigned unique ID for this managed resource.
    RegistryId string
    The registry ID where the repository was created.
    Id string
    The provider-assigned unique ID for this managed resource.
    RegistryId string
    The registry ID where the repository was created.
    id String
    The provider-assigned unique ID for this managed resource.
    registryId String
    The registry ID where the repository was created.
    id string
    The provider-assigned unique ID for this managed resource.
    registryId string
    The registry ID where the repository was created.
    id str
    The provider-assigned unique ID for this managed resource.
    registry_id str
    The registry ID where the repository was created.
    id String
    The provider-assigned unique ID for this managed resource.
    registryId String
    The registry ID where the repository was created.

    Look up Existing LifecyclePolicy Resource

    Get an existing LifecyclePolicy resource’s state with the given name, ID, and optional extra properties used to qualify the lookup.

    public static get(name: string, id: Input<ID>, state?: LifecyclePolicyState, opts?: CustomResourceOptions): LifecyclePolicy
    @staticmethod
    def get(resource_name: str,
            id: str,
            opts: Optional[ResourceOptions] = None,
            policy: Optional[str] = None,
            registry_id: Optional[str] = None,
            repository: Optional[str] = None) -> LifecyclePolicy
    func GetLifecyclePolicy(ctx *Context, name string, id IDInput, state *LifecyclePolicyState, opts ...ResourceOption) (*LifecyclePolicy, error)
    public static LifecyclePolicy Get(string name, Input<string> id, LifecyclePolicyState? state, CustomResourceOptions? opts = null)
    public static LifecyclePolicy get(String name, Output<String> id, LifecyclePolicyState state, CustomResourceOptions options)
    Resource lookup is not supported in YAML
    name
    The unique name of the resulting resource.
    id
    The unique provider ID of the resource to lookup.
    state
    Any extra arguments used during the lookup.
    opts
    A bag of options that control this resource's behavior.
    resource_name
    The unique name of the resulting resource.
    id
    The unique provider ID of the resource to lookup.
    name
    The unique name of the resulting resource.
    id
    The unique provider ID of the resource to lookup.
    state
    Any extra arguments used during the lookup.
    opts
    A bag of options that control this resource's behavior.
    name
    The unique name of the resulting resource.
    id
    The unique provider ID of the resource to lookup.
    state
    Any extra arguments used during the lookup.
    opts
    A bag of options that control this resource's behavior.
    name
    The unique name of the resulting resource.
    id
    The unique provider ID of the resource to lookup.
    state
    Any extra arguments used during the lookup.
    opts
    A bag of options that control this resource's behavior.
    The following state arguments are supported:
    Policy string | string
    The policy document. This is a JSON formatted string. See more details about Policy Parameters in the official AWS docs. Consider using the aws.ecr.getLifecyclePolicyDocument data_source to generate/manage the JSON document used for the policy argument.
    RegistryId string
    The registry ID where the repository was created.
    Repository string
    Name of the repository to apply the policy.
    Policy string | string
    The policy document. This is a JSON formatted string. See more details about Policy Parameters in the official AWS docs. Consider using the aws.ecr.getLifecyclePolicyDocument data_source to generate/manage the JSON document used for the policy argument.
    RegistryId string
    The registry ID where the repository was created.
    Repository string
    Name of the repository to apply the policy.
    policy String | String
    The policy document. This is a JSON formatted string. See more details about Policy Parameters in the official AWS docs. Consider using the aws.ecr.getLifecyclePolicyDocument data_source to generate/manage the JSON document used for the policy argument.
    registryId String
    The registry ID where the repository was created.
    repository String
    Name of the repository to apply the policy.
    policy string | LifecyclePolicyDocument
    The policy document. This is a JSON formatted string. See more details about Policy Parameters in the official AWS docs. Consider using the aws.ecr.getLifecyclePolicyDocument data_source to generate/manage the JSON document used for the policy argument.
    registryId string
    The registry ID where the repository was created.
    repository string
    Name of the repository to apply the policy.
    policy str | str
    The policy document. This is a JSON formatted string. See more details about Policy Parameters in the official AWS docs. Consider using the aws.ecr.getLifecyclePolicyDocument data_source to generate/manage the JSON document used for the policy argument.
    registry_id str
    The registry ID where the repository was created.
    repository str
    Name of the repository to apply the policy.
    policy String |
    The policy document. This is a JSON formatted string. See more details about Policy Parameters in the official AWS docs. Consider using the aws.ecr.getLifecyclePolicyDocument data_source to generate/manage the JSON document used for the policy argument.
    registryId String
    The registry ID where the repository was created.
    repository String
    Name of the repository to apply the policy.

    Import

    Using pulumi import, import ECR Lifecycle Policy using the name of the repository. For example:

    $ pulumi import aws:ecr/lifecyclePolicy:LifecyclePolicy example tf-example
    

    To learn more about importing existing cloud resources, see Importing resources.

    Package Details

    Repository
    AWS Classic pulumi/pulumi-aws
    License
    Apache-2.0
    Notes
    This Pulumi package is based on the aws Terraform Provider.
    aws logo
    AWS v6.54.0 published on Friday, Sep 27, 2024 by Pulumi