Memulai Amazon ECS menggunakanAWS CDK - Amazon ECS

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

Memulai Amazon ECS menggunakanAWS CDK

AWS Cloud Development Kit (AWS CDK)Ini adalah kerangka kerja Infrastructure-as-Code (IAC) yang dapat Anda gunakan untuk menentukan infrastrukturAWS cloud dengan menggunakan bahasa pemrograman yang Anda pilih. Untuk menentukan infrastruktur cloud Anda sendiri, Anda terlebih dahulu menulis aplikasi (dalam salah satu bahasa yang didukung CDK) yang berisi satu tumpukan atau beberapa tumpukan. Kemudian, Anda mensintesis keAWS CloudFormation template dan menyebarkan sumber daya Anda untuk AndaAkun AWS. Ikuti langkah-langkah dalam topik ini untuk menerapkan server web kontainer dengan Amazon Elastic Container Service (Amazon ECS) danAWS CDK on Fargate.

AWSConstruct Library, yang disertakan dengan CDK, menyediakan modul yang dapat Anda gunakan untuk memodelkan sumber daya yangLayanan AWS disediakan. Untuk layanan populer, pustaka menyediakan pembangunan terkurasi 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 ApplicationLoadBalancedFargateServicekonstruk. Pembangunan ini men-deploy layanan Amazon ECS di Fargate dengan Application Load Balancer. aws-ecs-patternsModul ini juga mencakup konstruksi yang menggunakan load balancer jaringan dan berjalan di Amazon EC2.

Sebelum memulai tugas ini, siapkan lingkunganAWS CDK pengembangan Anda, dan instalAWS CDK dengan menjalankan perintah berikut. Untuk petunjuk tentang cara mengatur lingkunganAWS CDK pengembangan Anda, lihat Memulai DenganAWS CDK - Prasyarat.

npm install -g aws-cdk
catatan

Instruksi ini menganggap Anda menggunakanAWS 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 dependensi dasar.AWS CDK

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 instruksi ini.

AWS CDKv2 termasuk konstruksi stabil untuk semuaLayanan AWS dalam satu paket yang disebutaws-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 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: GunakanAWS CDK untuk menentukan server web kontainer di Fargate

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

DalamAWS 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 dalam tumpukan di-deploy pada saat yang bersamaan. Jika sumber daya gagal untuk men-deploy, sumber daya lain yang sudah di-deploy akan dilakukan rollback. AWS CDKAplikasi dapat berisi beberapa tumpukan, dan sumber daya dalam satu tumpukan dapat merujuk ke sumber daya di tumpukan lain.

TypeScript

Perbaruilib/hello-ecs-stack.ts sehingga menyerupai berikut.

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

Perbaruilib/hello-ecs-stack.js sehingga menyerupai berikut.

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

Perbaruihello-ecs/hello_ecs_stack.py sehingga menyerupai berikut.

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

Perbaruisrc/main/java/com.myorg/HelloEcsStack.java sehingga menyerupai berikut.

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#

Perbaruisrc/HelloEcs/HelloEcsStack.cs sehingga menyerupai berikut.

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 ini:

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

  • Klaster Amazon ECS

  • Instans Amazon VPC dan Amazon EC2

  • Grup Auto Scaling

  • Application Load Balancer

  • IAM role dan kebijakan

Beberapa sumber daya yang disediakan secara otomatis dibagi oleh semua layanan Amazon ECS yang didefinisikan dalam tumpukan.

Simpan file sumber tersebut, lalu jalankancdk synth perintah di direktori utama aplikasi Anda. AWS CDKmenjalankan aplikasi dan mensintesisAWS CloudFormation templat dari aplikasi tersebut, dan kemudian menampilkan templat. Template adalah sekitar 600 baris file YAML. 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, jalankancdk deploy perintah di direktori utama aplikasi Anda. Anda diminta untuk menyetujui kebijakan IAM yangAWS CDK dibuat oleh.

Penyebaran membutuhkan waktu beberapa menit di manaAWS CDK menciptakan beberapa sumber daya. Beberapa baris terakhir output dari deployment 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 deployment dan tempel ke peramban web Anda. Pesan selamat datang berikut dari server web ditampilkan.


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

Langkah 4: Bersihkan

Setelah Anda selesai dengan server web, akhiri layanan menggunakan CDK dengan menjalankancdk destroy perintah di direktori utama aplikasi Anda. Melakukan hal ini mencegah Anda dari dikenakan biaya yang tidak diinginkan di future.

Langkah selanjutnya

Untuk mempelajari lebih lanjut tentang cara mengembangkanAWS infrastruktur menggunakanAWS CDK, lihat PanduanAWS CDK Pengembang.

Untuk informasi tentang menulisAWS CDK aplikasi dalam bahasa pilihan Anda, lihat hal berikut:

TypeScript

Bekerja denganAWS CDK di TypeScript

JavaScript

Bekerja denganAWS CDK di JavaScript

Python

Bekerja denganAWS CDK Python

Java

Bekerja denganAWS CDK di Jawa

C#

Bekerja denganAWS CDK di C#

Untuk informasi selengkapnya tentang modul PustakaAWS Konstruk yang digunakan pada topik ini, lihat gambaran umum ReferensiAWS CDK API berikut ini.