Packer amazon-ebs Configuration: Difference between revisions
Line 84: | Line 84: | ||
=Root Device= | =Root Device= | ||
For more details about EC2 block device mapping, see: {{Internal|Amazon_EC2_Concepts#Block_Device_Mapping|EC2 Concepts}} | For more details about EC2 block device mapping, see: {{Internal|Amazon_EC2_Concepts#Block_Device_Mapping|EC2 Concepts}} | ||
<font color=darkgray>How large it is?</font> | |||
=Builder Parameters= | =Builder Parameters= |
Revision as of 22:39, 10 December 2019
External
Internal
Overview
amazon-ebs creates Amazon AMIs backed by EBS volumes for use in EC2.
The builder launches an EC2 instance from a source AMI, provisions that running VM, and then creates an AMI from that VM, in the AWS account whose credentials are specified as shown here. The instance will be brought up in the default VPC of the user. The builder will create temporary keypairs, security group rules, etc. that provide it temporary access to the instance while the image is being created, which simplifies configuration. The builder does not manage the AMIs.
Example
{
"variables": {
"ami_version": "1.0.0",
"ami_user": "00000000000",
"ami_base_name": "kubernetes-node",
"base_image_name": "RHEL-7.7_HVM-20191119-x86_64-2-Hourly2-GP2",
"ec2_user": "ec2-user",
"instance_type": "t2.large",
"root_volume_size_Gi": "30",
"yq_version": "2.4.1"
},
"builders": [
{
"name": "kubernetes-node",
"type": "amazon-ebs",
"ami_name": "{{user `ami_base_name`}}-{{user `ami_version`}}",
"instance_type": "{{user `instance_type`}}",
"ami_users": [
"{{user `ami_user`}}"
],
"ssh_username": "{{user `ec2_user`}}",
"source_ami_filter": {
"filters": {
"virtualization-type": "hvm",
"name": "{{user `base_image_name`}}",
"root-device-type": "ebs"
},
"owners": [
"309956199498"
]
},
"launch_block_device_mappings": [
{
"device_name": "/dev/xvda",
"volume_size": "{{user `root_volume_size_Gi`}}",
"volume_type": "gp2",
"delete_on_termination": true
}
],
"tags": {
"function": "kubernetes-node",
"base": "{{user `base_image_name`}}"
}
}
],
"provisioners": [
{
"type": "shell",
"environment_vars": [
"KUBERNETES_NODE_AMI_VERSION={{ user `ami_version` }}",
"KUBERNETES_NODE_BASE_IMAGE_NAME={{ user `base_image_name` }}",
"KUBERNETES_NODE_EC2_USER={{ user `ec2_user` }}",
"KUBERNETES_NODE_YQ_VERSION={{ user `yq_version` }}"
],
"execute_command": "echo '' | {{ .Vars }} sudo -S -E -u root '{{ .Path }}'",
"scripts": [
"scripts/install.sh",
"scripts/config.sh",
"scripts/cleanup.sh"
]
}
]
}
Root Device
For more details about EC2 block device mapping, see:
How large it is?
Builder Parameters
ami_name
Required parameter, which will translate to AMI Name of the resulting AMI to be used when managing AMIs in the AWS console or with the API. Must be unique, even if a unique AMI ID is generated by the build. If a image with the same name exists, Packer will error out.
ssh_username
Required.
instance_type, spot_instance_types
One of them is required.
ami_users
A list of account IDs that have access to launch the resulting AMI(s). By default no additional users other than the user creating the AMI has permissions to launch it.
{
"builders": [
"type": "amazon-ebs"
...
"ami_users": [ "000000000000", "111111111111111" ]
]
}
ami_regions
{
"builders": [
"type": "amazon-ebs"
...
"ami_regions": ["us-west-2", "us-east-1"]
]
}
Note that the region listed in ami_regions
are in addition to the default region, and if the default region of the user executing packer is mentioned in the list, the AMI will be copied twice.