View a markdown version of this page

Tutorial: Buat yang pertama AWS Aplikasi CDK - AWS Kit Pengembangan Cloud (AWS CDK) v2

Ini adalah Panduan Pengembang AWS CDK v2. CDK v1 yang lebih lama memasuki pemeliharaan pada 1 Juni 2022 dan mengakhiri dukungan pada 1 Juni 2023.

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

Tutorial: Buat yang pertama AWS Aplikasi CDK

Mulailah menggunakan AWS Cloud Development Kit (AWS CDK) dengan menggunakan CDK Command Line Interface ( AWS CDK CLI) untuk mengembangkan aplikasi AWS CDK pertama Anda, mem-bootstrap AWS lingkungan Anda, dan menerapkan aplikasi Anda. AWS

Prasyarat

Sebelum memulai tutorial ini, selesaikan semua langkah pengaturan di Memulai dengan AWS CDK.

Tentang tutorial ini

Dalam tutorial ini, Anda akan membuat dan menerapkan aplikasi sederhana AWS menggunakan AWS CDK. Aplikasi ini terdiri dari fungsi AWS Lambda yang mengembalikan Hello World! pesan saat dipanggil. Fungsi akan dipanggil melalui URL fungsi Lambda yang berfungsi sebagai titik akhir HTTP (S) khusus untuk fungsi Lambda Anda.

Melalui tutorial ini, Anda akan melakukan hal berikut:

  • Buat proyek Anda — Buat proyek CDK menggunakan perintah CDK CLIcdk init.

  • Konfigurasikan AWS lingkungan Anda — Konfigurasikan AWS lingkungan tempat Anda akan menerapkan aplikasi Anda.

  • Bootstrap AWS lingkungan Anda - Siapkan AWS lingkungan Anda untuk penerapan dengan melakukan bootstrap menggunakan perintah CDK CLI. cdk bootstrap

  • Kembangkan aplikasi Anda — Gunakan konstruksi dari Construc AWS t Library untuk menentukan fungsi Lambda dan sumber daya URL fungsi Lambda.

  • Siapkan aplikasi Anda untuk pener apan — Gunakan CDK CLI untuk membuat aplikasi Anda dan mensintesis template. AWS CloudFormation

  • Menyebarkan aplikasi Anda — Gunakan cdk deploy perintah CDK CLI untuk menyebarkan aplikasi Anda dan menyediakan sumber daya Anda AWS .

  • Berinteraksi dengan aplikasi Anda — Berinteraksi dengan fungsi Lambda yang Anda gunakan AWS dengan memanggilnya dan menerima tanggapan.

  • Ubah aplikasi Anda — Ubah fungsi Lambda Anda dan terapkan untuk mengimplementasikan perubahan Anda.

  • Hapus aplikasi Anda — Hapus semua sumber daya yang Anda buat dengan menggunakan perintah CDK CLIcdk destroy.

Langkah 1: Buat proyek CDK Anda

Pada langkah ini, Anda membuat proyek CDK baru. Proyek CDK harus berada di direktorinya sendiri, dengan dependensi modul lokalnya sendiri.

Untuk membuat proyek CDK
  1. Dari direktori awal pilihan Anda, buat dan navigasikan ke direktori bernamahello-cdk:

    $ mkdir hello-cdk && cd hello-cdk
    penting

    Pastikan untuk memberi nama direktori proyek Andahello-cdk, persis seperti yang ditunjukkan di sini. CDK CLI menggunakan nama direktori ini untuk memberi nama hal-hal dalam kode CDK Anda. Jika Anda menggunakan nama direktori yang berbeda, Anda akan mengalami masalah selama tutorial ini.

  2. Dari hello-cdk direktori, inisialisasi proyek CDK baru menggunakan perintah CDK CLI. cdk init Tentukan app template dan bahasa pemrograman pilihan Anda dengan --language opsi:

    contoh
    TypeScript
    $ cdk init app --language typescript
    JavaScript
    $ cdk init app --language javascript
    Python
    $ cdk init app --language python

    Setelah aplikasi dibuat, masukkan juga dua perintah berikut. Ini mengaktifkan lingkungan virtual Python aplikasi dan menginstal dependensi inti AWS CDK.

    $ source .venv/bin/activate # On Windows, run `.\venv\Scripts\activate` instead $ python -m pip install -r requirements.txt
    Java
    $ cdk init app --language java

    Jika Anda menggunakan IDE, Anda sekarang dapat membuka atau mengimpor proyek. DiEclipse, misalnya, pilih File > Impor > Maven > Proyek Maven yang Ada. Pastikan bahwa pengaturan proyek diatur untuk menggunakan Java 8 (1.8).

    C#
    $ cdk init app --language csharp

    Jika Anda menggunakan Visual Studio, buka file solusi di src direktori.

    Go
    $ cdk init app --language go

    Setelah aplikasi dibuat, masukkan juga perintah berikut untuk menginstal modul AWS Construct Library yang dibutuhkan aplikasi.

    $ go get

Per cdk init intah ini membuat struktur file dan folder dalam hello-cdk direktori untuk membantu mengatur kode sumber untuk aplikasi CDK Anda. Struktur file dan folder ini disebut proyek CDK Anda. Luangkan waktu sejenak untuk menjelajahi proyek CDK Anda.

Jika Anda telah Git menginstal, setiap proyek yang Anda buat menggunakan juga cdk init diinisialisasi sebagai Git repositori.

Selama inisialisasi proyek, CDK CLI membuat aplikasi CDK yang berisi tumpukan CDK tunggal. Instance aplikasi CDK dibuat menggunakan App konstruk. Berikut ini adalah bagian dari kode ini dari file aplikasi CDK Anda:

contoh
TypeScript

Terletak dibin/hello-cdk.ts:

#!/usr/bin/env node import 'source-map-support/register'; import * as cdk from 'aws-cdk-lib'; import { HelloCdkStack } from '../lib/hello-cdk-stack'; const app = new cdk.App(); new HelloCdkStack(app, 'HelloCdkStack', { });
JavaScript

Terletak dibin/hello-cdk.js:

