

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.

# Memulai dengan AWS CDK
<a name="getting-started"></a>

Mulailah dengan AWS Cloud Development Kit (AWS CDK) dengan menginstal dan mengonfigurasi CDK Command Line Interface ( AWS CDK AWS CLI). Kemudian, gunakan CDK CLI untuk membuat aplikasi CDK pertama Anda, bootstrap lingkungan AWS Anda, dan menerapkan aplikasi Anda.

## Prasyarat
<a name="getting-started-prerequisites"></a>

Sebelum memulai dengan AWS CDK, lengkapi semua prasyarat. Prasyarat ini diperlukan bagi mereka yang baru AWS atau baru mengenal pemrograman. Untuk instruksi, lihat [prasyarat AWS CDK](prerequisites.md).

Kami menyarankan Anda memiliki pemahaman dasar tentang apa itu AWS CDK. Untuk informasi lebih lanjut, lihat [Apa itu AWS CDK?](home.md) dan [Pelajari konsep inti AWS CDK](core-concepts.md).

## Instal AWS CDK CLI
<a name="getting-started-install"></a>

Gunakan Node Package Manager untuk menginstal CDK CLI. Kami menyarankan Anda menginstalnya secara global menggunakan perintah berikut:

```
$ npm install -g aws-cdk
```

Untuk menginstal versi tertentu dari CDK CLI, gunakan struktur perintah berikut:

```
$ npm install -g aws-cdk@X.YY.Z
```

Jika Anda ingin menggunakan beberapa versi AWS CDK, pertimbangkan untuk menginstal versi CLI CDK yang cocok dalam proyek CDK individual. Untuk melakukan ini, hapus `-g` opsi dari `npm install` perintah. Kemudian, gunakan `npx aws-cdk` untuk memanggil CDK CLI. Ini akan menjalankan versi lokal jika ada. Jika tidak, versi yang diinstal secara global akan digunakan.<a name="getting-started-install-troubleshoot"></a>

 **Memecahkan masalah instalasi CDK CLI**   
Jika Anda mendapatkan kesalahan izin, dan memiliki akses administrator di sistem Anda, jalankan yang berikut ini:  

```
$ sudo npm install -g aws-cdk
```
Jika Anda menerima pesan kesalahan, coba hapus instalan CDK CLI dengan menjalankan yang berikut:  

```
$ npm uninstall -g aws-cdk
```
Kemudian, ulangi langkah-langkah untuk menginstal ulang CDK CLI.

## Verifikasi instalasi CDK CLI yang berhasil
<a name="getting-started-install-verify"></a>

Jalankan perintah berikut untuk memverifikasi instalasi yang berhasil. AWS CDK CLI harus menampilkan nomor versi:

```
$ cdk --version
```

## Konfigurasikan AWS CDK CLI
<a name="getting-started-configure"></a>

Setelah menginstal CDK CLI, Anda dapat mulai menggunakannya untuk mengembangkan aplikasi di mesin lokal Anda. Untuk berinteraksi AWS, seperti menerapkan aplikasi, Anda harus memiliki kredenal keamanan yang dikonfigurasi di komputer lokal Anda dengan izin untuk melakukan tindakan apa pun yang Anda lakukan.

Untuk mengonfigurasi kredensi keamanan pada mesin lokal Anda, Anda menggunakan CLI AWS . Cara Anda mengonfigurasi kredensi keamanan tergantung pada cara Anda mengelola pengguna. Untuk petunjuk, lihat [Otentikasi dan akses kredensil di Panduan Pengguna](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-authentication.html) *Antarmuka Baris AWS Perintah*.

