Tim kami terdiri dari satu pengembang dan satu insinyur DevOps. Saya bertanggung jawab untuk menyebarkan aplikasi ke kluster ECS Amazon. Sebagai server CI / CD, saya menggunakan Bamboo. Pada artikel ini, saya akan menjelaskan secara rinci bagaimana saya menggunakan aplikasi di lingkungan pengembang.


Bangun gambar Docker
Di sini saya ikuti langkah-langkah ini:
- Langkah 1: Instal dan konfigurasikan Docker;
- Langkah 2: Konfigurasikan artefak dalam Bambu;
- Langkah 3: Mengkonfigurasi repositori Amazon ECR;
- Langkah 4: Bangun gambar Docker di Bambu.
Langkah 1: Instal dan Konfigurasi Docker
Pertama, saya memutakhirkan server tempat Bamboo diinstal, menginstal paket yang diperlukan, dan mengatur repositori Docker. Perlu dicatat bahwa saya menginstal Bamboo pada sistem operasi CentOS 7. Informasi tentang menginstal buruh pelabuhan pada sistem operasi lain dapat ditemukan di
www.docker.com .
$ sudo yum update $ sudo yum install -y yum-utils device-mapper-persistent-data lvm2 $ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
Kemudian saya menginstal aplikasi Docker dan memulai layanan:
$ sudo yum install docker-ce docker-ce-cli containerd.io $ sudo systemctl enable docker $ sudo systemctl start docker
Lalu saya menambahkan pengguna bambu ke grup Docker:
$ sudo usermod -aG docker bamboo $ sudo su - bamboo $ docker run hello-world
Jika, setelah menjalankan perintah ini, buruh pelabuhan merespons dengan pesan "Halo dari Docker!", Maka ini berarti instalasi saya berfungsi dengan benar.
Langkah 2. Konfigurasikan artefak dalam Bambu
Pengembangan aplikasi sedang berlangsung di
Grails . Saat mengompilasi aplikasi, file dengan perang ekstensi dibuat. File ini, dalam terminologi Bambu, adalah artefak. Konfigurasikan Bamboo untuk menggunakan file ini dalam tugas selanjutnya. Untuk melakukan ini, saya pergi ke tab
Tugas :

Dan saya mengatur tugas Grails, seperti yang ditunjukkan di bawah ini:

Kita melihat bahwa Grails pertama membersihkan folder build, kemudian menjalankan tes, dan akhirnya membuat file perang untuk lingkungan dev.
Setelah itu, saya klik pada tab
Artefak dan tombol
Buat artefak :

Saya mendefinisikan artefak seperti yang ditunjukkan di bawah ini:

Grails menempatkan file perang di direktori
build / libs . Saya akan memeriksa parameter
Bersama , karena saya akan memerlukan artefak ini nanti.
Sekarang saya membuat proyek penyebaran dan menetapkan artefak untuk digunakan dalam rencana pembangunan saya:


Saya juga mengatur tugas
unduhan Artifact dalam proyek penerapan:

Dengan demikian, Bamboo sekarang dikonfigurasi untuk menggunakan file perang.
Langkah 3. Konfigurasikan repositori Amazon ECR
Amazon ECR adalah layanan penyimpanan dan manajemen Docker untuk gambar. Untuk mengonfigurasi, buka konsol AWS dan pilih ECR:

Setelah membuat repositori, saya mendapatkan alamat berikut:
aws_account_id.dkr.ecr.us-east-2.amazonaws.com/onboard
Setelah menyelesaikan konfigurasi, di sini Anda juga dapat menemukan instruksi tentang cara masuk, cara mengunduh gambar dari repositori dan mengunggah gambar ke repositori.
Langkah 4: Bangun Gambar Docker di Bambu
Sekarang saya perlu mengkonfigurasi pemicu untuk mulai membangun gambar Docker. Untuk melakukan ini, saya pergi ke tab
Pemicu dan klik tombol
Tambahkan pemicu :

