Memulai Amazon ECS menggunakan AWS CDK - Amazon Elastic Container Service

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Memulai Amazon ECS menggunakan AWS CDK

AWS Cloud Development Kit (AWS CDK)Ini adalah kerangka Infrastructure-as-Code (IAC) yang dapat Anda gunakan untuk mendefinisikan infrastruktur AWS cloud dengan menggunakan bahasa pemrograman pilihan Anda. Untuk menentukan infrastruktur cloud Anda sendiri, pertama-tama Anda menulis aplikasi (dalam salah satu bahasa yang didukung CDK) yang berisi satu atau beberapa tumpukan. Kemudian, Anda mensintesisnya ke AWS CloudFormation template dan menyebarkan sumber daya Anda ke template Anda. Akun AWS Ikuti langkah-langkah dalam topik ini untuk menerapkan server web dalam kontainer dengan Amazon Elastic Container Service (Amazon ECS) Container Service (Amazon ECS) dan di Fargate. AWS CDK

Perpustakaan AWS Konstruksi, disertakan dengan CDK, menyediakan modul yang dapat Anda gunakan untuk memodelkan sumber daya yang Layanan AWS disediakan. Untuk layanan populer, perpustakaan menyediakan konstruksi yang dikuratori dengan default cerdas dan praktik terbaik. Salah satu modul ini, khususnyaaws-ecs-patterns, menyediakan abstraksi tingkat tinggi yang dapat Anda gunakan untuk menentukan layanan kontainer Anda dan semua sumber daya pendukung yang diperlukan dalam beberapa baris kode.

Topik ini menggunakan ApplicationLoadBalancedFargateServicekonstruksi. Konstruksi ini menyebarkan layanan Amazon ECS di Fargate di belakang penyeimbang beban aplikasi. aws-ecs-patternsModul ini juga mencakup konstruksi yang menggunakan penyeimbang beban jaringan dan berjalan di Amazon EC2.

Sebelum memulai tugas ini, atur lingkungan AWS CDK pengembangan Anda, dan instal AWS CDK dengan menjalankan perintah berikut. Untuk petunjuk tentang cara mengatur lingkungan AWS CDK pengembangan Anda, lihat Memulai Dengan AWS CDK - Prasyarat.

npm install -g aws-cdk
catatan

Instruksi ini mengasumsikan Anda menggunakan AWS CDK v2.

Langkah 1: Siapkan proyek AWS CDK Anda

Buat direktori untuk aplikasi AWS CDK baru dan inisialisasi proyek tersebut.

TypeScript
mkdir hello-ecs cd hello-ecs cdk init --language typescript
JavaScript
mkdir hello-ecs cd hello-ecs cdk init --language javascript
Python
mkdir hello-ecs cd hello-ecs cdk init --language python

Setelah proyek dimulai, aktifkan lingkungan virtual proyek dan instal AWS CDK dependensi dasar.

source .venv/bin/activate python -m pip install -r requirements.txt
Java
mkdir hello-ecs cd hello-ecs cdk init --language java

Impor proyek Maven ini ke IDE Java Anda. Misalnya, di Eclipse, gunakan File > Import > Maven > Existing Maven Projects.

C#
mkdir hello-ecs cd hello-ecs cdk init --language csharp
catatan

Templat aplikasi AWS CDK menggunakan nama direktori proyek untuk memberikan nama pada file dan kelas sumber. Dalam contoh ini, direktori diberi namahello-ecs. Jika Anda menggunakan nama direktori project yang berbeda, aplikasi Anda tidak akan cocok dengan petunjuk ini.

AWS CDKv2 menyertakan konstruksi stabil untuk semua Layanan AWS dalam satu paket yang dipanggilaws-cdk-lib. Paket ini diinstal sebagai dependensi ketika Anda menginisialisasi proyek. Saat bekerja dengan bahasa pemrograman tertentu, paket diinstal saat Anda membangun proyek untuk pertama kalinya. Topik ini mencakup cara menggunakan konstruksi Pola Amazon ECS, yang menyediakan abstraksi tingkat tinggi untuk bekerja dengan Amazon ECS. Modul ini bergantung pada konstruksi Amazon ECS dan konstruksi lainnya untuk menyediakan sumber daya yang dibutuhkan aplikasi Amazon ECS Anda.

Nama-nama yang Anda gunakan untuk mengimpor pustaka ini ke dalam aplikasi CDK Anda mungkin sedikit berbeda tergantung pada bahasa pemrograman yang Anda gunakan. Sebagai referensi, berikut ini adalah nama-nama yang digunakan dalam setiap bahasa pemrograman CDK yang didukung.

TypeScript
aws-cdk-lib/aws-ecs aws-cdk-lib/aws-ecs-patterns
JavaScript
aws-cdk-lib/aws-ecs aws-cdk-lib/aws-ecs-patterns
Python
aws_cdk.aws_ecs aws_cdk.aws_ecs_patterns
Java
software.amazon.awscdk.services.ecs software.amazon.awscdk.services.ecs.patterns
C#
Amazon.CDK.AWS.ECS Amazon.CDK.AWS.ECS.Patterns