CDK CLI akan secara otomatis menggunakan kredenal keamanan yang Anda konfigurasikan dengan CLI. AWS Misalnya, jika Anda adalah pengguna IAM Identity Center, Anda dapat menggunakan `aws configure sso` perintah untuk mengonfigurasi kredensi keamanan. Jika Anda adalah pengguna IAM, Anda dapat menggunakan `aws configure` perintah. AWS CLI akan memandu Anda melalui konfigurasi kredensil keamanan pada mesin lokal Anda dan menyimpan informasi yang diperlukan dalam file dan Anda. `config` `credentials` Kemudian, ketika Anda menggunakan CDK CLI, seperti menerapkan aplikasi `cdk deploy` dengan, CDK CLI akan menggunakan kredenal keamanan yang dikonfigurasi.

Sama seperti AWS CLI, CDK CLI akan menggunakan `default` profil Anda secara default. Anda dapat menentukan profil menggunakan opsi CDK [`--profile`](ref-cli-cmd.md#ref-cli-cmd-options-profile)CLI. Untuk informasi selengkapnya tentang penggunaan kredensil keamanan dengan CDK CLI, [lihat Mengonfigurasi kredensil keamanan](configure-access.md) untuk CDK CLI. AWS 

## (Opsional) Instal alat AWS CDK tambahan
<a name="getting-started-tools"></a>

[AWS Toolkit for Visual Studio](https://aws.amazon.com/visualstudiocode/) Code adalah plug-in Visual Studio Code open source yang membantu Anda membuat, men-debug, dan menyebarkan aplikasi. AWS Toolkit ini memberikan pengalaman terintegrasi untuk mengembangkan aplikasi AWS CDK. Ini termasuk fitur AWS CDK Explorer untuk daftar proyek AWS CDK Anda dan menelusuri berbagai komponen aplikasi CDK. Untuk petunjuk, lihat yang berikut ini:
+  [Menginstal AWS Toolkit for Visual Studio Code](https://docs.aws.amazon.com/toolkit-for-vscode/latest/userguide/setup-toolkit.html).
+  [AWS CDK untuk Kode VS](https://docs.aws.amazon.com/toolkit-for-vscode/latest/userguide/cdk-explorer.html).

## Buat aplikasi CDK pertama Anda
<a name="getting-started-app"></a>

Anda sekarang siap untuk memulai menggunakan AWS CDK dengan membuat aplikasi CDK pertama Anda. Untuk petunjuk, lihat [Tutorial: Membuat aplikasi AWS CDK pertama Anda](hello-world.md).

# Tutorial: Buat aplikasi AWS CDK pertama Anda
<a name="hello-world"></a>

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

## Prasyarat
<a name="hello-world-prerequisites"></a>

Sebelum memulai tutorial ini, selesaikan semua langkah pengaturan di [Memulai dengan AWS CDK](getting-started.md).

## Tentang tutorial ini
<a name="hello-world-about"></a>

Dalam tutorial ini, Anda akan membuat dan menyebarkan aplikasi sederhana AWS menggunakan AWS CDK. Aplikasi ini terdiri dari [fungsi AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) yang mengembalikan `Hello World!` pesan saat dipanggil. Fungsi ini akan dipanggil melalui URL fungsi [Lambda yang berfungsi sebagai titik akhir HTTP (S) khusus untuk fungsi](https://docs.aws.amazon.com/lambda/latest/dg/lambda-urls.html) Lambda Anda.

Melalui tutorial ini, Anda akan melakukan hal berikut:
+  **Buat proyek Anda** - Buat proyek CDK menggunakan perintah CDK CLI. `cdk init`
+  **Konfigurasikan AWS lingkungan Anda** — Konfigurasikan AWS lingkungan tempat Anda akan menerapkan aplikasi Anda.
+  **Bootstrap AWS lingkungan Anda** - Persiapkan AWS lingkungan Anda untuk penerapan dengan bootstrap menggunakan perintah CDK CLI. `cdk bootstrap`
+  **Kembangkan aplikasi Anda** — Gunakan konstruksi dari AWS Construct Library untuk menentukan fungsi Lambda dan resource URL fungsi Lambda Anda.
+  **Mempersiapkan aplikasi Anda untuk penerapan** — Gunakan CDK CLI untuk membangun aplikasi Anda dan mensintesis template. AWS CloudFormation 
+  **Menerapkan aplikasi Anda** — Gunakan `cdk deploy` perintah CDK CLI untuk menerapkan aplikasi Anda dan menyediakan sumber daya Anda. AWS 
+  **Berinteraksi dengan aplikasi Anda** — Berinteraksi dengan fungsi Lambda yang Anda gunakan dengan AWS memanggilnya dan menerima respons.
+  **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 `cdk destroy` CLI.

## Langkah 1: Buat proyek CDK Anda
<a name="hello-world-create"></a>

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 bernama`hello-cdk`:

   ```
   $ mkdir hello-cdk && cd hello-cdk
   ```
**penting**  
Pastikan untuk memberi nama direktori proyek Anda`hello-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.

1. 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:  
**Example**  

------
#### [ 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. DalamEclipse, misalnya, pilih **File** > **Import** > Maven > **Existing Maven** **Projects**. Pastikan bahwa pengaturan proyek diatur untuk menggunakan Java 8 (1.8).

------
#### [ C\$1 ]

   ```
   $ 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
   ```

------

`cdk init`Perintah 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 satu tumpukan CDK. Instance aplikasi CDK dibuat menggunakan [https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.App.html](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.App.html)konstruksi. Berikut ini adalah bagian dari kode ini dari file aplikasi CDK Anda:

**Example**  
Terletak di`bin/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', {
});
```
Terletak di`bin/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', {
});
```
Terletak di`app.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()
```
Terletak di`src/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();
  }
}
```
Terletak di`src/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();
    }
  }
}
```
Terletak di`hello-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 [https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.Stack.html](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.Stack.html)konstruksi. Berikut ini adalah bagian dari kode ini dari file tumpukan CDK Anda:

**Example**  
Terletak di`lib/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

  }
}
```
Terletak di`lib/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 }
```
Terletak di`hello_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
```
Terletak di`src/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
  }
}
```
Terletak di`src/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
    }
  }
}
```
Terletak di`hello-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 Anda
<a name="hello-world-configure"></a>

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 AWS Wilayah.

Ketika Anda menggunakan AWS CLI untuk mengonfigurasi kredensi 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 akun Anda AWS **   

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

   ```
   $ aws sts get-caller-identity --query "Account" --output text
   ```

1. 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 konfigurasikan untuk profil Anda`default`:

   ```
   $ aws configure get region
   ```

1. 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 mengonfigurasi lingkungan, lihat [Mengonfigurasi lingkungan yang akan digunakan dengan AWS CDK](configure-env.md).

 **Untuk mengonfigurasi lingkungan untuk tumpukan CDK Anda**   

1. Dalam *file aplikasi* Anda, gunakan `env` properti `Stack` konstruksi untuk mengkonfigurasi lingkungan Anda. Berikut ini adalah contohnya:  
**Example**  

------
#### [ TypeScript ]

   Terletak di`bin/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 di`bin/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 di`app.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 di`src/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\$1 ]

   Terletak di`src/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 di`hello-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 AWS lingkungan Anda
<a name="hello-world-bootstrap"></a>

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. Ketika Anda bootstrap di luar proyek CDK, Anda harus memberikan informasi lingkungan dengan `cdk bootstrap` perintah. Untuk informasi selengkapnya, lihat [Bootstrap lingkungan Anda untuk digunakan dengan AWS CDK](bootstrapping-env.md).

## Langkah 4: Bangun aplikasi CDK Anda
<a name="hello-world-build"></a>

Di sebagian besar lingkungan pemrograman, Anda membangun atau mengkompilasi kode setelah melakukan 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 mengetik. Berikut ini adalah contohnya:

**Example**  

```
$ npm run build

