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

Sebelum menyediakan mesin FCOS, Anda harus memiliki file konfigurasi Ignition yang berisi kustomisasi Anda. Jika belum memilikinya, lihat [Producing an Ignition File](xref:producing-ign.adoc).

Fedora CoreOS memiliki pengguna bawaan bernama core yang dapat digunakan untuk menjelajahi sistem operasi. Jika Anda ingin menggunakannya, selesaikan [konfigurasinya](xref:authentication.adoc) dengan menambahkan, misalnya, kunci SSH.

Jika Anda tidak ingin menggunakan Ignition untuk memulai, Anda dapat memanfaatkan dukungan Afterburn.

Anda juga perlu memiliki akses ke akun AWS. Contoh di bawah ini menggunakan alat baris perintah aws, yang harus diinstal dan dikonfigurasi terlebih dahulu secara terpisah.

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.6.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.