Langkah 2: Gunakan AWS CDK untuk mendefinisikan server web kontainer di Fargate

Gunakan gambar kontainer amazon-ecs-sampledari DockerHub. Gambar ini berisi aplikasi web PHP yang berjalan di Amazon Linux 2.

Dalam AWS CDK proyek yang Anda buat, edit file yang berisi definisi tumpukan agar menyerupai salah satu contoh berikut.

catatan

Tumpukan adalah unit penyebaran. Semua sumber daya harus dalam tumpukan, dan semua sumber daya yang ada di tumpukan digunakan pada saat yang sama. Jika sumber daya gagal diterapkan, sumber daya lain yang sudah digunakan akan digulirkan kembali. AWS CDKAplikasi dapat berisi beberapa tumpukan, dan sumber daya dalam satu tumpukan dapat merujuk ke sumber daya di tumpukan lain.

TypeScript

Perbarui lib/hello-ecs-stack.ts sehingga menyerupai yang berikut ini.

import * as cdk from 'aws-cdk-lib'; import { Construct } from 'constructs'; import * as ecs from 'aws-cdk-lib/aws-ecs'; import * as ecsp from 'aws-cdk-lib/aws-ecs-patterns'; export class HelloEcsStack extends cdk.Stack { constructor(scope: Construct, id: string, props?: cdk.StackProps) { super(scope, id, props); new ecsp.ApplicationLoadBalancedFargateService(this, 'MyWebServer', { taskImageOptions: { image: ecs.ContainerImage.fromRegistry('amazon/amazon-ecs-sample'), }, publicLoadBalancer: true }); } }
JavaScript

Perbarui lib/hello-ecs-stack.js sehingga menyerupai yang berikut ini.

const cdk = require('aws-cdk-lib'); const { Construct } = require('constructs'); const ecs = require('aws-cdk-lib/aws-ecs'); const ecsp = require('aws-cdk-lib/aws-ecs-patterns'); class HelloEcsStack extends cdk.Stack { constructor(scope = Construct, id = string, props = cdk.StackProps) { super(scope, id, props); new ecsp.ApplicationLoadBalancedFargateService(this, 'MyWebServer', { taskImageOptions: { image: ecs.ContainerImage.fromRegistry('amazon/amazon-ecs-sample'), }, publicLoadBalancer: true }); } } module.exports = { HelloEcsStack }
Python

Perbarui hello-ecs/hello_ecs_stack.py sehingga menyerupai yang berikut ini.

import aws_cdk as cdk from constructs import Construct import aws_cdk.aws_ecs as ecs import aws_cdk.aws_ecs_patterns as ecsp class HelloEcsStack(cdk.Stack): def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None: super().__init__(scope, construct_id, **kwargs) ecsp.ApplicationLoadBalancedFargateService(self, "MyWebServer", task_image_options=ecsp.ApplicationLoadBalancedTaskImageOptions( image=ecs.ContainerImage.from_registry("amazon/amazon-ecs-sample")), public_load_balancer=True )
Java

Perbarui src/main/java/com.myorg/HelloEcsStack.java sehingga menyerupai yang berikut ini.

package com.myorg; import software.constructs.Construct; import software.amazon.awscdk.Stack; import software.amazon.awscdk.StackProps; import software.amazon.awscdk.services.ecs.ContainerImage; import software.amazon.awscdk.services.ecs.patterns.ApplicationLoadBalancedFargateService; import software.amazon.awscdk.services.ecs.patterns.ApplicationLoadBalancedTaskImageOptions; public class HelloEcsStack extends Stack { public HelloEcsStack(final Construct scope, final String id) { this(scope, id, null); } public HelloEcsStack(final Construct scope, final String id, final StackProps props) { super(scope, id, props); ApplicationLoadBalancedFargateService.Builder.create(this, "MyWebServer") .taskImageOptions(ApplicationLoadBalancedTaskImageOptions.builder() .image(ContainerImage.fromRegistry("amazon/amazon-ecs-sample")) .build()) .publicLoadBalancer(true) .build(); } }
C#

Perbarui src/HelloEcs/HelloEcsStack.cs sehingga menyerupai yang berikut ini.

using Amazon.CDK; using Constructs; using Amazon.CDK.AWS.ECS; using Amazon.CDK.AWS.ECS.Patterns; namespace HelloEcs { public class HelloEcsStack : Stack { internal HelloEcsStack(Construct scope, string id, IStackProps props = null) : base(scope, id, props) { new ApplicationLoadBalancedFargateService(this, "MyWebServer", new ApplicationLoadBalancedFargateServiceProps { TaskImageOptions = new ApplicationLoadBalancedTaskImageOptions { Image = ContainerImage.FromRegistry("amazon/amazon-ecs-sample") }, PublicLoadBalancer = true }); } } }