> hello-cdk@0.1.0 build
> tsc
```
Tidak ada langkah membangun yang diperlukan.
Tidak ada langkah membangun yang diperlukan.

```
$ mvn compile -q
```
Atau tekan `Control-B` di Eclipse (Jawa lain IDEs mungkin berbeda)

```
$ dotnet build src
```
Atau tekan F6 di Visual Studio

```
$ go build
```

## Langkah 5: Buat daftar tumpukan CDK di aplikasi
<a name="hello-world-list"></a>

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

```
$ 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](#hello-world-create) dan coba lagi.

## Langkah 6: Tentukan fungsi Lambda Anda
<a name="hello-world-function"></a>

Pada langkah ini, Anda mengimpor [https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_lambda-readme.html](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_lambda-readme.html)modul dari AWS Construct Library dan menggunakan konstruksi [https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_lambda.Function.html](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_lambda.Function.html)L2.

Ubah file tumpukan CDK Anda sebagai berikut:

**Example**  
Terletak di`lib/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!'),
          };
        };
      `),
    });
  }
}
```
Terletak di`lib/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 }
```
Terletak di`hello_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!'),
          };
        };
        """
      ),
    )
```
Terletak di`src/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();

  }
}
```
Terletak di`src/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!'),
            };
          };
        "),
      });
    }
  }
}
```
Terletak di`hello-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 `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 menentukan konstruksi di dalam konstruksi, membuat hierarki (pohon). Di sini, dan dalam banyak kasus, cakupannya adalah `this` (`self`dalam Python).
+  **Id** — ID build dari `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 dan menerapkan ulang untuk memperbarui sumber daya yang diterapkan. Di sini, ID konstruksi Anda adalah`HelloWorldFunction`. Fungsi juga dapat memiliki nama, ditentukan dengan `functionName` properti. Ini berbeda dengan ID konstruksi.
+  **props** — Sebuah bundel nilai yang mendefinisikan properti dari fungsi. Di sini Anda mendefinisikan`runtime`,`handler`, dan `code` properti.

  Alat peraga diwakili secara berbeda dalam bahasa yang didukung oleh AWS CDK.
  + Dalam TypeScript dan JavaScript, `props` adalah argumen tunggal dan Anda meneruskan objek yang berisi properti yang diinginkan.
  + Dalam Python, props dilewatkan sebagai argumen kata kunci.
  + Di Jawa, Builder disediakan untuk melewati alat peraga. Ada dua: satu untuk`FunctionProps`, dan yang kedua `Function` untuk membiarkan Anda membangun konstruksi dan objek alat peraga dalam satu langkah. Kode ini menggunakan yang terakhir.
  + Di C \$1, Anda membuat instance `FunctionProps` objek menggunakan penginisialisasi objek dan meneruskannya sebagai parameter ketiga.

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

Semua konstruksi mengambil tiga argumen yang sama ini, jadi mudah untuk tetap berorientasi saat Anda belajar tentang yang baru. Dan seperti yang Anda duga, 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
<a name="hello-world-url"></a>

Pada langkah ini, Anda menggunakan metode `addFunctionUrl` pembantu `Function` konstruksi untuk menentukan URL fungsi Lambda. Untuk menampilkan nilai URL ini saat penerapan, Anda akan membuat AWS CloudFormation output menggunakan [https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.CfnOutput.html](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.CfnOutput.html)konstruksi.

Tambahkan yang berikut ini ke file tumpukan CDK Anda:

**Example**  
Terletak di`lib/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,
    })

  }
}
```
Terletak di`lib/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 }
```
Terletak di`hello_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)
```
Terletak di`src/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();
  }
}
```
Terletak di`src/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
      });
    }
  }
}
```
Terletak di`hello-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 didefinisikan tanpa otentikasi. Saat diterapkan, ini akan membuat titik akhir yang dapat diakses publik yang dapat digunakan untuk menjalankan fungsi Anda. Setelah selesai dengan tutorial ini, ikuti [Langkah 12: Hapus aplikasi Anda](#hello-world-delete) untuk menghapus sumber daya ini.

## Langkah 8: Sintesis template CloudFormation
<a name="hello-world-synth"></a>

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

Jika aplikasi 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 yang akan 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 membuat aplikasi secara opsional untuk menangkap kesalahan sintaks dan mengetik. Untuk petunjuk, lihat [Langkah 4: Membangun aplikasi CDK Anda](#hello-world-build).

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 templat `YAML` yang CloudFormation diformat `stdout` —ke dan menyimpan `JSON` templat yang diformat —di direktori proyek Anda. `cdk.out`

Berikut ini adalah contoh output dari CloudFormation template:

### AWS CloudFormation template
<a name="hello-world-synth-template"></a>

```
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 detailnya, termasuk cara memilih keluar dari pelaporan versi, lihat [Pelaporan versi](cli.md#version-reporting).

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

## Langkah 9: Menyebarkan tumpukan CDK Anda
<a name="hello-world-deploy"></a>

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

Dari akar 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 dengan`cdk synth`, Anda tidak perlu menentukan tumpukan AWS CDK karena aplikasi berisi satu tumpukan.

Selama penerapan, CDK CLI menampilkan informasi kemajuan saat tumpukan Anda diterapkan. Setelah selesai, Anda dapat pergi ke [AWS CloudFormation konsol](https://console.aws.amazon.com/cloudformation/home) untuk melihat `HelloCdkStack` tumpukan Anda. Anda juga dapat pergi ke konsol Lambda untuk melihat sumber daya Anda`HelloWorldFunction`.

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
<a name="hello-world-interact"></a>

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

Untuk menjalankan 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
<a name="hello-world-modify"></a>

Pada langkah ini, Anda mengubah pesan yang dikembalikan oleh 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:

**Example**  
Terletak di`lib/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!'),
          };
        };
      `),
    });

    // ...
  }
}
```
Terletak di`lib/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 }
```
Terletak di`hello_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!'),
          };
        };
        """
      ),
    )

    # ...
