Menyediakan Fedora CoreOS di Amazon Web Services

Panduan ini menunjukkan cara menyediakan instance Fedora CoreOS (FCOS) baru di platform cloud Amazon Web Services (AWS).

Persyaratan

Fedora CoreOS supports configuring access via SSH keys using Afterburn on this platform. Once you have configured your SSH Key in the platform configuration, you can provision and access Fedora CoreOS instances with the default user core, without using an Ignition config.

We recommend using an Ignition config once you are more familiar with Fedora CoreOS and want to automate the deployment of systems.

You need to have access to an AWS account. The examples below use the aws command-line tool, which must be separately installed and configured beforehand.

Menjalankan instance VM

Contoh Minimal

Instance AWS baru dapat langsung dibuat dari citra publik FCOS. Anda dapat menemukan AMI terbaru untuk setiap wilayah di halaman unduhan.

Jika Anda hanya tertarik untuk menjelajahi FCOS tanpa melakukan kustomisasi lebih lanjut, Anda dapat menggunakan pasangan kunci SSH yang terdaftar untuk pengguna default core.

Untuk mencoba FCOS dengan cara ini, Anda perlu menjalankan perintah aws ec2 run-instances dan memberikan beberapa informasi agar instance dapat berjalan. Berikut ini contoh perintah yang dapat digunakan:

Menjalankan Instance Baru
NAME='instance1'
SSHKEY='my-key'     # nama kunci SSH Anda: `aws ec2 describe-key-pairs`
IMAGE='ami-xxx'     # ID AMI yang ditemukan di halaman unduhan
DISK='20'           # ukuran hard disk
REGION='us-east-1'  # wilayah target
TYPE='m5.large'     # tipe instance
SUBNET='subnet-xxx' # subnet: `aws ec2 describe-subnets`
SECURITY_GROUPS='sg-xx' # grup keamanan: `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}}"
Anda dapat mengetahui alamat IP yang diberikan untuk instance dengan menjalankan perintah aws ec2 describe-instances.

Sekarang Anda seharusnya dapat melakukan SSH ke dalam instance menggunakan alamat IP yang terkait.

Contoh Koneksi
ssh core@<ip address>

Contoh yang Disesuaikan

Untuk menjalankan instance FCOS yang disesuaikan, konfigurasi Ignition yang valid harus diberikan sebagai data pengguna pada saat pembuatan. Anda dapat menggunakan perintah yang sama dari [_minimal_example], tetapi tambahkan argumen --user-data file://path/to/config.ign:

Kunci SSH untuk pengguna core juga disediakan melalui Afterburn dalam contoh ini.
Menjalankan dan menyesuaikan instance baru
NAME='instance1'
SSHKEY='my-key'     # nama kunci SSH Anda: `aws ec2 describe-key-pairs`
IMAGE='ami-xxx'     # ID AMI yang ditemukan di halaman unduhan
DISK='20'           # ukuran hard disk
REGION='us-east-1'  # wilayah target
TYPE='m5.large'     # tipe instance
SUBNET='subnet-xxx' # subnet: `aws ec2 describe-subnets`
SECURITY_GROUPS='sg-xx' # grup keamanan `aws ec2 describe-security-groups`
USERDATA='/path/to/config.ign' # jalur ke konfigurasi Ignition Anda
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}}"
Secara desain, konfigurasi cloud-init dan skrip startup tidak didukung di FCOS. Sebagai gantinya, disarankan untuk menyandikan logika startup apa pun sebagai unit layanan systemd dalam konfigurasi Ignition.
Anda dapat mengetahui alamat IP yang diberikan untuk instance dengan menjalankan perintah aws ec2 describe-instances.

Sekarang Anda seharusnya dapat melakukan SSH ke dalam instance menggunakan alamat IP yang terkait.

Contoh Koneksi
ssh core@<ip address>

Konfigurasi Ignition Jarak Jauh

Karena data pengguna dibatasi hingga 16 KB, Anda mungkin perlu menggunakan sumber eksternal untuk konfigurasi Ignition Anda. Solusi umum adalah mengunggah konfigurasi tersebut ke bucket S3, seperti yang ditunjukkan pada langkah-langkah berikut:

Buat bucket S3 baru
NAME='instance1'
aws s3 mb s3://$NAME-infra
Unggah berkas Ignition
NAME='instance1'
CONFIG='/path/to/config.ign' # jalur ke konfigurasi Ignition Anda
aws s3 cp $CONFIG s3://$NAME-infra/bootstrap.ign

You can verify the file has been correctly uploaded:

Daftar berkas di dalam bucket
NAME='instance1'
aws s3 ls s3://$NAME-infra/

Kemudian buat konfigurasi Ignition minimal seperti berikut:

Mengambil berkas Ignition jarak jauh dari bucket S3
variant: fcos
version: 1.7.0
ignition:
  config:
    replace:
      source: s3://instance1-infra/bootstrap.ign
Format berkas Ignition jarak jauh ke format json
butane -p config.bu -o config.ign

Anda perlu membuat peran (role) yang mencakup izin s3:GetObject, dan melampirkannya ke profil instance. Lihat dokumen pembuatan peran untuk informasi lebih lanjut.

Buat profil instance
cat <<EOF >trustpolicyforec2.json
{
  "Version": "2012-10-17",
 "Statement": {
    "Effect": "Allow",
    "Principal": {"Service": "ec2.amazonaws.com"},
    "Action": "sts:AssumeRole"
  }
}
EOF

# Buat role dan lampirkan kebijakan kepercayaan yang memungkinkan EC2 untuk mengambil peran tersebut.
ROLE_NAME="my-role"
aws iam create-role --role-name ${ROLE_NAME} --assume-role-policy-document file://trustpolicyforec2.json

# Lampirkan kebijakan terkelola AWS bernama AmazonS3ReadOnlyAccess ke role
aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess --role-name ${ROLE_NAME}

# Buat profil instance yang diperlukan oleh EC2 untuk menyertakan role
PROFILE="my-instance-profile"
aws iam create-instance-profile --instance-profile-name ${PROFILE}

# Terakhir, tambahkan role ke profil instance
aws iam add-role-to-instance-profile --instance-profile-name ${PROFILE} --role-name ${ROLE_NAME}

Untuk menjalankan instance, perlu melampirkan profil yang telah dibuat. Dari baris perintah, gunakan --iam-instance-profile.

Menjalankan dan menyesuaikan instance baru dengan berkas Ignition jarak jauh dari bucket S3
NAME='instance1'
SSHKEY='my-key'          # nama kunci SSH Anda: `aws ec2 describe-key-pairs`
IMAGE='ami-xxx'          # ID AMI yang ditemukan di halaman unduhan
DISK='20'                # ukuran hard disk
REGION='us-east-1'       # wilayah target
TYPE='m5.large'       # tipe instance
SUBNET='subnet-xxx'      # subnet: `aws ec2 describe-subnets`
SECURITY_GROUPS='sg-xxx' # grup keamanan `aws ec2 describe-security-groups`
USERDATA='/path/to/config.ign' # jalur ke konfigurasi Ignition Anda
PROFILE='xxx-profile'    # nama profil instance IAM `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}}"

Setelah boot pertama selesai, pastikan untuk menghapus konfigurasi karena mungkin berisi data sensitif. Lihat [_configuration_cleanup].

Pembersihan konfigurasi

Jika Anda perlu menyimpan rahasia dalam konfigurasi Ignition, Anda sebaiknya menyimpannya di bucket S3 dan memiliki konfigurasi minimal di data pengguna. Setelah instance menyelesaikan boot pertama, hapus isi bucket S3 tersebut karena proses atau kontainer apa pun yang berjalan di instance dapat mengaksesnya. Lihat dokumentasi Ignition untuk saran lebih lanjut tentang pengelolaan rahasia.

Menghapus konfigurasi Ignition dari bucket S3
NAME='instance1'
aws s3 rm s3://$NAME-infra/bootstrap.ign

Optionally, you can delete the whole bucket:

Menghapus bucket S3
NAME='instance1'
aws s3 rb s3://$NAME-infra
Data pengguna pada instance tidak dapat dimodifikasi tanpa menghentikan instance terlebih dahulu.