Cuplikan pendek sebelumnya mencakup yang berikut:

  • Nama logis layanan:MyWebServer.

  • Gambar kontainer yang diperoleh dari DockerHub:amazon/amazon-ecs-sample.

  • Informasi relevan lainnya, seperti fakta bahwa penyeimbang beban memiliki alamat publik dan dapat diakses dari Internet.

AWS CDKAkan membuat semua sumber daya yang diperlukan untuk menyebarkan server web termasuk sumber daya berikut. Sumber daya ini dihilangkan dalam contoh ini.

  • Kluster Amazon ECS

  • Instans Amazon VPC dan Amazon EC2

  • Grup Auto Scaling

  • Penyeimbang Beban Aplikasi

  • Peran dan kebijakan IAM

Beberapa sumber daya yang disediakan secara otomatis akan dibagikan oleh semua layanan Amazon ECS yang ditentukan dalam tumpukan.

Simpan file sumber, lalu jalankan cdk synth perintah di direktori utama aplikasi Anda. AWS CDKMenjalankan aplikasi dan mensintesis AWS CloudFormation template darinya, dan kemudian menampilkan template. Template adalah file YAML sekitar 600 baris. Awal file ditampilkan di sini. Template Anda mungkin berbeda dari contoh ini.

Resources: MyWebServerLB3B5FD3AB: Type: AWS::ElasticLoadBalancingV2::LoadBalancer Properties: LoadBalancerAttributes: - Key: deletion_protection.enabled Value: "false" Scheme: internet-facing SecurityGroups: - Fn::GetAtt: - MyWebServerLBSecurityGroup01B285AA - GroupId Subnets: - Ref: EcsDefaultClusterMnL3mNNYNVpcPublicSubnet1Subnet3C273B99 - Ref: EcsDefaultClusterMnL3mNNYNVpcPublicSubnet2Subnet95FF715A Type: application DependsOn: - EcsDefaultClusterMnL3mNNYNVpcPublicSubnet1DefaultRouteFF4E2178 - EcsDefaultClusterMnL3mNNYNVpcPublicSubnet2DefaultRouteB1375520 Metadata: aws:cdk:path: HelloEcsStack/MyWebServer/LB/Resource MyWebServerLBSecurityGroup01B285AA: Type: AWS::EC2::SecurityGroup Properties: GroupDescription: Automatically created Security Group for ELB HelloEcsStackMyWebServerLB06757F57 SecurityGroupIngress: - CidrIp: 0.0.0.0/0 Description: Allow from anyone on port 80 FromPort: 80 IpProtocol: tcp ToPort: 80 VpcId: Ref: EcsDefaultClusterMnL3mNNYNVpc7788A521 Metadata: aws:cdk:path: HelloEcsStack/MyWebServer/LB/SecurityGroup/Resource # and so on for another few hundred lines

Untuk menyebarkan layanan di AndaAkun AWS, jalankan cdk deploy perintah di direktori utama aplikasi Anda. Anda diminta untuk menyetujui kebijakan IAM yang dihasilkan. AWS CDK

Penyebaran memakan waktu beberapa menit di mana AWS CDK menciptakan beberapa sumber daya. Beberapa baris terakhir dari output dari penyebaran termasuk nama host publik penyeimbang beban dan URL server web baru Anda. Mereka adalah sebagai berikut.

Outputs: HelloEcsStack.MyWebServerLoadBalancerDNSXXXXXXX = Hello-MyWeb-ZZZZZZZZZZZZZ-ZZZZZZZZZZ.us-west-2.elb.amazonaws.com HelloEcsStack.MyWebServerServiceURLYYYYYYYY = http://Hello-MyWeb-ZZZZZZZZZZZZZ-ZZZZZZZZZZ.us-west-2.elb.amazonaws.com

Langkah 3: Uji server web

Salin URL dari output penyebaran dan tempel ke browser web Anda. Pesan selamat datang berikut dari server web ditampilkan.


                Tangkapan layar dari aplikasi sampel Amazon ECS. Output menunjukkan bahwa “Aplikasi Anda sekarang berjalan di Amazon ECS”.

Langkah 4: Membersihkan

Setelah Anda selesai dengan server web, akhiri layanan menggunakan CDK dengan menjalankan cdk destroy perintah di direktori utama aplikasi Anda. Melakukan hal ini mencegah Anda dari menimbulkan biaya yang tidak diinginkan di masa depan.

Langkah selanjutnya

Untuk mempelajari lebih lanjut tentang cara mengembangkan AWS infrastruktur menggunakanAWS CDK, lihat Panduan AWS CDK Pengembang.

Untuk informasi tentang menulis AWS CDK aplikasi dalam bahasa pilihan Anda, lihat berikut ini:

TypeScript

Bekerja dengan AWS CDK di TypeScript

JavaScript

Bekerja dengan AWS CDK di JavaScript

Python

Bekerja dengan AWS CDK in Python

Java

Bekerja dengan AWS CDK di Jawa

C#

Bekerja dengan AWS CDK di C #

Untuk informasi selengkapnya tentang modul AWS Construct Library yang digunakan dalam topik ini, lihat ikhtisar Referensi AWS CDK API berikut.