DEV Community

Cover image for Terraforming mac1.metal at AWS
Serhii Vasylenko for AWS Community Builders

Posted on • Edited on • Originally published at devdosvid.blog

Terraforming mac1.metal at AWS

Updated on the 23rd of October, 2021: Terraform AWS provider now supports Dedicated Hosts natively

In November 2021, AWS announced the support for Mac mini instances.

I believe this is huge, even despite the number of constraints this solution has. This offering opens the door to seamless macOS CI/CD integration into existing AWS infrastructure.

So here is a quick-start example of creating the dedicated host and the instance altogether using Terraform.

I intentionally used some hardcoded values for the sake of simplicity in the example.

resource "aws_ec2_host" "example_host" {
  instance_type     = "mac1.metal"
  availability_zone = "us-east-1a"
}

resource "aws_instance" "example_instance" {
  ami           = data.aws_ami.mac1metal.id
  host_id       = aws_ec2_host.example_host.id
  instance_type = "mac1.metal"
  subnet_id     = data.aws_subnet.example_subnet.id
}

data "aws_subnet" "example_subnet" {
  availability_zone = "us-east-1a"
  filter {
    name   = "tag:Tier" # you should omit this filter if you don't distinguish your subnets on private and public 
    values = ["private"]
  }
}

data "aws_ami" "mac1metal" {
  owners      = ["amazon"]
  most_recent = true
  filter {
    name   = "name"
    values = ["amzn-ec2-macos-11*"] # get latest BigSur AMI
  }
}
Enter fullscreen mode Exit fullscreen mode

Simple as that, yes. Now, you can integrate it into your CI system and have the Mac instance with the underlying host in a bundle.

💡 Pro tip: you can leverage the aws_ec2_instance_type_offerings Data Source and use its output with aws_subnet source to avoid availability zone hardcoding.

To make the code more uniform and reusable, you can wrap it into a Terraform module that accepts specific parameters (such as instance_type or availability_zone) as input variables.


If you liked the article, please support me by sharing it on social networks 🙏


Top comments (4)

Collapse
 
danieldias profile image
Daniel Dias

This terraform module will use the same approach to solve the problem:
registry.terraform.io/modules/Dani...
Terraform AWS provider has a pull request to solve this problem open for more than 1 year :(
github.com/hashicorp/terraform-pro...
If you used this feature, please upvote the PR

Collapse
 
svasylenko profile image
Serhii Vasylenko AWS Community Builders

Yeah, that issue already has my vote, as well as related PR. But still no luck :(

Collapse
 
kondetiram profile image
kondetiram

Hello Daniel,
Can we create multiple dedicated hosts and mac instances from your script

Collapse
 
svasylenko profile image
Serhii Vasylenko AWS Community Builders

@kondetiram hi there! :) Check out the update to this article — Terraform now supports Dedicated Hosts natively. So you can create a module and define the count argument for it nice and easy now 🤗

Some comments may only be visible to logged-in visitors. Sign in to view all comments.