```
Terletak di`src/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();

    // ...
  }
}
```

```
// ...

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!'),
            };
          };
        "),
      });

      // ...
    }
  }
}
```

```
// ...

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 menentukan status sumber daya yang diinginkan. Untuk memodifikasi sumber daya yang Anda gunakan, Anda akan menggunakan CDK CLI untuk mensintesis status yang diinginkan ke dalam templat 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 --no-change-set 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 AWS akun akun Anda untuk template terbaru AWS CloudFormation untuk tumpukan. `HelloCdkStack` Kemudian, ia membandingkan template terbaru dengan template yang baru saja disintesis dari aplikasi Anda.

Untuk mengimplementasikan 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 di AWS](#hello-world-interact). Berikut ini adalah contohnya:

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

## Langkah 12: Hapus aplikasi Anda
<a name="hello-world-delete"></a>

Pada langkah ini, Anda menggunakan perintah CDK `cdk destroy` 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
<a name="hello-world-next-steps"></a>

Selamat\$1 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 [Bekerja dengan perpustakaan AWS CDK](work-with.md).

Untuk sumber daya tambahan, lihat berikut ini:
+ Cobalah [Lokakarya CDK](https://cdkworkshop.com/) untuk tur yang lebih mendalam yang melibatkan proyek yang lebih kompleks.
+ Lihat [referensi API](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-construct-library.html) untuk mulai menjelajahi konstruksi CDK yang tersedia untuk layanan favorit AWS Anda.
+ Kunjungi [Construct Hub](https://constructs.dev/search?q=&cdk=aws-cdk&cdkver=2&sort=downloadsDesc&offset=0) untuk menemukan konstruksi yang dibuat oleh AWS dan lainnya.
+ Jelajahi [Contoh](https://github.com/aws-samples/aws-cdk-examples) menggunakan AWS CDK.

 AWS CDK adalah proyek sumber terbuka. Untuk berkontribusi, lihat [Berkontribusi pada AWS Cloud Development Kit (AWS CDK)](https://github.com/aws/aws-cdk/blob/main/CONTRIBUTING.md).