Di sini saya memilih
Build setelah berhasil membangun opsi
paket sehingga gambar Docker dibangun setelah mengkompilasi proyek.
Sekarang kita perlu menambahkan tugas membangun gambar Docker. Untuk melakukan ini, buka tab
Tugas , klik
Tambahkan tugas , pilih jenis
Docker . Masukkan deskripsi dan pilih
gambar Build a Docker dari menu drop-down. Di bidang
Repositori , masukkan
aws_account_id.dkr.ecr.us-east-2.amazonaws.com/onboard:latest.
Adapun Dockerfile, bisa seperti yang ditunjukkan di bawah ini:
FROM openjdk:8-jre COPY *.war /usr/src/onboard.war WORKDIR /usr/src CMD ["/bin/bash", "-c", "java -DdataSource.url=$DATASOURCE_URL -DdataSource.username=$DATASOURCE_USERNAME -DdataSource.password=$DATASOURCE_PASSWORD -jar onboard.war"]
Ketika Anda memulai aplikasi, Anda harus menentukan database. Variabel lingkungan DATASOURCE_URL, DATASOURCE_USERNAME, DATASOURCE_PASSWORD digunakan untuk mengirimkan informasi ini ke aplikasi, tetapi nilainya ditentukan saat wadah dimulai.
Ini menyelesaikan proses pengaturan untuk merakit gambar Docker dengan aplikasi. Langkah selanjutnya adalah mengonfigurasi unduhan gambar ini ke repositori Amazon ECR.

Unggah gambar ke Registry Wadah Elastis
Anda dapat menggunakan Elastic Container Registry untuk menyimpan gambar yang dikumpulkan menggunakan Bamboo. Untuk mencapai ini, saya mengikuti langkah-langkah ini:
- Langkah 1. Instal Pembantu Kredensial Amazon ECR Docker
- Langkah 2. Hubungkan peran IAM ke server Bamboo
- Langkah 3: Konfigurasikan pekerjaan booting gambar Docker
Langkah 1. Instal Pembantu Kredensial Amazon ECR Docker
Untuk mengunduh gambar Docker ke Amazon ECR, Anda harus memiliki kredensial. Kredensial ini dapat diperoleh dengan menjalankan perintah
aws ecr get-login
Namun, kredensial ini hanya berlaku selama 12 jam. Oleh karena itu, Anda dapat menjalankan perintah di atas setiap kali sebelum mengunggah gambar ke ECR, atau menginstal ECR Docker Credential Helper, yang menjaga kredensial sementara tetap mutakhir dan masuk ke ECR. Ikuti langkah-langkah ini untuk menginstal ECR Docker Credential Helper.
Pertama, Anda perlu menginstal
git dan kemudian mengkloning repositori github:
$ sudo yum install git $ sudo su - bamboo $ git clone https://github.com/awslabs/amazon-ecr-credential-helper.git $ make docker
Maka Anda perlu meletakkan baris berikut di file
/home/bamboo/.docker/config.json :
{ "credsStore": "ecr-login" }
Dan salin aplikasi yang dikompilasi ke
direktori / usr / bin :
$ exit $ sudo cp /home/bamboo/docker-credential-ecr-login /usr/bin/
Langkah 2. Hubungkan peran IAM ke server Bamboo
Agar server Bamboo dapat menggunakan ECR, Anda harus membuat peran, menambahkan kebijakan
AmazonEC2ContainerRegistryPowerUser ke peran ini, dan kemudian melampirkan peran ini ke instance EC2 Bamboo. Buka konsol AWS dan pilih IAM. Selanjutnya, klik tombol
Buat peran , pilih
layanan AWS dan
EC2 , seperti yang ditunjukkan di bawah ini:

