Aprovisionando Fedora CoreOS en Servicios Amazon Web

Esta guía le muestra como aprovisionar nuevas instancias Fedora CoreOS (FCOS) sobre la plataforma en la nube Servicios Amazon Web (AWS).

Requisitos previos

Antes de aprovisionar una máquina FCOS, usted debe tener un archivo de configuración Ignition que contenga sus personalizaciones. Si no tiene uno vea Produciendo un Archivo Ignition.

Fedora CoreOS tiene un usuario core predeterminado que puede ser usado para explorar el SO. Si usted desea utilizarlo finalice su configuración proporcionando una clave SSH.

Si no desea usar Ignition para empezar, puede usar Soporte Afterburn.

También necesita tener acceso a una cuenta AWS. Los ejemplos de abajo usan las herramienta de línea de comandos aws, que debe instalarse y configurarse separadamente de antemano.

Lanzar una instancia de Máquina Virtual

Ejemplo Mínimo

New AWS instances can be directly created from the public FCOS images. You can find the latest AMI for each region from the download page.

If you are only interested in exploring FCOS without further customization, you can use a registered SSH key-pair for the default core user.

To test out FCOS this way you’ll need to run the aws ec2 run-instances command and provide some information to get the instance up and running. The following is an example command you can use:

Lanzando una nueva instancia
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-xx' # the security group `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}}"
Usted puede encontrar la IP asignada de la instancia ejecutando`aws ec2 describe-instances`

Ahora debería poder acceder mediante SSH a la instancia usando la dirección IP asociada.

Ejemplo de conexión
ssh core@<ip address>

Ejemplo Personalizado

Con el objetivo de lanzar una instancia FCOS personalizada, se debe pasar una configuración Ignition válida como sus datos de usuario en el momento de la creación. Usted puede utilizar el mismo comando del ejemplo mínimo pero añadiendo el argumento --user-data file://path/to/config.ign:

La clave SSH para el usuario core también se proporciona a través de Afterburn en este ejemplo.
Lanzar y personalizar una nueva instancia
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-xx' # the security group `aws ec2 describe-security-groups`
USERDATA='/path/to/config.ign' # path to your Ignition config
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 diseño, la configuración cloud-init y los scripts de arranque no se admiten en FCOS. En su lugar, se recomienda codificar cualquier lógica de inicio como unidades de servicio systemd en la configuración Ignition.
Usted puede encontrar la IP asignada de la instancia ejecutando`aws ec2 describe-instances`

Ahora debería poder acceder mediante SSH a la instancia usando la dirección IP asociada.

Ejemplo de conexión
ssh core@<ip address>

Configuración Ignition remota

Como los datos de usuario están limitados a 16 KB, usted puede necesitar una fuente externa para su configuración Ignition. Una solución común es cargar la configuración en un depósito S3, como muestran los siguientes pasos:

Crear un nuevo depósito s3
NAME='instance1'
aws s3 mb s3://$NAME-infra
Cargar el archivo Ignition
NAME='instance1'
CONFIG='/path/to/config.ign' # path to your Ignition config
aws s3 cp $CONFIG s3://$NAME-infra/bootstrap.ign

Usted puede verificar que el archivo ha sido cargado correctamente:

Listar archivos en el depósito
NAME='instance1'
aws s3 ls s3://$NAME-infra/

Después cree la configuración Ignition mínima como sigue:

Recuperar un archivo Ignition remoto desde un depósito s3
variant: fcos
version: 1.5.0
ignition:
  config:
    replace:
      source: s3://instance1-infra/bootstrap.ign
Format the remote Ignition file to json format
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.

Create the instance profile
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.

Launching and customizing a new instance with remote Ignition file from a S3 bucket
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}}"

Una vez que se ha completado el primer arranque, asegúrese de borrar la configuración puesto que puede contener datos sensibles. Vea Limpieza de la configuración.

Limpieza de la configuración

Si necesita tener secretos en su configuración Ignition debería almacenarla en un depósito S3 y tener una configuración mínima en datos de usuario. Una vez que la instancia ha completado el primer arranque, borre el depósito S3 puesto que cualquier proceso o contenedor que se ejecute en la instancia puede acceder a él. Vea en la documentación Ignition más advertencias sobre la administración de secretos.

Eliminar la configuración Ignition del depósito s3
NAME='instance1'
aws s3 rm s3://$NAME-infra/bootstrap.ign

Opcionalmente, usted puede eliminar todo el depósito:

Eliminar el depósito s3
NAME='instance1'
aws s3 rb s3://$NAME-infra
Los datos de usuario de la instancia no pueden ser modificados sin parar la instancia.