Skip to content

Releases: aws/copilot-cli

copilot-cli: Release v1.30.0

30 Aug 20:56
7dcd301
Compare
Choose a tag to compare

⚡️ Features and Enhancements

  • copilot run local to run your services locally (#5049, #5201, #5182)

    You can use copilot run local to test Copilot services on your local machine! To get started, deploy your service
    with copilot svc deploy. Once your service is deployed, you can test changes to your code without waiting for a deployment by running copilot run local. Copilot will build or pull your service's images, inject secrets and environment variables defined in your manifest, grab your current IAM session credentials, and run Docker containers on your machine with that data.
    See the blogpost for more info.

  • Pipeline Pre- and Post-Deployment Actions (#5209, #5109)

    In pipelines, you can now use pre_deployments and post_deployments to define actions for your pipeline to run before or after your services or environments are deployed. This is helpful for running database migrations from within your pipeline!

  • Use Ctrl-C to roll back in-progress deployments (#5213)

    While waiting for copilot [noun] deploy to finish, if you hit Ctrl-C, Copilot will roll back the current CloudFormation deployment. This is especially helpful if your Service is failing and you're stuck waiting for a CloudFormation deployment to fail!

  • copilot deploy to init-alize and deploy services and environments (#5168, #5215)

    You can now use copilot deploy to deploy environments and initialize services and environments with local manifests. The guided workflow now includes uninitialized local workloads and environments. Getting started with Copilot is now as easy as git clone . && copilot deploy!

  • Update exit code of copilot [noun] deploy to 0 if there are no changes (#5179)
  • Support from_cfn for importing an EFS ID (#5156)
  • Set default Static Site alias if app has an imported domain (#5191)
  • Fall back to default credentials if no AWS config is present on copilot env init (#5202)

🐛 Bug Fixes

  • Skip interpolating arrays of strings for nodes with a literal style (#5157)
  • Better output when building a single image (#5148)
  • Fix initializing jobs with copilot deploy (#5183)
  • Empty Copilot-created S3 bucket for ALB Access Logs on copilot env delete (#5184)
  • Fix searching for a cluster with the same name as a recently deleted cluster (#5204)
  • Skip http validation if it's disabled (#5198)
  • Block deleting an environment if it's currently used in a pipeline (#5246)

copilot-cli: Release v1.29.1

02 Aug 18:13
123b8af
Compare
Choose a tag to compare

🐛 Bug Fixes

  • Filter out non-active ECS services (#5152)

    The GetResources API for ECS recently changed to return non-active ECS services, causing an error when running Copilot commands after recently recreating a service. Copilot now validates that the service ARNs returned by GetResources are active.

  • Prevent app upgrade followed by downgrade from removing ECR Repos (#5141)

    Copilot apps upgraded to v1.28 or v1.29 and subsequently downgraded to versions prior were running into an issue where ECR repos were getting removed from the app stack. After this fix, upgrading your app with v1.29.1+ and then downgrading will cause the older Copilot version to print out an error instead of removing any ECR repos.

  • Explicitly block S3 public access (#5141)

    Though objects uploaded to Copilot-created S3 buckets have never been public, Copilot-created S3 buckets now explicitly block public access at the bucket level.

  • Fix copilot init when app name is not set via flags (#5126)

  • Validate sidecar image configuration (#5122)

copilot-cli: Release v1.29.0

19 Jul 19:31
55dba4d
Compare
Choose a tag to compare

⚡️ Features and Enhancements

  • Pipeline CloudFormation template overrides (#5034)

    Copilot pipelines are much more nimble and extensible with CDK and YAML path overrides with copilot pipeline override! This feature provides a safe and easy way to modify your pipeline's CloudFormation template.
    A new --diff flag for copilot pipeline deploy enables you to preview changes to your CloudFormation template. (#4991)
    See the blogpost for more.

  • Static Site enhancements
    • For more dynamic development, Copilot will now invalidate the CloudFront edge cache each time you redeploy a Static Site workload, enabling you to see and deliver your updated content right away. (#5035)
    • copilot svc show for Static Site workloads includes a tree representation of your S3 bucket's contents. (#4966)
    View sample output
    Service name: static-site
    About
    
      Application  my-app
      Name         static-site
      Type         Static Site
    
    Routes
    
      Environment  URL
      -----------  ---
      test         https://d399t9j1xbplme.cloudfront.net/
    
    S3 Bucket Objects
    
      Environment  test
    .
    ├── ReadMe.md
    ├── error.html
    ├── index.html
    ├── Images
    │   ├── SomeImage.PNG
    │   └── AnotherImage.PNG
    ├── css
    │   ├── Style.css
    │   ├── all.min.css
    │   └── bootstrap.min.css
    └── images
        └── bg-masthead.jpg
    • copilot svc status for Static Site workloads includes the S3 bucket's object count and total size. (#4985)
  • Prevent clashes between Copilot versions by disallowing downgrading (unless explicitly enabled with the new --allow-downgrade flag for init, deploy, and package commands) (#5064)
  • Support Yarn for CDK overrides (#5076)
  • Enable interpolation of lists of strings in Copilot manifests (#4993)
  • Allow passing an existing permissions boundary's ARN when running copilot app init (as an alternative to the permissions boundary name (#4981)
  • Recommend splitting domains/conditions into different listener rules if the quota (five per rule) is detected. (#4961)

🐛 Bug Fixes


  • copilot svc package now applies overrides for Static Site workload types (#4952)
  • prevent exceeding CloudWatch Logs Resource Policy size when running copilot job logs by adding policies to each environment (#4979)
  • Static Site CloudFormation manifests quote aliases so asterisks render properly in CloudFormation templates (#5003)
  • Distinguish between active and non-active ECS clusters to avoid clashes (#5062)

❤️ Contributions

Thank you, contributors 🥰!

copilot-cli: Release v1.28.0

25 May 16:53
88a2478
Compare
Choose a tag to compare

⚡️ Features and Enhancements

  • Static Site service type (#4621)

With the new Static Site service type, you can now deploy and host static websites with Amazon S3. You can specify local files to be uploaded to an S3 bucket with the Static Site service manifest.

name: example
type: Static Site
http:
  alias: 'example.com'
files:
  - source: src/someDirectory
    recursive: true
  - source: someFile.html

To learn more on how to deploy your static website using the Static Site service, see the manifest specification.
For the announcement, check out the blog post.

  • Add --diff-yes flag to copilot [noun] deploy(#4832)

Copilot [noun] deploy now has the new flag --diff-yes; you can specify the flag to automatically print the difference between your local changes and the latest deployed template.

  • Container Images Parallel Build (#4760)

Previously, Copilot built and pushed main container and sidecar container images sequentially.
You can now build main container and sidecar container images in parallel. With parallel build, you can reduce the
overall time it takes to build and push container images to Amazon ECR.

🐛 Bug Fixes


  • Use LogicalID-safe name for sidecars env file parameter from the CloudFormation template (#4714)
  • Remove CloudWatch alarm-based rollbacks from ECS services in the GovCloud region (#4782)
  • Remove Docker runtime version from the buildspec in the pipeline CloudFormation template (#4723)
  • Keep parameter descriptions consistent across environment addons in the CloudFormation template (#4813)
  • Add Darwin ARM binary for Session Manager plugin installation (#4916)
  • Do not require a workspace summary when running copilot app delete (#4863)
  • Update custom domain records in parallel to fix the CustomDomainFunction lambda timeout (#4772).
  • Fix file not found error for CDK override ON Windows (#4807)
  • Use a more portable CDK executable for CDK overrides (#4808)
  • Separate out grace_period for ALB and NLB (#4734)
  • Separate out deregistration_delay for ALB and NLB (#4740)

❤️ Contributions

Thank you, contributors 🥰!

copilot-cli: Release v1.27.0

28 Mar 16:34
e1f8f53
Compare
Choose a tag to compare

⚡️ Features and Enhancements

  • Extend Copilot-generated CloudFormation templates with the Cloud Development Kit (CDK) or YAML Patch overrides (#4208, #4209)

    With the new copilot [noun] override command, you can now fully customize your environment, service, or job AWS CloudFormation templates generated from Copilot manifests.
    You can override templates using the CDK when you need the expressive power and safety of a programming language, alternatively you can apply YAML patches when you need only a handful modifications.

    To learn more about how to use overrides, checkout the CDK guide or the YAML patch guide.
    For the announcement, check out the blog post.

  • Add support for multiple listener rules for http and listeners for nlb for Load Balanced Web and Backend Services (#4170)

    You can now define multiple host-based or path listener rules for Application Load Balancers with the new http.additional_rules property. Similarly, you can define multiple listeners on different ports and protocols for Network Load Balancers with the nlb.additional_listeners field.

    Sample manifest file
    name: 'frontend'
    type: 'Load Balanced Web Service'
    
    image:
      build: 'path/to/Dockerfile'
      port: 8080
    
    sidecars:
       docs:
          port: 7000
          build: 'path/to/Dockerfile'
    
    http:
      alias: 'example.com'
      path: '/'
      additional_rules:
        -  alias: 'admin.example.com'
           path: '/'
           target_port: 9000
        -  path: '/docs'
           target_container: docs

    To learn more on how to add additional listeners and listener rules, see the manifest specification.
    For the announcement, check out the blog post.

  • Preview CloudFormation template changes with the new --diff flag (#4259)

    You can now run copilot [noun] package --diff or copilot [noun] deploy --diff to view the difference between your local changes and the latest deployed template.

    View sample screenshot

    diff

    For the announcement, check out the blog post.

  • Enable building container images for sidecars (#4254)

    Previously, Copilot only supported taking a container image URL for sidecar containers. Now, you can use image.build for your sidecars just like your main container to build and push images from local Dockerfiles.

    To learn more see the guide for sidecar containers.
    For the announcement, check out the blog post.

  • Enable uploading local environment files for sidecar containers (#4447)

    Previously, you could only specify an environment file (env_file) for your main container. You can now specify an environment file to upload for any sidecar container.
    To learn more see the guide for sidecar containers.
    For the announcement, check out the blog post.

🐛 Bug Fixes

  • Removing CloudWatch alarm based rollbacks from ECS services now disassociates the alarms (#4565)
  • Remove !Sub in environment storage addons causing the addon deployment failure (#4562)

copilot-cli: Release v1.26.0

21 Feb 22:50
3c212fb
Compare
Choose a tag to compare

⚡️ Features and Enhancements

  • Add support for automating rollbacks for Amazon ECS services with CloudWatch alarms

    You can now monitor your ECS deployments with custom CloudWatch alarms! Configure your services to roll back to the last completed deployment if your alarms go into In alarm state during deployment. With the circuit breaker, Copilot has already been rolling back your failed deployments. Now, you can also roll back service deployments that aren't failing, but aren't performing in accordance with the metrics of your choice.

    For example, in your backend, worker, or load-balanced web service manifest, you may import your own existing CloudWatch alarms:

    deployment:
      rollback_alarms: ["MyAlarm-ELB-4xx", "MyAlarm-ELB-5xx"]

    Or have Copilot create a CPU and/or memory utilization alarm for you, with thresholds of your choice:

    deployment:
      rollback_alarms:
        cpu_utilization: 70    // Percentage value at or above which alarm is triggered.
        memory_utilization: 50 // Percentage value at or above which alarm is triggered.

    Read the blog post for more!

  • Update storage init to support DynamoDB tables, S3 buckets or RDS clusters as environment storage

    Now, you can create environment addons for your storage easily with copilot storage init --lifecycle environment. The storage is deployed when you run copilot env deploy, and isn't deleted until you delete the environment by running copilot env delete.

    Here is an example of prompts that you might see when you run copilot storage init without any flags.

    $ copilot storage init
    What type of storage would you like to create?
     > DynamoDB            (NoSQL)
       S3                  (Objects)
       Aurora Serverless   (SQL)
    Which workload needs access to the storage? 
     > api
       backend
    What would you like to name this DynamoDB Table? movies
    Do you want the storage to be created and deleted with the api service?
       Yes, the storage should be created and deleted at the same time as api
     > No, the storage should be created and deleted at the environment level
    

    Read the blog post for more!

  • Support Request-Driven Web Service secrets

    You can now add your secrets (from SSM Parameter Store or AWS Secrets Manager) to your App Runner service as environment variables using Copilot.

    Similar to other service types such as Load-Balanced Web Service, you need to first add the following tags to your secrets:

    Key Value
    copilot-application Application name from which you want to access the secret
    copilot-environment Environment name from which you want to access the secret

    Then simply update your Request-Driven Web Service manifest with:

    secrets:
      GITHUB_TOKEN: GH_TOKEN_SECRET

    And deploy! Your service can now access the secret as an environment variable.

    Read the blog post for more!

🐛 Bug Fixes

  • Require aws config file in env init only when needed (#4440)
  • svc delete should ignore Route53 A-record deletion error if not found (#4409)
  • Service Connect shouldn't affect gov cloud deployment (#4390)

copilot-cli: Release v1.25.0

17 Jan 20:24
ba44a7e
Compare
Choose a tag to compare

⚡️ Features and Enhancements

  • Support user-written environment addons

    You can now deploy addons associated with your environments. Addons are additional AWS resources that are not integrated in Copilot by default - for example, DynamoDB, RDS, etc. Environment addons resources have their lifecycle managed at the environment level. Hence, resources can be shared across services or jobs and won't be deleted unless the environment is deleted.

    If you are already familiar with workload addons, then good news - the experience of managing environment addons is pretty similar.

    You just need to store your CFN templates under copilot/environments/addons folder, and then run copilot env deploy - your addons will the be deployed along with the environment.

    For an example walk-through, see our blog post !

  • Support static content delivery through an existing S3 bucket

    You can now bring your own S3 bucket to work with CloudFront for faster static content delivery.
    You can use CloudFront with an S3 bucket as the origin by configuring the environment manifest as below:

    cdn:
      static_assets:
        location: cf-s3-ecs-demo-bucket.s3.us-west-2.amazonaws.com
        alias: example.com
        path: static/*

    Read the blog post for more!

🐛 Bug Fixes

  • Render CFN template with SslPolicy instead of SSLPolicy (#4278)

copilot-cli: Release v1.24.0

29 Nov 21:17
3313b1d
Compare
Choose a tag to compare

⚡️ Features and Enhancements

  • ECS Service Connect Support (#4226)

    ECS Service Connect enables a client service to connect to its downstream services in a load-balanced and resilient fashion. To enable Service Connect, you can simply add this configuration to your service manifest:

    network:
      connect: true

    Check out our blog post for more! Also, check out the network.connect field in the manifest specification.

  • Add --no-rollback flag to env deploy (#4168)

    Copilot env deploy now has a new flag --no-rollback; you can specify the flag to disable automatic env deployment rollback to help with debugging.

  • Add AutoScalingConfiguration to Request-Driven Web Service (RDWS) (#4186)

    It is now possible to specify autoscaling configuration for your RDWS. For example, this can be configured in your service manifest:

    count: high-availability/3
  • Add log retention to VPC flow logs (#4164)

    The default value for VPC flow logs is now 14 days (2 weeks):

    network:
      vpc:
        flow_logs: on

    Alternatively, you can customize the number of days for retention:

    network:
      vpc:
        flow_logs:
          retention: 30

🐛 Bug Fixes

  • Access logs bucket policy should be applied after ALB update (#4169)
  • Set tasks fewer than spot_from to Fargate Capacity Provider when min and spot_from equal (#4187)
  • Check if an application exists globally before creating it (#4113)

❤️ Contributions

Thank you, contributors 🥰!

copilot-cli: Release v1.23.0

01 Nov 17:29
31385c0
Compare
Choose a tag to compare

⚡️ Features and Enhancements

  • Restrict the ingress of a Request-Driven Web Service (RDWS) to environment only (#4137)

    Previously, a RDWS was always internet-facing. Now, you have the option of toggling the service to be private. Specify http.private: true in a RDWS manifest, and the service will accept traffic from within the environment only.

    See our blog post for more! Also, check out the http.private field in the manifest specification.

  • Support Aurora Serverless v2 in storage init (#4075)

    copilot storage init --storage-type Aurora will now generate an addon template for Aurora Serverless v2 by default.
    To generate a template for v1, you can run copilot storage init --storage-type Aurora --serverless-version v1

    Check out our blog post for more!

  • Restrict ingress to the public ALB using source IPs (#4103)

    It is now possible to limit the ingress to your public ALB to up to 50 source IPs. This can be configured in your environment manifest:

    http:
     public:
       ingress:
         source_ips:
           - 10.0.0.0/24
           - 10.0.1.0/24

    Check out our blog post for more, as well as http.public.ingress.source_ips in the manifest specification !

  • Configure SSL policy for environment ALBs' HTTPS listener (#4099)

    You can now specify the security policy applied on the HTTPS listener for your environment ALB(s) to comply with your organization's security requirements. This can be configured in your environment manifest:

    http:
     public: 
       ssl_policy: ELBSecurityPolicy-FS-1-2-Res-2019-08
    
     private: 
       ssl_policy: ELBSecurityPolicy-FS-1-2-Res-2019-08

    Check out the ssl_policy field in the manifest specification.

  • Restrict container access to root file system to read-only (#4062)

    You can now give your containers read-only access to its root file system to comply with Security Hub's recommendation of [ECS.5] ECS containers should be limited to read-only access to root filesystems. This can be configured in your service's manifest:

    storage:
     readonly_fs: true

    See storage.readononly_fs in the manifest specification or read the blog post.

  • Enable VPC flow logs for environments (#4088)

    You can now capture information about the IP traffic going in and out of your environment VPC by enabling VPC flow logs in your environment manifest:

    network:
     vpc:
       flow_logs: on

    See network.vpc.flow_logs in the manifest specification.

  • Show permissions boundary policy name in app show (#4071)

    In Copilot v1.22.0, we introduced permissions boundaries for all IAM roles in an application. Now you can see this configuration in copilot app show.

    $ copilot app show --name myapp
    
    About
    
     Name                  myapp
     Version               v1.1.0
     URI                   N/A
     Permissions Boundary  myPermissionsBoundaries

🐛 Bug Fixes

  • Fix misplaced http fields in environment manifest (#4068). See our blog post for more information on this manifest fix!
  • TLS termination does not require a certificate or domain for CDN (#4096)
  • Remove sh-unfriendly here string from the default buildspec (#4102)

❤️ Contributions

Thank you, contributors 🥰!

copilot-cli: Release v1.22.1

11 Oct 19:39
ba55334
Compare
Choose a tag to compare

🐛 Bug Fixes

  • Allow cdn certificate import without http cert import in Environment manifests (#4061)

    In v1.22.0, Copilot introduced TLS termination by CloudFront for Load Balanced Web Services. However, enabling the feature required importing a certificate to both the public Application Load Balancer and CloudFront. This requirement has been removed, and you can now enable TLS termination without having a certificate attached to the load balancer.

  • Fix segfault while running env package (#4061)

  • Escape double-quotes in serialized parameters.json values when running copilot svc package --output-dir (#4061)

  • Use the sidecar container's port and protocol if it is the target container for the load balancer (#4047)

  • Use the image.location value if present when running copilot svc package --output-dir (#4055)

  • The manifest generated for a Worker service with svc init now takes into consideration whether or not the topics selected are FIFO (#4056)