Kemudian kita klik tombol
Next: Izin dan pada layar berikutnya kita menemukan dan memilih kebijakan
AmazonEC2ContainerRegistryPowerUser . Setelah itu, kami selesai membuat peran dan melampirkannya ke server Bamboo kami.
Langkah 3: Konfigurasikan pekerjaan booting gambar Docker
Aplikasi yang kami buat dan kumpulkan gambar Docker dengan file perang. Sekarang Anda perlu mengunggah gambar ini ke repositori. Untuk melakukan ini, saya menambahkan tugas Docker lain, kali ini untuk mengunggah gambar ke repositori ECR. Saya pergi ke tab
Tugas , klik
Tambah tugas , pilih jenis
Docker . Saya memasukkan deskripsi dan memilih
Push a Docker image to an Docker registry dari menu drop-down. Saya memilih
Custom registry dan memasukkan alamat repositori di bidang
Repository . Untuk
jenis Otentikasi, saya pilih
Gunakan kredensial asli agen .
Ini menyelesaikan proses pengaturan untuk memuat gambar Docker ke repositori Amazon ECR. Langkah-langkah berikut menjelaskan proses mengonfigurasi kluster dan layanan untuk meluncurkan aplikasi kontainer. Tetapi sebelum itu, Anda perlu mengonfigurasi opsi peluncuran untuk wadah. Inilah yang akan kita lakukan sekarang.

Buat Definisi Tugas ECS Amazon
Definisi Tugas - parameter eksekusi wadah ditulis di sini. Aplikasi kita menggunakan basis data yang parameternya ditentukan saat wadah dimulai, jadi di bagian ini kita juga akan membuat basis data. Saya menggunakan
Amazon RDS sebagai database, dan saya menyimpan kata sandi untuk mengakses database dalam bentuk terenkripsi di
AWS System Manager Parameter Store . Langkah-langkah berikut yang saya ikuti untuk membuat Definisi Tugas:
- Langkah 1. Membuat database pada instance Amazon RDS;
- Langkah 2. Mengkonfigurasi Parameter Store AWS System Manager;
- Langkah 3. Buat Definisi Tugas.
Langkah 1. Buat database pada instance Amazon RDS
Aplikasi kami menggunakan database PostgreSQL. Untuk membuat database, buka konsol AWS, pilih layanan Amazon RDS, klik tombol
Buat database , lalu pilih
PostgreSQL sebagai mesin basis data. Pada halaman berikutnya, saya memilih
Dev / Test sebagai lingkungan kerja dan klik
Next . Kemudian saya menunjuk
DB instance identifier sebagai onboard-dev-db , dan
master username sebagai
devdbadmin . Lalu saya pergi ke halaman berikutnya untuk mengkonfigurasi VPC, grup subnet, dan grup keamanan. Basis data ini akan digunakan pada jaringan pribadi, jadi saya pilih
Tidak untuk parameter
aksesibilitas Publik . Saya memasukkan
devdb di
bidang Nama database dan klik tombol
Buat database .
Langkah 2. Mengkonfigurasi Parameter Store AWS System Manager
Saya menyimpan kata sandi basis data dalam bentuk terenkripsi. Untuk melakukan ini, buka konsol AWS dan pergi ke AWS System Manager β Sumber Daya Bersama β Toko Parameter β Buat Parameter. Saya memasukkan
devdbpassword sebagai
nama parameter dan memilih
SecureString untuk jenis parameter, lalu saya memasukkan kata sandi basis data di bidang
Nilai .
Langkah 3. Buat Definisi Tugas
Amazon ECS adalah kluster tempat aplikasi wadah berjalan. Ini menggunakan Definisi Tugas untuk menentukan parameter eksekusi untuk aplikasi kontainer. Untuk mengatur parameter tersebut, klik tombol
Buat Definisi Tugas baru . Lalu saya pilih
Fargate sebagai
jenis startup dan beralih ke langkah berikutnya. Di sini saya menetapkan nama sebagai
onboard-dev-taskdef . Untuk parameter
bidang peran IAM pelaksanaan tugas, pilih
Buat peran baru . Adapun sumber daya yang dialokasikan untuk aplikasi ini, saya menetapkan 2 GB memori dan 1 vCPU. Sekarang Anda perlu menambahkan opsi peluncuran kontainer. Saya akan
beri nama container
onboard-dev-container . Saya akan memberi nama nama gambar seperti ini:
aws_account_id.dkr.ecr.us-east-2.amazonaws.com/onboard:latest . Pembantu Kredensial Amazon ECR Docker akan menangani autentikasi ECR, jadi saya membiarkan opsi
otentikasi repositori Pribadi tidak dicentang. Di lingkungan dev, aplikasi tersedia di port 8080, jadi untuk parameter pemetaan port saya menulis
8080 dan pilih protokol
tcp . Parameter URL Database, nama pengguna, dan kata sandi diteruskan ke wadah menggunakan variabel lingkungan. Saya mengatur parameter ini di bagian variabel Lingkungan. Untuk mendapatkan nilai parameter
devdbpassword dari Parameter Store, saya menentukan tipe
ValueFrom . Hal terakhir yang saya konfigurasikan adalah konfigurasi
Log , di sini saya pilih
Auto-configure CloudWatch Logs . Sekarang pembuatan Definisi Tugas selesai.
Namun, peran ecsTaskExecutionRole memerlukan kebijakan untuk mendapatkan devdbpassword dari Parameter Store. Untuk melakukannya, buka Peran IAM dan pilih ecsTaskExecutionRole, klik
Tambahkan kebijakan sebaris . Dalam hal ini, saya menambahkan menggunakan editor visual. Oleh karena itu, di bidang Layanan saya masuk ke
System Manager , di bidang Tindakan -
GetParameters . Lalu saya klik
Tambahkan ARN untuk bidang Sumber Daya dan isi nilai saya:

Pada akhirnya, saya melihat nilai-nilai parameter yang ditetapkan dengan mengklik Tinjau kebijakan, berikan nama dan selesai bekerja dengan konfigurasi ecsTaskExecutionRole.
Ini melengkapi konfigurasi pengaturan aplikasi wadah peluncuran. Sekarang Anda perlu membuat kluster dan layanan ECS.

Buat Layanan ECS Amazon
Aplikasi kontainer kami berjalan sebagai layanan di kluster ECS. Untuk mengonfigurasi, Anda harus melakukan langkah-langkah berikut:
- Langkah 1. Buat kluster Amazon ECS;
- Langkah 2: Membuat Layanan
Langkah 1. Buat Amazon ECS Cluster
Untuk membuat kluster ECS, buka konsol AWS dan pilih layanan ECS. Kemudian klik
Buat Cluster dan pilih templat klaster
hanya Jaringan . Pada halaman berikutnya, saya menamakan cluster sebagai
onboard-dev-cluster dan menyelesaikan cluster. Sekarang saya memiliki klaster ECS berbasis
Fargate .
Langkah 2: Membuat Layanan
Untuk membuat layanan, saya mengklik tautan
on-cluster-dev , kemudian pergi ke tab
Layanan dan klik tombol
Buat . Untuk
tipe peluncuran saya pilih Fargate, untuk
Definisi Tugas saya pilih onboard-dev-taskdef. Selain itu, saya memilih onboard-dev-cluster di bidang Cluster. Di bidang
Nama layanan , saya menulis onboard-dev. Saya menetapkan parameter
Jumlah tugas ke nol, karena saya tidak ingin memulai aplikasi sekarang. Saya membiarkan parameter
persen sehat minimum sama dengan 100, dan
persen maksimum sama dengan 200. Untuk parameter
tipe penempatan, pilih
Pembaruan bergulir dan pergi ke langkah berikutnya.
Pada halaman
Konfigurasi Jaringan , untuk parameter
VPC Cluster , saya memilih VPC yang sebelumnya dibuat yang disebut
VPC Pengembangan . Aplikasi yang sedang dikembangkan hanya tersedia di jaringan pribadi, jadi saya memilih dua subnet pribadi. Untuk mengkonfigurasi grup keamanan, saya klik tombol
Edit , lalu pilih
Pilih grup keamanan yang ada , kemudian grup keamanan
default dan klik tombol
Simpan . Untuk parameter
IP publik yang ditetapkan secara otomatis , saya pilih
Dinonaktifkan . Selanjutnya, untuk parameter
jenis penyeimbang beban , saya memilih
Tidak Ada dan membiarkan opsi
Aktifkan integrasi penemuan layanan tidak dicentang . Lalu saya klik
Next, Next dan
Create service .
Sekarang saya memiliki layanan di mana jumlah pekerjaan yang berjalan adalah nol. Kami akan mengonfigurasi peluncuran aplikasi pada langkah berikutnya.

