Provisionando Fedora CoreOS no Amazon Web Services
Este guia mostra como provisionar novas instâncias do Fedora CoreOS (FCOS) na plataforma de nuvem Amazon Web Services (AWS).
Pré-requisitos
Antes de provisionar uma máquina FCOS, você deve ter um arquivo de configuração do Ignition contendo suas personalizações. Se você não tiver um, consulte Produzindo um arquivo de Ignition.
Fedora CoreOS tem um usuário padrão core que pode ser usado para explorar o sistema operacional. Se você quiser usá-lo, finalize sua configuração fornecendo, por exemplo, uma chave SSH.
|
Se você não quiser usar o Ignition para começar, você pode usar o suporte ao Afterburn.
Você também precisa ter acesso a uma conta AWS. Os exemplos abaixo usam a ferramenta de linha de comando aws, que deve ser instalada separadamente e configurada de antemão.
Iniciando uma instância de VM
Exemplo mínimo
Novas instâncias da AWS podem ser criadas diretamente a partir de imagens públicas do FCOS. Você pode encontrar a AMI mais recente para cada região na página de download.
Se você estiver interessado apenas em explorar FCOS sem personalização adicional, pode usar um par de chaves SSH registrado para o usuário padrão core
.
Para testar o FCOS dessa forma, você precisará executar o comando aws ec2 run-instances
e fornecer algumas informações para colocar a instância em funcionamento. A seguir está um exemplo de comando que você pode usar:
NAME='instance1'
SSHKEY='my-key' # o nome da sua chave SSH: `aws ec2 describe-key-pairs`
IMAGE='ami-xxx' # o ID da AMI encontrada na página de download
DISK='20' # o tamanho do disco
REGION='us-east-1' # a região alvo
TYPE='m5.large' # o tipo da instância
SUBNET='subnet-xxx' # a sub-rede: `aws ec2 describe-subnets`
SECURITY_GROUPS='sg-xx' # o grupo de segurança `aws ec2 describe-security-groups`
aws ec2 run-instances \
--region $REGION \
--image-id $IMAGE \
--instance-type $TYPE \
--key-name $SSHKEY \
--subnet-id $SUBNET \
--security-group-ids $SECURITY_GROUPS \
--tag-specifications "ResourceType=instance,Tags=[{Key=Name,Value=${NAME}}]" \
--block-device-mappings "VirtualName=/dev/xvda,DeviceName=/dev/xvda,Ebs={VolumeSize=${DISK}}"
Você pode descobrir o IP atribuído à instância executando aws ec2 describe-instances
|
Agora você deve conseguir fazer SSH na instância usando o endereço IP associado.
ssh core@<endereço ip>
Exemplo personalizado
Para iniciar uma instância FCOS personalizada, uma configuração válida do Ignition deve ser passada como https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html#instancedata-add-user- data[dados do usuário] no momento da criação. Você pode usar o mesmo comando de [_minimal_example], mas adicionar o argumento --user-data file://caminho/para/config.ign
:
A chave SSH para o usuário core também é fornecida via Afterburn neste exemplo.
|
NAME='instância1'
SSHKEY='minha-chave' # o nome de sua chave SSH: `aws ec2 describe-key-pairs`
IMAGE='ami-xxx' # O ID da AMI encontrado na página de downloads
DISK='20' # o tamanho do disco rígido
REGION='us-east-1' # a região alvo
TYPE='m5.large' # o tipo da instância
SUBNET='subnet-xxx' # a sub-rede: `aws ec2 describe-subnets`
SECURITY_GROUPS='sg-xx' # o grupo de segurança `aws ec2 describe-security-groups`
USERDATA='/path/to/config.ign' # caminho para sua configuração do Ignition
aws ec2 run-instances \
--region $REGION \
--image-id $IMAGE \
--instance-type $TYPE \
--key-name $SSHKEY \
--subnet-id $SUBNET \
--security-group-ids $SECURITY_GROUPS \
--user-data "file://${USERDATA}" \
--tag-specifications "ResourceType=instance,Tags=[{Key=Name,Value=${NAME}}]" \
--block-device-mappings "VirtualName=/dev/xvda,DeviceName=/dev/xvda,Ebs={VolumeSize=${DISK}}"
Por design, a configuração de inicialização em nuvem e os scripts de inicialização não são suportados no FCOS. Em vez disso, é recomendável codificar qualquer lógica de inicialização como unidades de serviço do systemd na configuração do Ignition. |
Você pode descobrir o IP atribuído à instância executando aws ec2 describe-instances
|
Agora você deve conseguir fazer SSH na instância usando o endereço IP associado.
ssh core@<endereço ip>
Configuração remota do Ignition
Como dados de usuários são limitados a 16KB, você pode precisar usar uma fonte externa para sua configuração do Ignition. Uma solução comum é carregar a configuração para um bucket S3, como mostram os passos abaixo:
NAME='instance1'
aws s3 mb s3://$NAME-infra
NAME='instance1'
CONFIG='/path/to/config.ign' # path to your Ignition config
aws s3 cp $CONFIG s3://$NAME-infra/bootstrap.ign
You can verify the file have been correctly uploaded:
NAME='instance1'
aws s3 ls s3://$NAME-infra/
Then create a minimal Ignition config as follows:
variant: fcos
version: 1.5.0
ignition:
config:
replace:
source: s3://instance1-infra/bootstrap.ign
butane -p config.bu -o config.ign
You need to create a role that includes s3:GetObject
permission, and attach it to the instance profile. See role creation document for more information.
cat <<EOF >trustpolicyforec2.json
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Principal": {"Service": "ec2.amazonaws.com"},
"Action": "sts:AssumeRole"
}
}
EOF
# Create the role and attach the trust policy that allows EC2 to assume this role.
ROLE_NAME="my-role"
aws iam create-role --role-name ${ROLE_NAME} --assume-role-policy-document file://trustpolicyforec2.json
# Attach the AWS managed policy named AmazonS3ReadOnlyAccess to the role
aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess --role-name ${ROLE_NAME}
# Create the instance profile required by EC2 to contain the role
PROFILE="my-instance-profile"
aws iam create-instance-profile --instance-profile-name ${PROFILE}
# Finally, add the role to the instance profile
aws iam add-role-to-instance-profile --instance-profile-name ${PROFILE} --role-name ${ROLE_NAME}
To launch the instance, need to attach the created profile. From the command-line, use --iam-instance-profile
.
NAME='instance1'
SSHKEY='my-key' # the name of your SSH key: `aws ec2 describe-key-pairs`
IMAGE='ami-xxx' # the AMI ID found on the download page
DISK='20' # the size of the hard disk
REGION='us-east-1' # the target region
TYPE='m5.large' # the instance type
SUBNET='subnet-xxx' # the subnet: `aws ec2 describe-subnets`
SECURITY_GROUPS='sg-xxx' # the security group `aws ec2 describe-security-groups`
USERDATA='/path/to/config.ign' # path to your Ignition config
PROFILE='xxx-profile' # the name of an IAM instance profile `aws iam list-instance-profiles`
aws ec2 run-instances \
--region $REGION \
--image-id $IMAGE \
--instance-type $TYPE \
--key-name $SSHKEY \
--subnet-id $SUBNET \
--security-group-ids $SECURITY_GROUPS \
--user-data "file://${USERDATA}" \
--iam-instance-profile Name=${PROFILE} \
--tag-specifications "ResourceType=instance,Tags=[{Key=Name,Value=${NAME}}]" \
--block-device-mappings "VirtualName=/dev/xvda,DeviceName=/dev/xvda,Ebs={VolumeSize=${DISK}}"
Once the first boot is completed, make sure to delete the configuration as it may contain sensitive data. See Configuration cleanup.
Configuration cleanup
If you need to have secrets in your Ignition configuration you should store it into a S3 bucket and have a minimal configuration in user-data. Once the instance has completed the first boot, clear the S3 bucket as any process or container running on the instance could access it. See the Ignition documentation for more advice on secret management.
NAME='instance1'
aws s3 rm s3://$NAME-infra/bootstrap.ign
Optionnally, you can delete the whole bucket:
NAME='instance1'
aws s3 rb s3://$NAME-infra
The instance’s user data cannot be modified without stopping the instance. |
Want to help? Learn how to contribute to Fedora Docs ›