Usei um modelo do AWS CloudFormation para criar uma instância do Amazon Elastic Compute Cloud (Amazon EC2). Quero definir as propriedades do volume raiz da instância.
Resolução
Observação: Por padrão, a instância do EC2 usa os dispositivos de bloco especificados no mapeamento de dispositivos de blocos para a imagem de máquina da Amazon (AMI). Para substituir o mapeamento de dispositivos de blocos da AMI, use o mapeamento de dispositivos de blocos da instância. Para o volume raiz, você pode substituir somente o tamanho do volume, o tipo de volume e a configuração DeleteOnTermination. Depois que a instância estiver em execução, você poderá modificar somente a configuração DeleteOnTermination dos volumes anexados do Amazon Elastic Block Store (Amazon EBS).
Identificar o nome do dispositivo do volume raiz da sua AMI
Para encontrar o nome do dispositivo, use o console do Amazon EC2 ou a AWS Command Line Interface (AWS CLI).
Observação: se você receber erros ao executar comandos da AWS CLI, consulte Solucionar erros da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.
Console do Amazon EC2
Para identificar o nome do dispositivo, conclua as seguintes etapas:
- Abra o console do Amazon EC2.
- Na barra de navegação, selecione a região da AWS em que você deseja iniciar suas instâncias.
- No painel de navegação, selecione AMIs.
- Use Filtro para encontrar sua AMI e, em seguida, selecione sua AMI.
- Na guia Detalhes, copie o valor para Nome do dispositivo raiz.
AWS CLI
Para identificar o nome do dispositivo, execute o comando describe-images:
aws ec2 describe-images \ --region us-east-1 \
--image-ids ami-1234567890AWSEXAMPLE
**Observação:**Substitua us-east-1 pela sua região e ami-1234567890AWSEXAMPLE pela sua AMI.
A saída do comando retorna o nome do dispositivo como o valor para RootDeviceName.
Definir as propriedades do volume raiz para sua instância do EC2
Use a propriedade BlockDeviceMapping de um recurso AWS::EC2::Instance para definir as propriedades do volume raiz de sua instância do EC2.
Nos exemplos de JSON e YAML a seguir, o CloudFormation cria uma instância do EC2 com as seguintes configurações:
- O tamanho do volume raiz é definido como 30 GB.
- A propriedade DeleteOnTermination do volume raiz é verdadeira.
- O DeviceName é /dev/xvda porque a AMI especificada é uma AMI do Amazon Linux 2.
- A propriedade criptografada é verdadeira. Essa configuração permite a criptografia padrão no volume raiz.
**Observação:**Em seu modelo, substitua /dev/xvda pelo valor Nome do dispositivo raiz. Se necessário, modifique a propriedade Ebs no modelo.
Exemplo de modelo JSON:
{ "AWSTemplateFormatVersion": "2010-09-09",
"Description": "AWS CloudFormation Sample Template that shows how to increase the size of the root volume. **WARNING** This template creates an Amazon EC2 instance. You will be billed for the AWS resource used if you create a stack from this template.",
"Parameters": {
"KeyName": {
"Type": "AWS::EC2::KeyPair::KeyName",
"Description": "Name of an existing EC2 KeyPair to enable SSH access to the EC2 instance."
},
"InstanceType": {
"Description": "EC2 instance type",
"Type": "String",
"Default": "t2.micro",
"ConstraintDescription": "Please choose a valid instance type."
},
"AMIID": {
"Description": "The Latest Amazon Linux 2 AMI taken from the public AWS Systems Manager Parameter Store",
"Type": "AWS::SSM::Parameter::Value<String>",
"Default": "/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2"
}
},
"Resources": {
"LinuxInstance": {
"Type": "AWS::EC2::Instance",
"Properties": {
"ImageId": {
"Ref": "AMIID"
},
"InstanceType": {
"Ref": "InstanceType"
},
"KeyName": {
"Ref": "KeyName"
},
"BlockDeviceMappings": [
{
"DeviceName": "/dev/xvda",
"Ebs": {
"VolumeType": "gp2",
"VolumeSize": "30",
"DeleteOnTermination":"false",
"Encrypted": "true"
}
}
]
}
}
}
}
Exemplo de modelo YAML:
AWSTemplateFormatVersion: 2010-09-09Description: >-
AWS CloudFormation Sample Template that shows how to increase the size of the root volume. **WARNING** This template creates an Amazon EC2 instance. You will be billed for the AWS resource used if you create a stack from this template.
Parameters:
KeyName:
Type: 'AWS::EC2::KeyPair::KeyName'
Description: Name of an existing EC2 KeyPair to enable SSH access to the EC2 instance.
InstanceType:
Description: EC2 instance type
Type: String
Default: t2.micro
ConstraintDescription: Please choose a valid instance type.
AMIID:
Description: >-
The Latest Amazon Linux 2 AMI taken from the public Systems Manager
Parameter Store
Type: 'AWS::SSM::Parameter::Value<String>'
Default: /aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2
Resources:
LinuxInstance:
Type: 'AWS::EC2::Instance'
Properties:
ImageId: !Ref AMIID
InstanceType: !Ref InstanceType
KeyName: !Ref KeyName
BlockDeviceMappings:
- DeviceName: /dev/xvda
Ebs:
VolumeType: gp2
VolumeSize: '30'
DeleteOnTermination: 'false'
Encrypted: 'true'