#!/usr/bin/env node const cdk = require('aws-cdk-lib'); const { HelloCdkStack } = require('../lib/hello-cdk-stack'); const app = new cdk.App(); new HelloCdkStack(app, 'HelloCdkStack', { });
Python

Terletak diapp.py:

#!/usr/bin/env python3 import os import aws_cdk as cdk from hello_cdk.hello_cdk_stack import HelloCdkStack app = cdk.App() HelloCdkStack(app, "HelloCdkStack",) app.synth()
Java

Terletak disrc/main/java/…​/HelloCdkApp.java:

package com.myorg; import software.amazon.awscdk.App; import software.amazon.awscdk.Environment; import software.amazon.awscdk.StackProps; import java.util.Arrays; public class HelloCdkApp { public static void main(final String[] args) { App app = new App(); new HelloCdkStack(app, "HelloCdkStack", StackProps.builder() .build()); app.synth(); } }
C#

Terletak disrc/HelloCdk/Program.cs:

using Amazon.CDK; using System; using System.Collections.Generic; using System.Linq; namespace HelloCdk { sealed class Program { public static void Main(string[] args) { var app = new App(); new HelloCdkStack(app, "HelloCdkStack", new StackProps {}); app.Synth(); } } }
Go

Terletak dihello-cdk.go:

package main import ( "github.com/aws/aws-cdk-go/awscdk/v2" "github.com/aws/constructs-go/constructs/v10" "github.com/aws/jsii-runtime-go" ) // ... func main() { defer jsii.Close() app := awscdk.NewApp(nil) NewHelloCdkStack(app, "HelloCdkStack", &HelloCdkStackProps{ awscdk.StackProps{ Env: env(), }, }) app.Synth(nil) } // ...

Tumpukan CDK dibuat menggunakan Stack konstruk. Berikut ini adalah bagian dari kode ini dari file tumpukan CDK Anda:

contoh
TypeScript

Terletak dilib/hello-cdk-stack.ts:

import * as cdk from 'aws-cdk-lib'; import { Construct } from 'constructs'; export class HelloCdkStack extends cdk.Stack { constructor(scope: Construct, id: string, props?: cdk.StackProps) { super(scope, id, props); // Define your constructs here } }
JavaScript

Terletak dilib/hello-cdk-stack.js:

const { Stack } = require('aws-cdk-lib'); class HelloCdkStack extends Stack { constructor(scope, id, props) { super(scope, id, props); // Define your constructs here } } module.exports = { HelloCdkStack }
Python

Terletak dihello_cdk/hello_cdk_stack.py:

from aws_cdk import ( Stack, ) from constructs import Construct class HelloCdkStack(Stack): def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None: super().__init__(scope, construct_id, **kwargs) # Define your constructs here
Java

Terletak disrc/main/java/…​/HelloCdkStack.java:

package com.myorg; import software.constructs.Construct; import software.amazon.awscdk.Stack; import software.amazon.awscdk.StackProps; public class HelloCdkStack extends Stack { public HelloCdkStack(final Construct scope, final String id) { this(scope, id, null); } public HelloCdkStack(final Construct scope, final String id, final StackProps props) { super(scope, id, props); // Define your constructs here } }
C#

Terletak disrc/HelloCdk/HelloCdkStack.cs:

using Amazon.CDK; using Constructs; namespace HelloCdk { public class HelloCdkStack : Stack { internal HelloCdkStack(Construct scope, string id, IStackProps props = null) : base(scope, id, props) { // Define your constructs here } } }
Go

Terletak dihello-cdk.go:

package main import ( "github.com/aws/aws-cdk-go/awscdk/v2" "github.com/aws/constructs-go/constructs/v10" "github.com/aws/jsii-runtime-go" ) type HelloCdkStackProps struct { awscdk.StackProps } func NewHelloCdkStack(scope constructs.Construct, id string, props *HelloCdkStackProps) awscdk.Stack { var sprops awscdk.StackProps if props != nil { sprops = props.StackProps } stack := awscdk.NewStack(scope, &id, &sprops) return stack } // ...

Langkah 2: Konfigurasikan AWS lingkungan

Pada langkah ini, Anda mengonfigurasi AWS lingkungan untuk tumpukan CDK Anda. Dengan melakukan ini, Anda menentukan lingkungan mana tumpukan CDK Anda akan digunakan.

Pertama, tentukan AWS lingkungan yang ingin Anda gunakan. AWS Lingkungan terdiri dari AWS akun dan Wil AWS ayah.

Bila Anda menggunakan AWS CLI untuk mengonfigurasi kredentif keamanan pada mesin lokal Anda, Anda kemudian dapat menggunakan AWS CLI untuk mendapatkan informasi AWS lingkungan untuk profil tertentu.

Untuk menggunakan AWS CLI untuk mendapatkan ID AWS akun Anda
  1. Jalankan perintah AWS CLI berikut untuk mendapatkan ID AWS akun untuk default profil Anda:

    $ aws sts get-caller-identity --query "Account" --output text
  2. Jika Anda lebih suka menggunakan profil bernama, berikan nama profil Anda menggunakan --profile opsi:

    $ aws sts get-caller-identity --profile your-profile-name --query "Account" --output text
Untuk menggunakan AWS CLI untuk mendapatkan Wilayah Anda AWS
  1. Jalankan perintah AWS CLI berikut untuk mendapatkan Wilayah yang Anda konfigurasi untuk default profil Anda:

    $ aws configure get region
  2. Jika Anda lebih suka menggunakan profil bernama, berikan nama profil Anda menggunakan --profile opsi:

    $ aws configure get region --profile your-profile-name

Selanjutnya, Anda akan mengonfigurasi AWS lingkungan untuk tumpukan CDK Anda dengan memodifikasi HelloCdkStack instance di file aplikasi Anda. Untuk tutorial ini, Anda akan membuat kode keras informasi AWS lingkungan Anda. Ini tidak disarankan untuk lingkungan produksi. Untuk informasi tentang cara lain untuk mengkonfigurasi lingkungan, lihat Meng onfigurasi lingkungan untuk digunakan dengan AWS CDK.

Untuk mengkonfigurasi lingkungan untuk tumpukan CDK Anda
  1. Dalam file aplikasi Anda, gunakan env properti Stack konstruksi untuk mengkonfigurasi lingkungan Anda. Berikut ini adalah contohnya:

    contoh
    TypeScript

    Terletak dibin/hello-cdk.ts:

    #!/usr/bin/env node import 'source-map-support/register'; import * as cdk from 'aws-cdk-lib'; import { HelloCdkStack } from '../lib/hello-cdk-stack'; const app = new cdk.App(); new HelloCdkStack(app, 'HelloCdkStack', { env: { account: '123456789012', region: 'us-east-1' }, });
    JavaScript

    Terletak dibin/hello-cdk.js:

    #!/usr/bin/env node const cdk = require('aws-cdk-lib'); const { HelloCdkStack } = require('../lib/hello-cdk-stack'); const app = new cdk.App(); new HelloCdkStack(app, 'HelloCdkStack', { env: { account: '123456789012', region: 'us-east-1' }, });
    Python

    Terletak diapp.py:

    #!/usr/bin/env python3 import os import aws_cdk as cdk from hello_cdk.hello_cdk_stack import HelloCdkStack app = cdk.App() HelloCdkStack(app, "HelloCdkStack", env=cdk.Environment(account='123456789012', region='us-east-1'), ) app.synth()
    Java

    Terletak disrc/main/java/…​/HelloCdkApp.java:

    package com.myorg; import software.amazon.awscdk.App; import software.amazon.awscdk.Environment; import software.amazon.awscdk.StackProps; import java.util.Arrays; public class HelloCdkApp { public static void main(final String[] args) { App app = new App(); new HelloCdkStack(app, "HelloCdkStack", StackProps.builder() .env(Environment.builder() .account("123456789012") .region("us-east-1") .build()) .build()); app.synth(); } }
    C#

    Terletak disrc/HelloCdk/Program.cs:

    using Amazon.CDK; using System; using System.Collections.Generic; using System.Linq; namespace HelloCdk { sealed class Program { public static void Main(string[] args) { var app = new App(); new HelloCdkStack(app, "HelloCdkStack", new StackProps { Env = new Amazon.CDK.Environment { Account = "123456789012", Region = "us-east-1", } }); app.Synth(); } } }
    Go

    Terletak dihello-cdk.go:

    package main import ( "github.com/aws/aws-cdk-go/awscdk/v2" "github.com/aws/constructs-go/constructs/v10" "github.com/aws/jsii-runtime-go" ) // ... func main() { defer jsii.Close() app := awscdk.NewApp(nil) NewHelloCdkStack(app, "HelloCdkStack", &HelloCdkStackProps{ awscdk.StackProps{ Env: env(), }, }) app.Synth(nil) } func env() *awscdk.Environment { return &awscdk.Environment{ Account: jsii.String("123456789012"), Region: jsii.String("us-east-1"), } }

Langkah 3: Bootstrap Anda AWS lingkungan

Pada langkah ini, Anda mem-bootstrap AWS lingkungan yang Anda konfigurasikan pada langkah sebelumnya. Ini mempersiapkan lingkungan Anda untuk penerapan CDK.

Untuk mem-bootstrap lingkungan Anda, jalankan yang berikut ini dari root proyek CDK Anda:

$ cdk bootstrap

Dengan melakukan bootstrap dari root proyek CDK Anda, Anda tidak perlu memberikan informasi tambahan apa pun. CDK CLI memperoleh informasi lingkungan dari proyek Anda. Saat Anda melakukan bootstrap di luar proyek CDK, Anda harus memberikan informasi lingkungan dengan perintah tersebutcdk bootstrap. Untuk informasi selengkapnya, lihat Bootstrap lingkungan Anda untuk digunakan dengan AWS CD K.

Langkah 4: Bangun aplikasi CDK Anda

Di sebagian besar lingkungan pemrograman, Anda membangun atau mengkompilasi kode setelah membuat perubahan. Ini tidak diperlukan dengan AWS CDK karena CDK CLI akan secara otomatis melakukan langkah ini. Namun, Anda masih dapat membangun secara manual ketika Anda ingin menangkap kesalahan sintaks dan jenis. Berikut ini adalah contohnya:

contoh
TypeScript
$ npm run build > hello-cdk@0.1.0 build > tsc
JavaScript

Tidak ada langkah membangun yang diperlukan.

Python

Tidak ada langkah membangun yang diperlukan.

Java
$ mvn compile -q

Atau tekan Control-B di Eclipse (IDE Java lainnya mungkin berbeda)

C#
$ dotnet build src

Atau tekan F6 di Visual Studio

Go
$ go build

Langkah 5: Buat daftar tumpukan CDK di aplikasi Anda

Pada titik ini, Anda harus memiliki aplikasi CDK yang berisi satu tumpukan CDK. Untuk memverifikasi, gunakan cdk list perintah CDK CLI untuk menampilkan tumpukan Anda. Output harus menampilkan tumpukan tunggal bernamaHelloCdkStack:

$ cdk list HelloCdkStack

Jika Anda tidak melihat output ini, verifikasi bahwa Anda berada di direktori kerja yang benar dari proyek Anda dan coba lagi. Jika Anda masih tidak melihat tumpukan Anda, ulangi Langkah 1: Buat proyek CDK Anda dan coba lagi.

Langkah 6: Tentukan fungsi Lambda Anda

Pada langkah ini, Anda mengimpor aws_lambda modul dari AWS Construct Library dan menggunakan konstruk Function L2.

Ubah file tumpukan CDK Anda sebagai berikut:

contoh
TypeScript

Terletak dilib/hello-cdk-stack.ts:

import * as cdk from 'aws-cdk-lib'; import { Construct } from 'constructs'; // Import the Lambda module import * as lambda from 'aws-cdk-lib/aws-lambda'; export class HelloCdkStack extends cdk.Stack { constructor(scope: Construct, id: string, props?: cdk.StackProps) { super(scope, id, props); // Define the Lambda function resource const myFunction = new lambda.Function(this, "HelloWorldFunction", { runtime: lambda.Runtime.NODEJS_20_X, // Provide any supported Node.js runtime handler: "index.handler", code: lambda.Code.fromInline(` exports.handler = async function(event) { return { statusCode: 200, body: JSON.stringify('Hello World!'), }; }; `), }); } }
JavaScript

Terletak dilib/hello-cdk-stack.js:

const { Stack } = require('aws-cdk-lib'); // Import the Lambda module const lambda = require('aws-cdk-lib/aws-lambda'); class HelloCdkStack extends Stack { constructor(scope, id, props) { super(scope, id, props); // Define the Lambda function resource const myFunction = new lambda.Function(this, "HelloWorldFunction", { runtime: lambda.Runtime.NODEJS_20_X, // Provide any supported Node.js runtime handler: "index.handler", code: lambda.Code.fromInline(` exports.handler = async function(event) { return { statusCode: 200, body: JSON.stringify('Hello World!'), }; }; `), }); } } module.exports = { HelloCdkStack }
Python

Terletak dihello_cdk/hello_cdk_stack.py:

from aws_cdk import ( Stack, aws_lambda as _lambda, # Import the Lambda module ) from constructs import Construct class HelloCdkStack(Stack): def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None: super().__init__(scope, construct_id, **kwargs) # Define the Lambda function resource my_function = _lambda.Function( self, "HelloWorldFunction", runtime = _lambda.Runtime.NODEJS_20_X, # Provide any supported Node.js runtime handler = "index.handler", code = _lambda.Code.from_inline( """ exports.handler = async function(event) { return { statusCode: 200, body: JSON.stringify('Hello World!'), }; }; """ ), )
Java

Terletak disrc/main/java/…​/HelloCdkStack.java:

package com.myorg; import software.constructs.Construct; import software.amazon.awscdk.Stack; import software.amazon.awscdk.StackProps; // Import Lambda function import software.amazon.awscdk.services.lambda.Code; import software.amazon.awscdk.services.lambda.Function; import software.amazon.awscdk.services.lambda.Runtime; public class HelloCdkStack extends Stack { public HelloCdkStack(final Construct scope, final String id) { this(scope, id, null); } public HelloCdkStack(final Construct scope, final String id, final StackProps props) { super(scope, id, props); // Define the Lambda function resource Function myFunction = Function.Builder.create(this, "HelloWorldFunction") .runtime(Runtime.NODEJS_20_X) // Provide any supported Node.js runtime .handler("index.handler") .code(Code.fromInline( "exports.handler = async function(event) {" + " return {" + " statusCode: 200," + " body: JSON.stringify('Hello World!')" + " };" + "};")) .build(); } }
C#

Terletak disrc/main/java/…​/HelloCdkStack.java:

using Amazon.CDK; using Constructs; // Import the Lambda module using Amazon.CDK.AWS.Lambda; namespace HelloCdk { public class HelloCdkStack : Stack { internal HelloCdkStack(Construct scope, string id, IStackProps props = null) : base(scope, id, props) { // Define the Lambda function resource var myFunction = new Function(this, "HelloWorldFunction", new FunctionProps { Runtime = Runtime.NODEJS_20_X, // Provide any supported Node.js runtime Handler = "index.handler", Code = Code.FromInline(@" exports.handler = async function(event) { return { statusCode: 200, body: JSON.stringify('Hello World!'), }; }; "), }); } } }
Go

Terletak dihello-cdk.go:

package main import ( "github.com/aws/aws-cdk-go/awscdk/v2" "github.com/aws/constructs-go/constructs/v10" "github.com/aws/jsii-runtime-go" // Import the Lambda module "github.com/aws/aws-cdk-go/awscdk/v2/awslambda" ) type HelloCdkStackProps struct { awscdk.StackProps } func NewHelloCdkStack(scope constructs.Construct, id string, props *HelloCdkStackProps) awscdk.Stack { var sprops awscdk.StackProps if props != nil { sprops = props.StackProps } stack := awscdk.NewStack(scope, &id, &sprops) // Define the Lambda function resource myFunction := awslambda.NewFunction(stack, jsii.String("HelloWorldFunction"), &awslambda.FunctionProps{ Runtime: awslambda.Runtime_NODEJS_20_X(), // Provide any supported Node.js runtime Handler: jsii.String("index.handler"), Code: awslambda.Code_FromInline(jsii.String(` exports.handler = async function(event) { return { statusCode: 200, body: JSON.stringify('Hello World!'), }; }; `)), }) return stack } // ...

Mari kita lihat lebih dekat pada Function konstruksinya. Seperti semua konstruksi, Function kelas mengambil tiga parameter:

  • scope — Mendefinisikan Stack instance Anda sebagai induk dari Function konstruksi. Semua konstruksi yang mendefinisikan AWS sumber daya dibuat dalam lingkup tumpukan. Anda dapat mendefinisikan konstruksi di dalam konstruksi, membuat hierarki (pohon). Di sini, dan dalam banyak kasus, ruang lingkupnya adalah this (selfdalam Python).

  • Id — ID konstruksi di Function dalam aplikasi AWS CDK Anda. ID ini, ditambah hash berdasarkan lokasi fungsi di dalam tumpukan, secara unik mengidentifikasi fungsi selama penerapan. AWS CDK juga mereferensikan ID ini saat Anda memperbarui konstruksi di aplikasi Anda dan menerapkan kembali untuk memperbarui sumber daya yang digunakan. Di sini, ID konstruksi Anda adalahHelloWorldFunction. Fungsi juga dapat memiliki nama, ditentukan dengan functionName properti. Ini berbeda dari ID konstruksi.

  • props — Bundel nilai yang menentukan properti fungsi. Di sini Anda mendefinisikanruntime,handler, dan code properti.

    Alat peraga diwakili secara berbeda dalam bahasa yang didukung oleh AWS CDK.

    • Di TypeScript dan JavaScript, props adalah argumen tunggal dan Anda meneruskan objek yang berisi properti yang diinginkan.

    • Di Python, alat peraga diteruskan sebagai argumen kata kunci.

    • Di Java, Builder disediakan untuk melewati alat peraga. Ada dua: satu untukFunctionProps, dan yang kedua Function untuk membiarkan Anda membangun konstruksi dan objek propsnya dalam satu langkah. Kode ini menggunakan yang terakhir.

    • Di C#, Anda membuat instance FunctionProps objek menggunakan inisialisasi objek dan meneruskannya sebagai parameter ketiga.

      Jika alat peraga konstruksi bersifat opsional, Anda dapat menghilangkan props parameter sepenuhnya.

Semua konstruksi mengambil tiga argumen yang sama ini, jadi mudah untuk tetap berorientasi saat Anda belajar tentang yang baru. Dan seperti yang Anda harapkan, Anda dapat mensubkelas konstruksi apa pun untuk memperluasnya sesuai dengan kebutuhan Anda, atau jika Anda ingin mengubah defaultnya.

Langkah 7: Tentukan URL fungsi Lambda Anda

Pada langkah ini, Anda menggunakan metode addFunctionUrl helper dari Function konstruk untuk menentukan URL fungsi Lambda. Untuk menampilkan nilai URL ini saat penerapan, Anda akan membuat AWS CloudFormation output menggunakan CfnOutput konstruk.

Tambahkan yang berikut ini ke file tumpukan CDK Anda:

contoh
TypeScript

Terletak dilib/hello-cdk-stack.ts:

// ... export class HelloCdkStack extends cdk.Stack { constructor(scope: Construct, id: string, props?: cdk.StackProps) { super(scope, id, props); // Define the Lambda function resource // ... // Define the Lambda function URL resource const myFunctionUrl = myFunction.addFunctionUrl({ authType: lambda.FunctionUrlAuthType.NONE, }); // Define a CloudFormation output for your URL new cdk.CfnOutput(this, "myFunctionUrlOutput", { value: myFunctionUrl.url, }) } }
JavaScript

Terletak dilib/hello-cdk-stack.js:

const { Stack, CfnOutput } = require('aws-cdk-lib'); // Import CfnOutput class HelloCdkStack extends Stack { constructor(scope, id, props) { super(scope, id, props); // Define the Lambda function resource // ... // Define the Lambda function URL resource const myFunctionUrl = myFunction.addFunctionUrl({ authType: lambda.FunctionUrlAuthType.NONE, }); // Define a CloudFormation output for your URL new CfnOutput(this, "myFunctionUrlOutput", { value: myFunctionUrl.url, }) } } module.exports = { HelloCdkStack }
Python

Terletak dihello_cdk/hello_cdk_stack.py:

from aws_cdk import ( # ... CfnOutput # Import CfnOutput ) from constructs import Construct class HelloCdkStack(Stack): def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None: super().__init__(scope, construct_id, **kwargs) # Define the Lambda function resource # ... # Define the Lambda function URL resource my_function_url = my_function.add_function_url( auth_type = _lambda.FunctionUrlAuthType.NONE, ) # Define a CloudFormation output for your URL CfnOutput(self, "myFunctionUrlOutput", value=my_function_url.url)
Java

Terletak disrc/main/java/…​/HelloCdkStack.java:

package com.myorg; // ... // Import Lambda function URL import software.amazon.awscdk.services.lambda.FunctionUrl; import software.amazon.awscdk.services.lambda.FunctionUrlAuthType; import software.amazon.awscdk.services.lambda.FunctionUrlOptions; // Import CfnOutput import software.amazon.awscdk.CfnOutput; public class HelloCdkStack extends Stack { public HelloCdkStack(final Construct scope, final String id) { this(scope, id, null); } public HelloCdkStack(final Construct scope, final String id, final StackProps props) { super(scope, id, props); // Define the Lambda function resource // ... // Define the Lambda function URL resource FunctionUrl myFunctionUrl = myFunction.addFunctionUrl(FunctionUrlOptions.builder() .authType(FunctionUrlAuthType.NONE) .build()); // Define a CloudFormation output for your URL CfnOutput.Builder.create(this, "myFunctionUrlOutput") .value(myFunctionUrl.getUrl()) .build(); } }
C#

Terletak disrc/main/java/…​/HelloCdkStack.java:

// ... namespace HelloCdk { public class HelloCdkStack : Stack { internal HelloCdkStack(Construct scope, string id, IStackProps props = null) : base(scope, id, props) { // Define the Lambda function resource // ... // Define the Lambda function URL resource var myFunctionUrl = myFunction.AddFunctionUrl(new FunctionUrlOptions { AuthType = FunctionUrlAuthType.NONE }); // Define a CloudFormation output for your URL new CfnOutput(this, "myFunctionUrlOutput", new CfnOutputProps { Value = myFunctionUrl.Url }); } } }
Go

Terletak dihello-cdk.go:

// ... func NewHelloCdkStack(scope constructs.Construct, id string, props *HelloCdkStackProps) awscdk.Stack { var sprops awscdk.StackProps if props != nil { sprops = props.StackProps } stack := awscdk.NewStack(scope, &id, &sprops) // Define the Lambda function resource // ... // Define the Lambda function URL resource myFunctionUrl := myFunction.AddFunctionUrl(&awslambda.FunctionUrlOptions{ AuthType: awslambda.FunctionUrlAuthType_NONE, }) // Define a CloudFormation output for your URL awscdk.NewCfnOutput(stack, jsii.String("myFunctionUrlOutput"), &awscdk.CfnOutputProps{ Value: myFunctionUrl.Url(), }) return stack } // ...
Awas

Agar tutorial ini tetap sederhana, URL fungsi Lambda Anda ditentukan tanpa otentikasi. Saat digunakan, ini menciptakan titik akhir yang dapat diakses publik yang dapat digunakan untuk memanggil fungsi Anda. Setelah selesai dengan tutorial ini, ikuti Langkah 12: Hapus aplikasi Anda untuk menghapus sumber daya ini.

Langkah 8: Mensintesis CloudFormation template

Pada langkah ini, Anda mempersiapkan penerapan dengan mensintesis CloudFormation template dengan perintah CDK CLIcdk synth. Perintah ini melakukan validasi dasar kode CDK Anda, menjalankan aplikasi CDK Anda, dan menghasilkan CloudFormation template dari tumpukan CDK Anda.

Jika aplikasi Anda berisi lebih dari satu tumpukan, Anda harus menentukan tumpukan mana yang akan disintesis. Karena aplikasi Anda berisi satu tumpukan, CDK CLI secara otomatis mendeteksi tumpukan untuk disintesis.

Jika Anda tidak mensintesis template, CDK CLI akan secara otomatis melakukan langkah ini saat Anda menerapkan. Namun, kami menyarankan Anda menjalankan langkah ini sebelum setiap penerapan untuk memeriksa kesalahan sintesis.

Sebelum mensintesis template, Anda dapat secara opsional membangun aplikasi Anda untuk menangkap kesalahan sintaks dan tipe. Untuk petunjuk, lihat Langkah 4: Membangun aplikasi CDK Anda.

Untuk mensintesis CloudFormation template, jalankan yang berikut ini dari root proyek Anda:

$ cdk synth
catatan

Jika Anda menerima kesalahan seperti berikut ini, verifikasi bahwa Anda berada di hello-cdk direktori dan coba lagi:

--app is required either in command-line, in cdk.json or in ~/.cdk.json

Jika berhasil, CDK CLI akan menampilkan template yang YAML diformat —ke stdout dan menyimpan CloudFormation template ber JSON format —di cdk.out direktori proyek Anda.

Berikut ini adalah contoh output dari CloudFormation template:

Resources: HelloWorldFunctionServiceRole<unique-identifier>: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Statement: - Action: sts:AssumeRole Effect: Allow Principal: Service: lambda.amazonaws.com Version: "2012-10-17" ManagedPolicyArns: - Fn::Join: - "" - - "arn:" - Ref: AWS::Partition - :iam::aws:policy/service-role/AWSLambdaBasicExecutionRole Metadata: aws:cdk:path: HelloCdkStack/HelloWorldFunction/ServiceRole/Resource HelloWorldFunction<unique-identifier>: Type: AWS::Lambda::Function Properties: Code: ZipFile: " \ exports.handler = async function(event) { \ return { \ statusCode: 200, \ body: JSON.stringify('Hello World!'), \ }; \ }; \ " Handler: index.handler Role: Fn::GetAtt: - HelloWorldFunctionServiceRole<unique-identifier> - Arn Runtime: nodejs20.x DependsOn: - HelloWorldFunctionServiceRole<unique-identifier> Metadata: aws:cdk:path: HelloCdkStack/HelloWorldFunction/Resource HelloWorldFunctionFunctionUrl<unique-identifier>: Type: AWS::Lambda::Url Properties: AuthType: NONE TargetFunctionArn: Fn::GetAtt: - HelloWorldFunction<unique-identifier> - Arn Metadata: aws:cdk:path: HelloCdkStack/HelloWorldFunction/FunctionUrl/Resource HelloWorldFunctioninvokefunctionurl<unique-identifier>: Type: AWS::Lambda::Permission Properties: Action: lambda:InvokeFunctionUrl FunctionName: Fn::GetAtt: - HelloWorldFunction<unique-identifier> - Arn FunctionUrlAuthType: NONE Principal: "*" Metadata: aws:cdk:path: HelloCdkStack/HelloWorldFunction/invoke-function-url CDKMetadata: Type: AWS::CDK::Metadata Properties: Analytics: v2:deflate64:<unique-identifier> Metadata: aws:cdk:path: HelloCdkStack/CDKMetadata/Default Condition: CDKMetadataAvailable Outputs: myFunctionUrlOutput: Value: Fn::GetAtt: - HelloWorldFunctionFunctionUrl<unique-identifier> - FunctionUrl Parameters: BootstrapVersion: Type: AWS::SSM::Parameter::Value<String> Default: /cdk-bootstrap/<unique-identifier>/version Description: Version of the CDK Bootstrap resources in this environment, automatically retrieved from SSM Parameter Store. [cdk:skip] Rules: CheckBootstrapVersion: Assertions: - Assert: Fn::Not: - Fn::Contains: - - "1" - "2" - "3" - "4" - "5" - Ref: BootstrapVersion AssertDescription: CDK bootstrap stack version 6 required. Please run 'cdk bootstrap' with a recent version of the CDK CLI.
catatan

Setiap template yang dihasilkan berisi AWS::CDK::Metadata sumber daya secara default. Tim AWS CDK menggunakan metadata ini untuk mendapatkan wawasan tentang penggunaan AWS CDK dan menemukan cara untuk memperbaikinya. Untuk detail, termasuk cara memilih keluar dari pelaporan versi, lihat Pelaporan versi.

Dengan mendefinisikan konstruksi L2 tunggal, AWS CDK membuat CloudFormation template ekstensif yang berisi sumber daya Lambda Anda, bersama dengan izin dan logika lem yang diperlukan agar sumber daya Anda berinteraksi dalam aplikasi Anda.

Langkah 9: Terapkan tumpukan CDK Anda

Pada langkah ini, Anda menggunakan cdk deploy perintah CDK CLI untuk menerapkan tumpukan CDK Anda. Perintah ini mengambil CloudFormation template yang Anda buat dan menyebarkannya AWS CloudFormation, yang menyediakan sumber daya Anda sebagai bagian dari tumpukan. CloudFormation

Dari root proyek Anda, jalankan yang berikut ini. Konfirmasikan perubahan jika diminta:

$ cdk deploy ✨ Synthesis time: 2.69s HelloCdkStack: start: Building <unique-identifier>:current_account-current_region HelloCdkStack: success: Built <unique-identifier>:current_account-current_region HelloCdkStack: start: Publishing <unique-identifier>:current_account-current_region HelloCdkStack: success: Published <unique-identifier>:current_account-current_region This deployment will make potentially sensitive changes according to your current security approval level (--require-approval broadening). Please confirm you intend to make the following modifications: IAM Statement Changes ┌───┬───────────────────────────────────────┬────────┬──────────────────────────┬──────────────────────────────┬───────────┐ │ │ Resource │ Effect │ Action │ Principal │ Condition │ ├───┼───────────────────────────────────────┼────────┼──────────────────────────┼──────────────────────────────┼───────────┤ │ + │ ${HelloWorldFunction.Arn} │ Allow │ lambda:InvokeFunctionUrl │ * │ │ ├───┼───────────────────────────────────────┼────────┼──────────────────────────┼──────────────────────────────┼───────────┤ │ + │ ${HelloWorldFunction/ServiceRole.Arn} │ Allow │ sts:AssumeRole │ Service:lambda.amazonaws.com │ │ └───┴───────────────────────────────────────┴────────┴──────────────────────────┴──────────────────────────────┴───────────┘ IAM Policy Changes ┌───┬───────────────────────────────────┬────────────────────────────────────────────────────────────────────────────────┐ │ │ Resource │ Managed Policy ARN │ ├───┼───────────────────────────────────┼────────────────────────────────────────────────────────────────────────────────┤ │ + │ ${HelloWorldFunction/ServiceRole} │ arn:${AWS::Partition}:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole │ └───┴───────────────────────────────────┴────────────────────────────────────────────────────────────────────────────────┘ (NOTE: There may be security-related changes not in this list. See https://github.com/aws/aws-cdk/issues/1299) Do you wish to deploy these changes (y/n)? y

Mirip dengancdk synth, Anda tidak perlu menentukan tumpukan AWS CDK karena aplikasi berisi satu tumpukan.

Selama penerapan, CDK CLI menampilkan informasi kemajuan saat tumpukan Anda digunakan. Setelah selesai, Anda dapat pergi ke AWS CloudFormation konsol untuk melihat tumpukan HelloCdkStack Anda. Anda juga dapat pergi ke konsol Lambda untuk melihat HelloWorldFunction sumber daya Anda.

Saat penerapan selesai, CDK CLI akan menampilkan URL titik akhir Anda. Salin URL ini untuk langkah selanjutnya. Berikut ini adalah contohnya:

... HelloCdkStack: deploying... [1/1] HelloCdkStack: creating CloudFormation changeset... ✅ HelloCdkStack ✨ Deployment time: 41.65s Outputs: HelloCdkStack.myFunctionUrlOutput = https://<api-id>.lambda-url.<Region>.on.aws/ Stack ARN: arn:aws:cloudformation:<Region:account-id>:stack/HelloCdkStack/<unique-identifier> ✨ Total time: 44.34s

Langkah 10: Berinteraksi dengan aplikasi Anda di AWS

Pada langkah ini, Anda berinteraksi dengan aplikasi Anda dengan memang AWS gil fungsi Lambda Anda melalui URL fungsi. Saat Anda mengakses URL, fungsi Lambda mengembalikan Hello World! pesan.

Untuk memanggil fungsi Anda, akses URL fungsi melalui browser Anda atau dari baris perintah. Berikut ini adalah contohnya:

$ curl https://<api-id>.lambda-url.<Region>.on.aws/ "Hello World!"%

Langkah 11: Ubah aplikasi Anda

Pada langkah ini, Anda memodifikasi pesan yang dikembalikan fungsi Lambda saat dipanggil. Anda melakukan diff menggunakan cdk diff perintah CDK CLI untuk melihat pratinjau perubahan Anda dan menerapkan untuk memperbarui aplikasi Anda. Anda kemudian berinteraksi dengan aplikasi Anda AWS untuk melihat pesan baru Anda.

Ubah myFunction instance di file tumpukan CDK Anda sebagai berikut:

contoh
TypeScript

Terletak dilib/hello-cdk-stack.ts:

// ... export class HelloCdkStack extends cdk.Stack { constructor(scope: Construct, id: string, props?: cdk.StackProps) { super(scope, id, props); // Modify the Lambda function resource const myFunction = new lambda.Function(this, "HelloWorldFunction", { runtime: lambda.Runtime.NODEJS_20_X, // Provide any supported Node.js runtime handler: "index.handler", code: lambda.Code.fromInline(` exports.handler = async function(event) { return { statusCode: 200, body: JSON.stringify('Hello CDK!'), }; }; `), }); // ... } }
JavaScript

Terletak dilib/hello-cdk-stack.js:

// ... class HelloCdkStack extends Stack { constructor(scope, id, props) { super(scope, id, props); // Modify the Lambda function resource const myFunction = new lambda.Function(this, "HelloWorldFunction", { runtime: lambda.Runtime.NODEJS_20_X, // Provide any supported Node.js runtime handler: "index.handler", code: lambda.Code.fromInline(` exports.handler = async function(event) { return { statusCode: 200, body: JSON.stringify('Hello CDK!'), }; }; `), }); // ... } } module.exports = { HelloCdkStack }
Python

Terletak dihello_cdk/hello_cdk_stack.py:

# ... class HelloCdkStack(Stack): def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None: super().__init__(scope, construct_id, **kwargs) # Modify the Lambda function resource my_function = _lambda.Function( self, "HelloWorldFunction", runtime = _lambda.Runtime.NODEJS_20_X, # Provide any supported Node.js runtime handler = "index.handler", code = _lambda.Code.from_inline( """ exports.handler = async function(event) { return { statusCode: 200, body: JSON.stringify('Hello CDK!'), }; }; """ ), ) # ...
Java

Terletak disrc/main/java/…​/HelloCdkStack.java:

// ... public class HelloCdkStack extends Stack { public HelloCdkStack(final Construct scope, final String id) { this(scope, id, null); } public HelloCdkStack(final Construct scope, final String id, final StackProps props) { super(scope, id, props); // Modify the Lambda function resource Function myFunction = Function.Builder.create(this, "HelloWorldFunction") .runtime(Runtime.NODEJS_20_X) // Provide any supported Node.js runtime .handler("index.handler") .code(Code.fromInline( "exports.handler = async function(event) {" + " return {" + " statusCode: 200," + " body: JSON.stringify('Hello CDK!')" + " };" + "};")) .build(); // ... } }
C#
// ... namespace HelloCdk { public class HelloCdkStack : Stack { internal HelloCdkStack(Construct scope, string id, IStackProps props = null) : base(scope, id, props) { // Modify the Lambda function resource var myFunction = new Function(this, "HelloWorldFunction", new FunctionProps { Runtime = Runtime.NODEJS_20_X, // Provide any supported Node.js runtime Handler = "index.handler", Code = Code.FromInline(@" exports.handler = async function(event) { return { statusCode: 200, body: JSON.stringify('Hello CDK!'), }; }; "), }); // ... } } }
Go
// ... type HelloCdkStackProps struct { awscdk.StackProps } func NewHelloCdkStack(scope constructs.Construct, id string, props *HelloCdkStackProps) awscdk.Stack { var sprops awscdk.StackProps if props != nil { sprops = props.StackProps } stack := awscdk.NewStack(scope, &id, &sprops) // Modify the Lambda function resource myFunction := awslambda.NewFunction(stack, jsii.String("HelloWorldFunction"), &awslambda.FunctionProps{ Runtime: awslambda.Runtime_NODEJS_20_X(), // Provide any supported Node.js runtime Handler: jsii.String("index.handler"), Code: awslambda.Code_FromInline(jsii.String(` exports.handler = async function(event) { return { statusCode: 200, body: JSON.stringify('Hello CDK!'), }; }; `)), }) // ... }

Saat ini, perubahan kode Anda belum membuat pembaruan langsung ke sumber daya Lambda yang Anda gunakan. Kode Anda mendefinisikan status sumber daya yang diinginkan. Untuk memodifikasi sumber daya yang digunakan, Anda akan menggunakan CDK CLI untuk mensintesis status yang diinginkan ke dalam template baru AWS CloudFormation . Kemudian, Anda akan menerapkan CloudFormation template baru Anda sebagai set perubahan. Set perubahan hanya membuat perubahan yang diperlukan untuk mencapai status baru yang Anda inginkan.

Untuk melihat pratinjau perubahan Anda, jalankan cdk diff perintah. Berikut ini adalah contohnya:

$ cdk diff Stack HelloCdkStack Hold on while we create a read-only change set to get a diff with accurate replacement information (use --method=template to use a less accurate but faster template-only diff) Resources [~] AWS::Lambda::Function HelloWorldFunction HelloWorldFunction<unique-identifier> └─ [~] Code └─ [~] .ZipFile: ├─ [-] exports.handler = async function(event) { return { statusCode: 200, body: JSON.stringify('Hello World!'), }; }; └─ [+] exports.handler = async function(event) { return { statusCode: 200, body: JSON.stringify('Hello CDK!'), }; }; ✨ Number of stacks with differences: 1

Untuk membuat perbedaan ini, CDK CLI menanyakan akun AWS akun Anda untuk AWS CloudFormation template terbaru untuk tumpukan. HelloCdkStack Kemudian, ia membandingkan template terbaru dengan template yang baru saja disintesis dari aplikasi Anda.

Untuk menerapkan perubahan Anda, jalankan cdk deploy perintah. Berikut ini adalah contohnya:

$ cdk deploy ✨ Synthesis time: 2.12s HelloCdkStack: start: Building <unique-identifier>:current_account-current_region HelloCdkStack: success: Built <unique-identifier>:current_account-current_region HelloCdkStack: start: Publishing <unique-identifier>:current_account-current_region HelloCdkStack: success: Published <unique-identifier>:current_account-current_region HelloCdkStack: deploying... [1/1] HelloCdkStack: creating CloudFormation changeset... ✅ HelloCdkStack ✨ Deployment time: 26.96s Outputs: HelloCdkStack.myFunctionUrlOutput = https://<unique-identifier>.lambda-url.<Region>.on.aws/ Stack ARN: arn:aws:cloudformation:<Region:account-id>:stack/HelloCdkStack/<unique-identifier> ✨ Total time: 29.07s

Untuk berinteraksi dengan aplikasi Anda, ulangi Langkah 10: Berinteraksi dengan aplikasi Anda aktif AWS. Berikut ini adalah contohnya:

$ curl https://<api-id>.lambda-url.<Region>.on.aws/ "Hello CDK!"%

Langkah 12: Hapus aplikasi Anda

Pada langkah ini, Anda menggunakan cdk destroy perintah CDK CLI untuk menghapus aplikasi Anda. Perintah ini menghapus CloudFormation tumpukan yang terkait dengan tumpukan CDK Anda, yang mencakup sumber daya yang Anda buat.

Untuk menghapus aplikasi Anda, jalankan cdk destroy perintah dan konfirmasikan permintaan Anda untuk menghapus aplikasi. Berikut ini adalah contohnya:

$ cdk destroy Are you sure you want to delete: HelloCdkStack (y/n)? y HelloCdkStack: destroying... [1/1] ✅ HelloCdkStack: destroyed

Langkah selanjutnya

Selamat! Anda telah menyelesaikan tutorial ini dan telah menggunakan AWS CDK untuk berhasil membuat, memodifikasi, dan menghapus sumber daya di AWS Cloud. Anda sekarang siap untuk mulai menggunakan AWS CDK.

Untuk mempelajari lebih lanjut tentang menggunakan AWS CDK dalam bahasa pemrograman pilihan Anda, lihat Bek erja dengan pustaka AWS CDK.

Untuk sumber daya tambahan, lihat berikut ini:

  • Cobalah Lokakarya CDK untuk tur yang lebih mendalam yang melibatkan proyek yang lebih kompleks.

  • Lihat referensi API untuk mulai menjelajahi konstruksi CDK yang tersedia untuk layanan favorit AWS Anda.

  • Kunjungi Construct Hub untuk menemukan konstruksi yang dibuat oleh AWS dan lainnya.

  • Jel aj ahi Contoh penggunaan AWS CDK.

AWS CDK adalah proyek open-source. Untuk berkontribusi, lihat Ber kontribusi pada AWS Cloud Development Kit (AWS CDK).