Pembaruan Layanan
Segera setelah pengembang memperbarui kode aplikasi, penerapan kami melalui pembuatan gambar Docker, mengunggahnya ke Elastic Container Registry, dan akhirnya meluncurkan aplikasi kontainer sebagai layanan di ECS Fargate cluster. Saat ini, jumlah pekerjaan yang berjalan di cluster adalah nol. Agar aplikasi dapat dimulai, Anda perlu memperbarui layanan, menunjukkan jumlah yang sama dengan satu. Saya mengikuti langkah-langkah ini untuk mencapai ini:
- Langkah 1. Menginstal Tugas untuk plugin AWS Bamboo;
- Langkah 2. Memperbarui Layanan ECS
Langkah 1. Menginstal Tugas untuk plugin AWS Bamboo
Tugas untuk AWS Bamboo adalah sebuah plugin yang menyederhanakan persiapan dan pengoperasian sumber daya AWS dari proyek pembangunan dan penyebaran Bamboo. Untuk menginstal plugin ini, saya pergi ke proyek penyebaran, klik
Tambahkan tugas , pergi ke Atlassian Marketplace dan instal
Tugas untuk AWS (Bambu) .
Langkah 2. Memperbarui Layanan ECS
Sekarang dalam proyek penyebaran, saya menambahkan pekerjaan
Layanan ECS Amazon . Kemudian saya menulis di bidang deskripsi pekerjaan
Layanan Pembaruan untuk onBoard-dev . Di bidang Tindakan, pilih
Perbarui Layanan dan
Paksa penyebaran baru . Lalu saya memilih US East (Ohio) sebagai wilayah peluncuran. Kemudian saya menulis di bidang ARN (Nama Sumber Daya Amazon) yang sesuai untuk Task Definiton, cluster dan layanan. Dalam tugas ini, saya memperbarui jumlah tugas berjalan yang diinginkan menjadi satu. Berikutnya, saya mengisi kotak teks konfigurasi penempatan dengan nilai-nilai berikut:
{ "maximumPercent": 200, "minimumHealthyPercent": 100 }
Saya mengatur jaringan tanpa IP publik sebagai berikut:
{ "awsvpcConfiguration": { "assignPublicIp": "DISABLED", "subnets": ["subnet-ID1", "subnet-ID2"], "securityGroups": ["sg-ID"] } }
Di bagian
Sumber untuk
Kredensial Keamanan AWS, saya memilih
Peran IAM untuk EC2 .
Saya harus dapat memperbarui ECS, jadi saya melampirkan kebijakan
AmazonECS_FullAccess ke instance Bamboo EC2 saya. Untuk melakukan ini, buka konsol AWS, pilih IAM. Kemudian saya memilih peran yang saya gunakan untuk server Bamboo saya. Saya klik tombol
Lampirkan kebijakan , saya menemukan kebijakan AmazonECS_FullAccess, saya memilih kotak centang di sebelah kiri dan selesai melampirkan kebijakan.
Ini menyimpulkan pengaturan CI / CD menggunakan AWS dan Bamboo. Dengan demikian, ketika pengembang memperbarui kode aplikasi, mengunggah kode ini ke repositori, pengujian dan perakitan aplikasi diluncurkan. Kemudian gambar Docker dibangun dengan file perang aplikasi, dan gambar ini disalin ke repositori Amazon ECR. Selanjutnya, di kluster Amazon ECS, aplikasi kontainer diluncurkan sebagai layanan, yang memperbarui aplikasi saat ini jika belum dihentikan. Jika aplikasi dihentikan untuk menghemat sumber daya, maka aplikasi akan dimulai. Setelah memeriksa aplikasi di lingkungan dev, Anda dapat menghentikan aplikasi dengan menentukan jumlah pekerjaan yang berjalan di cluster ke nol.
Jika Anda menyukai artikel dan memiliki ide untuk perbaikan, tulis di komentar.