

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

# Menyebarkan aplikasi Node.js dengan Elastic Beanstalk
<a name="create_deploy_nodejs"></a>

Bab ini memberikan instruksi untuk mengkonfigurasi dan menyebarkan aplikasi web Node.js Anda ke. AWS Elastic Beanstalk Ini juga menyediakan panduan untuk tugas-tugas umum seperti integrasi database dan bekerja dengan kerangka kerja Express. Elastic Beanstalk memudahkan penerapan, pengelolaan, dan skala aplikasi web Node.js Anda menggunakan Amazon Web Services.

Anda dapat menerapkan aplikasi Anda hanya dalam beberapa menit menggunakan Elastic Beanstalk Command Line Interface (EB CLI) atau dengan menggunakan konsol Elastic Beanstalk. Setelah Anda menerapkan aplikasi Elastic Beanstalk, Anda dapat terus menggunakan EB CLI untuk mengelola aplikasi dan lingkungan Anda, atau Anda dapat menggunakan konsol Elastic Beanstalk, atau. AWS CLI APIs

Ikuti step-by-step petunjuk [QuickStart untuk Node.js](nodejs-quickstart.md) untuk membuat dan menyebarkan aplikasi web *Hello World* Node.js dengan EB CLI.

**Topics**
+ [QuickStart: Menyebarkan aplikasi Node.js ke Elastic Beanstalk](nodejs-quickstart.md)
+ [Menyiapkan lingkungan pengembangan Node.js Anda untuk Elastic Beanstalk](nodejs-devenv.md)
+ [Menggunakan platform Node.js Elastic Beanstalk](create_deploy_nodejs.container.md)
+ [Lebih banyak contoh aplikasi dan tutorial Elastic Beanstalk untuk Node.js](nodejs-getstarted.md)
+ [Menyebarkan aplikasi Node.js Express ke Elastic Beanstalk](create_deploy_nodejs_express.md)
+ [Menyebarkan aplikasi Node.js Express dengan pengelompokan ke Elastic Beanstalk](nodejs-express-clustering.md)
+ [Men-deploy aplikasi Node.js dengan DynamoDB ke Elastic Beanstalk](nodejs-dynamodb-tutorial.md)
+ [Menambahkan instans Amazon RDS DB ke lingkungan Node.js Elastic Beanstalk Anda](create-deploy-nodejs.rds.md)
+ [Alat dan sumber daya Node.js](create_deploy_nodejs.resources.md)

# QuickStart: Menyebarkan aplikasi Node.js ke Elastic Beanstalk
<a name="nodejs-quickstart"></a>

 QuickStart Tutorial ini memandu Anda melalui proses pembuatan aplikasi Node.js dan menyebarkannya ke AWS Elastic Beanstalk lingkungan.

**Bukan untuk penggunaan produksi**  
Contoh dimaksudkan untuk demonstrasi saja. Jangan gunakan contoh aplikasi dalam produksi.

**Topics**
+ [AWS Akun Anda](#nodejs-quickstart-aws-account)
+ [Prasyarat](#nodejs-quickstart-prereq)
+ [Langkah 1: Buat aplikasi Node.js](#nodejs-quickstart-create-app)
+ [Langkah 2: Jalankan aplikasi Anda secara lokal](#nodejs-quickstart-run-local)
+ [Langkah 3: Terapkan aplikasi Node.js Anda dengan EB CLI](#nodejs-quickstart-deploy)
+ [Langkah 4: Jalankan aplikasi Anda di Elastic Beanstalk](#nodejs-quickstart-run-eb-ap)
+ [Langkah 5: Bersihkan](#go-tutorial-cleanup)
+ [AWS sumber daya untuk aplikasi Anda](#nodejs-quickstart-eb-resources)
+ [Langkah selanjutnya](#nodejs-quickstart-next-steps)
+ [Terapkan dengan konsol Elastic Beanstalk](#nodejs-quickstart-console)

## AWS Akun Anda
<a name="nodejs-quickstart-aws-account"></a>

Jika Anda belum menjadi AWS pelanggan, Anda perlu membuat AWS akun. Mendaftar memungkinkan Anda mengakses Elastic Beanstalk AWS dan layanan lain yang Anda butuhkan.

Jika Anda sudah memiliki AWS akun, Anda dapat melanjutkan ke[Prasyarat](#nodejs-quickstart-prereq).

### Buat AWS akun
<a name="nodejs-quickstart-aws-account-procedure"></a>

#### Mendaftar untuk Akun AWS
<a name="sign-up-for-aws"></a>

Jika Anda tidak memiliki Akun AWS, selesaikan langkah-langkah berikut untuk membuatnya.

**Untuk mendaftar untuk Akun AWS**

1. Buka [https://portal.aws.amazon.com/billing/pendaftaran.](https://portal.aws.amazon.com/billing/signup)

1. Ikuti petunjuk online.

   Bagian dari prosedur pendaftaran melibatkan menerima panggilan telepon atau pesan teks dan memasukkan kode verifikasi pada keypad telepon.

   Saat Anda mendaftar untuk sebuah Akun AWS, sebuah *Pengguna root akun AWS*dibuat. Pengguna root memiliki akses ke semua Layanan AWS dan sumber daya di akun. Sebagai praktik keamanan terbaik, tetapkan akses administratif ke pengguna, dan gunakan hanya pengguna root untuk melakukan [tugas yang memerlukan akses pengguna root](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks).

AWS mengirimi Anda email konfirmasi setelah proses pendaftaran selesai. Kapan saja, Anda dapat melihat aktivitas akun Anda saat ini dan mengelola akun Anda dengan masuk [https://aws.amazon.com.rproxy.govskope.cake/](https://aws.amazon.com/) dan memilih **Akun Saya**.

#### Buat pengguna dengan akses administratif
<a name="create-an-admin"></a>

Setelah Anda mendaftar Akun AWS, amankan Pengguna root akun AWS, aktifkan AWS IAM Identity Center, dan buat pengguna administratif sehingga Anda tidak menggunakan pengguna root untuk tugas sehari-hari.

**Amankan Anda Pengguna root akun AWS**

1.  Masuk ke [Konsol Manajemen AWS](https://console.aws.amazon.com/)sebagai pemilik akun dengan memilih **pengguna Root** dan memasukkan alamat Akun AWS email Anda. Di laman berikutnya, masukkan kata sandi.

   Untuk bantuan masuk dengan menggunakan pengguna root, lihat [Masuk sebagai pengguna root](https://docs.aws.amazon.com/signin/latest/userguide/console-sign-in-tutorials.html#introduction-to-root-user-sign-in-tutorial) di *AWS Sign-In Panduan Pengguna*.

1. Mengaktifkan autentikasi multi-faktor (MFA) untuk pengguna root Anda.

   Untuk petunjuk, lihat [Mengaktifkan perangkat MFA virtual untuk pengguna Akun AWS root (konsol) Anda](https://docs.aws.amazon.com/IAM/latest/UserGuide/enable-virt-mfa-for-root.html) di Panduan Pengguna *IAM*.

**Buat pengguna dengan akses administratif**

1. Aktifkan Pusat Identitas IAM.

   Untuk mendapatkan petunjuk, silakan lihat [Mengaktifkan AWS IAM Identity Center](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-set-up-for-idc.html) di *Panduan Pengguna AWS IAM Identity Center *.

1. Di Pusat Identitas IAM, berikan akses administratif ke pengguna.

   Untuk tutorial tentang menggunakan Direktori Pusat Identitas IAM sebagai sumber identitas Anda, lihat [Mengkonfigurasi akses pengguna dengan default Direktori Pusat Identitas IAM](https://docs.aws.amazon.com//singlesignon/latest/userguide/quick-start-default-idc.html) di *Panduan AWS IAM Identity Center Pengguna*.

**Masuk sebagai pengguna dengan akses administratif**
+ Untuk masuk dengan pengguna Pusat Identitas IAM, gunakan URL masuk yang dikirim ke alamat email saat Anda membuat pengguna Pusat Identitas IAM.

  Untuk bantuan masuk menggunakan pengguna Pusat Identitas IAM, lihat [Masuk ke portal AWS akses](https://docs.aws.amazon.com/signin/latest/userguide/iam-id-center-sign-in-tutorial.html) di *Panduan AWS Sign-In Pengguna*.

**Tetapkan akses ke pengguna tambahan**

1. Di Pusat Identitas IAM, buat set izin yang mengikuti praktik terbaik menerapkan izin hak istimewa paling sedikit.

   Untuk petunjuknya, lihat [Membuat set izin](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-started-create-a-permission-set.html) di *Panduan AWS IAM Identity Center Pengguna*.

1. Tetapkan pengguna ke grup, lalu tetapkan akses masuk tunggal ke grup.

   Untuk petunjuk, lihat [Menambahkan grup](https://docs.aws.amazon.com//singlesignon/latest/userguide/addgroups.html) di *Panduan AWS IAM Identity Center Pengguna*.

## Prasyarat
<a name="nodejs-quickstart-prereq"></a>

Untuk mengikuti prosedur di panduan ini, Anda memerlukan terminal atau shell baris perintah untuk menjalankan perintah. Perintah ditampilkan dalam daftar yang diawali dengan simbol prompt (\$1) dan nama direktori saat ini, bila perlu.

```
~/eb-project$ this is a command
this is output
```

Di Linux dan macOS, Anda dapat menggunakan shell dan manajer paket pilihan Anda. Pada Windows Anda dapat [menginstal Windows Subsystem untuk Linux untuk](https://docs.microsoft.com/en-us/windows/wsl/install-win10) mendapatkan versi Windows terintegrasi dari Ubuntu dan Bash.

### EB CLI
<a name="nodejs-quickstart-prereq.ebcli"></a>

Tutorial ini menggunakan Elastic Beanstalk Command Line Interface (EB CLI). Untuk detail tentang pemasangan dan konfigurasi EB CLI, lihat [Instal EB CLI dengan skrip pengaturan (disarankan)](eb-cli3.md#eb-cli3-install) dan [Mengonfigurasi EB CLI](eb-cli3-configuration.md).

### Node.js
<a name="nodejs-quickstart-prereq.runtime"></a>

Instal Node.js di mesin lokal Anda dengan mengikuti [Cara menginstal Node.js](https://nodejs.org/en/learn/getting-started/how-to-install-nodejs) di situs web Node.js. 

Verifikasi instalasi Node.js Anda dengan menjalankan perintah berikut.

```
~$ node -v
```

## Langkah 1: Buat aplikasi Node.js
<a name="nodejs-quickstart-create-app"></a>

Buat direktori proyek.

```
~$ mkdir eb-nodejs
~$ cd eb-nodejs
```

Selanjutnya, buat aplikasi yang akan Anda deploy menggunakan Elastic Beanstalk. Kami akan membuat layanan RESTful web “Hello World”.

**Example `~/eb-nodejs/server.js`**  

```
const http = require('node:http');

const hostname = '127.0.0.1';
const port = 8080;

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello Elastic Beanstalk!\n');
});

server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});
```

Aplikasi ini membuka pendengar pada port 8080. Elastic Beanstalk meneruskan permintaan ke aplikasi Anda pada port 8080 secara default untuk Node.js.

## Langkah 2: Jalankan aplikasi Anda secara lokal
<a name="nodejs-quickstart-run-local"></a>

Jalankan perintah berikut untuk menjalankan aplikasi Anda secara lokal.

```
~/eb-nodejs$ node server.js
```

Anda akan melihat teks berikut.

```
Server running at http://127.0.0.1:8080/
```

Masukkan alamat URL `http://127.0.0.1:8080/` di browser web Anda. Browser harus menampilkan “Hello Elastic Beanstalk\$1”.

## Langkah 3: Terapkan aplikasi Node.js Anda dengan EB CLI
<a name="nodejs-quickstart-deploy"></a>

Jalankan perintah berikut untuk membuat lingkungan Elastic Beanstalk untuk aplikasi ini.

**Untuk membuat lingkungan dan menyebarkan aplikasi Node.js**

1. Inisialisasi repositori EB CLI Anda dengan perintah **eb init**.

   ```
   ~/eb-nodejs$ eb init -p node.js nodejs-tutorial --region us-east-2
   ```

   Perintah ini membuat aplikasi bernama `nodejs-tutorial` dan mengkonfigurasi repositori lokal Anda untuk membuat lingkungan dengan versi platform Node.js terbaru.

1. (Opsional) Jalankan **eb init** lagi untuk mengonfigurasi key pair default sehingga Anda dapat menggunakan SSH untuk terhubung ke EC2 instance yang menjalankan aplikasi Anda.

   ```
   ~/eb-nodejs$ eb init
   Do you want to set up SSH for your instances?
   (y/n): y
   Select a keypair.
   1) my-keypair
   2) [ Create new KeyPair ]
   ```

   Pilih pasangan kunci jika Anda sudah memilikinya, atau ikuti prompt untuk membuatnya. Jika Anda tidak melihat prompt atau perlu mengubah pengaturan Anda nanti, jalankan **eb init -i**.

1. Buat lingkungan baru dan deploy aplikasi Anda dengan **eb create**. Elastic Beanstalk secara otomatis membuat file zip untuk aplikasi Anda dan menerapkannya ke instance di lingkungan. EC2 Setelah menerapkan aplikasi Anda, Elastic Beanstalk memulainya di port 8080.

   ```
   ~/eb-nodejs$ eb create nodejs-env
   ```

   Dibutuhkan sekitar lima menit untuk Elastic Beanstalk untuk menciptakan lingkungan Anda.

## Langkah 4: Jalankan aplikasi Anda di Elastic Beanstalk
<a name="nodejs-quickstart-run-eb-ap"></a>

Ketika proses untuk membuat lingkungan Anda selesai, buka situs web Anda dengan**eb open**.

```
~/eb-nodejs$ eb open
```

Selamat\$1 Anda telah menerapkan aplikasi Node.js dengan Elastic Beanstalk\$1 Ini akan membuka jendela peramban menggunakan nama domain yang dibuat untuk aplikasi Anda.

## Langkah 5: Bersihkan
<a name="go-tutorial-cleanup"></a>

Anda dapat menghentikan lingkungan Anda ketika Anda selesai bekerja dengan aplikasi Anda. Elastic Beanstalk AWS mengakhiri semua sumber daya yang terkait dengan lingkungan Anda.

Untuk mengakhiri lingkungan Elastic Beanstalk Anda dengan EB CLI jalankan perintah berikut.

```
~/eb-nodejs$ eb terminate
```

## AWS sumber daya untuk aplikasi Anda
<a name="nodejs-quickstart-eb-resources"></a>

Anda baru saja membuat aplikasi instance tunggal. Ini berfungsi sebagai aplikasi sampel langsung dengan satu EC2 instance, sehingga tidak memerlukan penyeimbangan beban atau penskalaan otomatis. Untuk aplikasi contoh tunggal Elastic Beanstalk menciptakan sumber daya berikut: AWS 
+ **EC2 instance** — Mesin EC2 virtual Amazon yang dikonfigurasi untuk menjalankan aplikasi web pada platform yang Anda pilih.

  Setiap platform menjalankan satu set perangkat lunak, file konfigurasi, dan penulisan yang berbeda untuk mendukung versi bahasa, kerangka kerja, kontainer web tertentu, atau kombinasi dari semua ini. Sebagian besar platform menggunakan Apache atau nginx sebagai proksi terbalik yang memproses lalu lintas web di depan aplikasi web Anda, meneruskan permintaan ke aplikasi web, menyajikan aset statis, dan menghasilkan log akses dan kesalahan.
+ **Grup keamanan instans — Grup** EC2 keamanan Amazon yang dikonfigurasi untuk memungkinkan lalu lintas masuk di port 80. Sumber daya ini memungkinkan lalu lintas HTTP dari penyeimbang beban mencapai EC2 instance yang menjalankan aplikasi web Anda. Secara default, lalu lintas tidak diizinkan di port lain.
+ **Bucket Amazon S3** – Lokasi penyimpanan untuk kode sumber, log, dan artifact lainnya yang dibuat saat Anda menggunakan Elastic Beanstalk.
+ ** CloudWatch Alarm Amazon** — Dua CloudWatch alarm yang memantau beban pada instans di lingkungan Anda dan dipicu jika beban terlalu tinggi atau terlalu rendah. Saat alarm terpicu, grup Auto Scaling Anda akan menaikkan atau menurunkan skala sebagai respons.
+ **CloudFormation stack** - Elastic CloudFormation Beanstalk digunakan untuk meluncurkan sumber daya di lingkungan Anda dan menyebarkan perubahan konfigurasi. Sumber daya ditentukan di sebuah templat yang dapat Anda lihat di [Konsol CloudFormation](https://console.aws.amazon.com/cloudformation).
+  **Nama domain — Nama** domain yang merutekan ke aplikasi web Anda dalam formulir **subdomain*. *region*.elasticbeanstalk.com*. 

Elastic Beanstalk mengelola semua sumber daya tersebut. Ketika Anda mengakhiri lingkungan, Elastic Beanstalk mengakhiri semua sumber daya yang dimuatnya.

## Langkah selanjutnya
<a name="nodejs-quickstart-next-steps"></a>

Setelah lingkungan Anda menjalankan aplikasi, Anda dapat men-deploy versi baru aplikasi atau aplikasi yang berbeda kapan saja. Menyebarkan versi aplikasi baru sangat cepat karena tidak memerlukan penyediaan atau memulai ulang instance. EC2 Anda juga dapat menjelajahi lingkungan baru Anda menggunakan konsol Elastic Beanstalk. Untuk langkah-langkah mendetail, lihat [Menjelajahi lingkungan Anda](GettingStarted.md#GettingStarted.Explore) di bagian *Memulai* panduan ini.

**Coba lebih banyak tutorial**  
Jika Anda ingin mencoba tutorial lain dengan aplikasi contoh yang berbeda, lihat[Lebih banyak contoh aplikasi dan tutorial Elastic Beanstalk untuk Node.js](nodejs-getstarted.md).

Setelah Anda menerapkan satu atau dua contoh aplikasi dan siap untuk mulai mengembangkan dan menjalankan aplikasi Node.js secara lokal, lihat. [Menyiapkan lingkungan pengembangan Node.js Anda untuk Elastic Beanstalk](nodejs-devenv.md)

## Terapkan dengan konsol Elastic Beanstalk
<a name="nodejs-quickstart-console"></a>

Anda juga dapat menggunakan konsol Elastic Beanstalk untuk meluncurkan aplikasi sampel. Untuk langkah-langkah rinci, lihat [Membuat aplikasi contoh](GettingStarted.md#GettingStarted.CreateApp) di Bab *Memulai* panduan ini.

# Menyiapkan lingkungan pengembangan Node.js Anda untuk Elastic Beanstalk
<a name="nodejs-devenv"></a>

Topik ini memberikan petunjuk untuk menyiapkan lingkungan pengembangan Node.js untuk menguji aplikasi Anda secara lokal sebelum menerapkannya. AWS Elastic Beanstalk Ini juga merujuk situs web yang menyediakan instruksi instalasi untuk alat yang berguna.

**Topics**
+ [Instal Node.js](#nodejs-devenv-nodejs)
+ [Konfirmasi instalasi npm](#nodejs-devenv-npm)
+ [Instal AWS SDK untuk Node.js](#nodejs-devenv-awssdk)
+ [Pasang generator Express](#nodejs-devenv-express)
+ [Siapkan kerangka kerja dan server Express](#nodejs-devenv-express-framework)

## Instal Node.js
<a name="nodejs-devenv-nodejs"></a>

Instal Node.js untuk menjalankan aplikasi Node.js secara lokal. Jika Anda tidak memiliki preferensi, dapatkan versi terbaru yang didukung oleh Elastic Beanstalk. Lihat [Node.js](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.nodejs) dalam dokumen *Platform AWS Elastic Beanstalk * untuk daftar versi yang didukung.

Unduh Node.js di [nodejs.org](https://nodejs.org/en/).

## Konfirmasi instalasi npm
<a name="nodejs-devenv-npm"></a>

Node.js menggunakan pengelola paket npm untuk membantu Anda menginstal alat dan kerangka kerja untuk digunakan dalam aplikasi Anda. Karena npm didistribusikan dengan Node.js, Anda akan secara otomatis menginstalnya ketika Anda mengunduh dan menginstal Node.js. Untuk mengonfirmasi npm telah diinstal Anda dapat menjalankan perintah berikut:

```
$ npm -v
```

Untuk informasi lebih lanjut tentang npm, kunjungi situs web [npmjs](https://www.npmjs.com/get-npm).

## Instal AWS SDK untuk Node.js
<a name="nodejs-devenv-awssdk"></a>

Jika Anda perlu mengelola AWS sumber daya dari dalam aplikasi Anda, instal AWS SDK untuk JavaScript di Node.js. Instal SDK dengan npm:

```
$ npm install aws-sdk
```

Kunjungi [AWS SDK for JavaScript di beranda Node.js](https://aws.amazon.com/sdk-for-node-js/) untuk informasi selengkapnya.

## Pasang generator Express
<a name="nodejs-devenv-express"></a>

Express adalah kerangka aplikasi web yang berjalan pada Node.js. Untuk menggunakannya, pertama-tama instal aplikasi baris perintah generator Express. Setelah generator Express diinstal, Anda dapat menjalankan **express** perintah untuk menghasilkan struktur proyek dasar untuk aplikasi web Anda. Setelah proyek dasar, file, dan dependensi diinstal, Anda dapat memulai server Express lokal di mesin pengembangan Anda.

 

**catatan**  
Langkah-langkah ini memandu Anda menginstal generator Express pada sistem operasi Linux.
Untuk Linux, tergantung pada tingkat izin Anda ke direktori sistem, Anda mungkin perlu mengawali beberapa perintah ini. `sudo`

**Untuk menginstal generator Express di lingkungan pengembangan Anda**

1. Buat direktori kerja untuk kerangka kerja dan server Express Anda. 

   ```
   ~$ mkdir node-express
   ~$ cd node-express
   ```

1. Menginstal Express secara global sehingga Anda memiliki akses ke perintah `express`.

   ```
   ~/node-express$ npm install -g express-generator
   ```

1. Bergantung pada sistem pengoperasian, Anda mungkin perlu mengatur jalur untuk menjalankan perintah `express`. Output dari langkah sebelumnya memberikan informasi jika Anda perlu mengatur variabel jalur Anda. Berikut ini adalah contoh untuk Linux.

   ```
   ~/node-express$ export PATH=$PATH:/usr/local/share/npm/bin/express
   ```

   Ketika Anda mengikuti tutorial di chapter ini, Anda harus menjalankan **express** perintah dari direktori yang berbeda. Setiap tutorial menyiapkan struktur proyek Express dasar di direktorinya sendiri.

Anda sekarang telah menginstal generator baris perintah Express. Anda dapat menggunakannya untuk membuat direktori framework untuk aplikasi web Anda, menyiapkan dependensi, dan memulai server aplikasi web. Selanjutnya, kita akan melalui langkah-langkah untuk mencapai ini di `node-express` direktori yang kita buat.

## Siapkan kerangka kerja dan server Express
<a name="nodejs-devenv-express-framework"></a>

Ikuti langkah-langkah ini untuk membuat direktori dan konten kerangka kerja Express dasar. Tutorial dalam Bab ini juga mencakup langkah-langkah ini untuk mengatur kerangka dasar Express di setiap direktori aplikasi tutorial.

**Untuk mengatur kerangka kerja dan server Express**

1. Jalankan perintah `express`. Perintah menghasilkan `package.json`, `app.js`, dan beberapa direktori.

   ```
   ~/node-express$ express
   ```

   Saat diminta, ketik **y** jika Anda ingin melanjutkan.

1. Persiapkan dependensi lokal.

   ```
   ~/node-express$ npm install
   ```

1. Verifikasi server aplikasi web dimulai.

   ```
   ~/node-express$ npm start
   ```

   Anda akan melihat output yang serupa dengan yang berikut:

   ```
   > nodejs@0.0.0 start /home/local/user/node-express
   > node ./bin/www
   ```

   Server berjalan pada port 3000 secara default. Untuk mengujinya, jalankan `curl http://localhost:3000` di terminal lain, atau buka browser di komputer lokal dan masukkan alamat URL`http://localhost:3000`.

   Tekan **Ctrl\$1C** untuk menghentikan server.

# Menggunakan platform Node.js Elastic Beanstalk
<a name="create_deploy_nodejs.container"></a>

Topik ini menjelaskan cara mengonfigurasi, membangun, dan menjalankan aplikasi Node.js Anda di Elastic Beanstalk.

AWS Elastic Beanstalk mendukung sejumlah cabang platform untuk berbagai versi bahasa pemrograman Node.js. Lihat [Node.js](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.nodejs) di dokumen *AWS Elastic Beanstalk Platform* untuk daftar lengkap.

Elastic [Beanstalk menyediakan](command-options.md) opsi konfigurasi yang dapat Anda gunakan untuk menyesuaikan perangkat lunak yang berjalan EC2 pada instance di lingkungan Elastic Beanstalk Anda. Anda dapat [mengonfigurasi variabel lingkungan](environments-cfg-softwaresettings.md#environments-cfg-softwaresettings-console) yang diperlukan oleh aplikasi Anda, mengaktifkan rotasi log ke Amazon S3, dan memetakan folder di sumber aplikasi Anda yang berisi file statis ke jalur yang disajikan oleh server proxy.

Opsi konfigurasi tersedia di konsol Elastic Beanstalk untuk [memodifikasi konfigurasi dari lingkungan yang sedang berjalan](environment-configuration-methods-after.md). Agar Anda tidak kehilangan konfigurasi lingkungan ketika mengakhirinya, Anda dapat menggunakan [konfigurasi tersimpan](environment-configuration-savedconfig.md) untuk menyimpan pengaturan dan kemudian menerapkannya ke lingkungan lain.

Untuk menyimpan pengaturan di kode sumber, Anda dapat menyertakan [file konfigurasi](ebextensions.md). Pengaturan di file konfigurasi diterapkan setiap kali Anda membuat lingkungan atau men-deploy aplikasi Anda. Anda juga dapat menggunakan file konfigurasi untuk menginstal paket, menjalankan penulisan, dan melakukan operasi penyesuaian instans lainnya selama deployment.

Anda dapat [menyertakan `Package.json` file](nodejs-platform-dependencies.md#nodejs-platform-packagejson) dalam bundel sumber Anda untuk menginstal paket selama penerapan, untuk menyediakan perintah mulai, dan untuk menentukan Node.js versi yang Anda ingin aplikasi Anda gunakan. Anda dapat menyertakan [file `npm-shrinkwrap.json`](nodejs-platform-shrinkwrap.md) untuk mengunci versi dependensi.

Node.jsPlatform ini mencakup server proxy untuk melayani aset statis, meneruskan lalu lintas ke aplikasi Anda, dan mengompres respons. Anda dapat [memperpanjang atau menimpa konfigurasi proksi default](nodejs-platform-proxy.md) untuk skenario lanjutan.

Ada beberapa opsi untuk memulai aplikasi Anda. Anda dapat menambahkan a [Procfile](nodejs-configuration-procfile.md)ke bundel sumber Anda untuk menentukan perintah yang memulai aplikasi Anda. Jika Anda tidak memberikan `Procfile` tetapi menyediakan `package.json` file, Elastic Beanstalk berjalan. `npm start` Jika Anda juga tidak menyediakannya, Elastic Beanstalk `app.js` mencari `server.js` file atau, dalam urutan ini, dan menjalankan skrip.

Pengaturan yang diterapkan di konsol Elastic Beanstalk mengganti pengaturan yang sama di file konfigurasi, jika ada. Hal tersebut memungkinkan Anda memiliki pengaturan default di file konfigurasi, dan mengganti keduanya dengan pengaturan khusus lingkungan di konsol tersebut. Untuk informasi selengkapnya tentang yang diutamakan, dan metode lain untuk mengubah pengaturan, lihat [Opsi konfigurasi](command-options.md).

Untuk detail tentang berbagai cara memperluas platform berbasis Linux Elastic Beanstalk, lihat [Memperluas platform Linux Elastic Beanstalk](platforms-linux-extend.md).

## Mengkonfigurasi lingkungan Anda Node.js
<a name="nodejs-platform-console"></a>

Anda dapat menggunakan pengaturan Node.js platform untuk menyempurnakan perilaku instans Amazon EC2 Anda. Anda dapat mengedit konfigurasi instans Amazon EC2 untuk lingkungan Elastic Beanstalk menggunakan konsol Elastic Beanstalk.

Gunakan konsol Elastic Beanstalk untuk mengaktifkan rotasi log ke Amazon S3 dan mengonfigurasi variabel yang dapat dibaca aplikasi Anda dari lingkungan.

**Untuk mengonfigurasi Node.js lingkungan Anda di konsol Elastic Beanstalk**

1. **Buka konsol [Elastic Beanstalk, dan di daftar Wilayah, pilih konsol Elastic](https://console.aws.amazon.com/elasticbeanstalk) Beanstalk.** Wilayah AWS

1. Di panel navigasi, pilih **Lingkungan**, dan kemudian pilih nama lingkungan Anda dari daftar.

1. Pada panel navigasi, pilih **Konfigurasi**.

1. Dalam kategori konfigurasi **Pembaruan, pemantauan, dan pencatatan**, pilih **Edit**.

### Opsi kontainer
<a name="nodejs-platform-console-settings"></a>

Anda dapat menentukan opsi khusus platform berikut ini:
+ **Server proksi** – Server proksi untuk digunakan di instans lingkungan Anda. Secara default, NGINX digunakan.

### Opsi log
<a name="nodejs-platform-console-logging"></a>

Bagian **Opsi Log** memiliki dua pengaturan:
+ **Profil instans** — Menentukan profil instans yang memiliki izin untuk mengakses bucket Amazon S3 yang terkait dengan aplikasi Anda.
+ **Aktifkan rotasi file log ke Amazon S3** — Menentukan apakah file log untuk instans Amazon EC2 aplikasi Anda disalin ke bucket Amazon S3 yang terkait dengan aplikasi Anda.

### File statis
<a name="nodejs-platform-console-staticfiles"></a>

Untuk meningkatkan kinerja, Anda dapat menggunakan bagian **File statis** untuk mengkonfigurasi server proxy untuk melayani file statis (misalnya, HTML atau gambar) dari satu set direktori di dalam aplikasi web Anda. Untuk setiap direktori, Anda mengatur jalur virtual ke pemetaan direktori. Saat server proksi menerima permintaan untuk file di jalur yang ditentukan, server langsung menyajikan file daripada merutekan permintaan ke aplikasi Anda.

Untuk detail tentang mengonfigurasi file statis menggunakan file konfigurasi atau konsol Elastic Beanstalk, lihat. [Menyajikan file statis](environment-cfg-staticfiles.md)

### Properti lingkungan
<a name="nodejs-platform-console-envprops"></a>

Gunakan bagian **Properti Lingkungan** untuk menentukan pengaturan konfigurasi lingkungan pada instans Amazon EC2 yang menjalankan aplikasi Anda. Pengaturan ini diteruskan sebagai pasangan nilai kunci ke aplikasi.

Di dalam Node.js lingkungan yang berjalan di AWS Elastic Beanstalk, Anda dapat mengakses variabel lingkungan dengan menjalankan`process.env.ENV_VARIABLE`.

```
var endpoint = process.env.API_ENDPOINT
```

Node.jsPlatform menetapkan variabel PORT lingkungan ke port tempat server proxy melewati lalu lintas. Untuk informasi selengkapnya, lihat [Mengonfigurasi server proksi](nodejs-platform-proxy.md).

Lihat [Variabel lingkungan dan pengaturan perangkat lunak lainnya](environments-cfg-softwaresettings.md) untuk informasi selengkapnya.

### Mengkonfigurasi lingkungan Amazon Linux AMI (sebelumnya Amazon Linux 2) Node.js
<a name="nodejs-platform-console.alami"></a>

Kategori konfigurasi perangkat lunak konsol berikut hanya didukung pada lingkungan Elastic Beanstalk Node.js yang menggunakan versi platform Amazon Linux AMI (sebelum Amazon Linux 2).

**Catatan**  
Informasi dalam topik ini hanya berlaku untuk cabang platform berbasis Amazon Linux AMI (AL1). AL2023/cabang AL2 platform tidak kompatibel dengan versi platform Amazon Linux AMI (AL1) sebelumnya dan *memerlukan pengaturan konfigurasi yang berbeda*.
 **Pada [18 Juli 2022,](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2022-07-18-linux-al1-retire.html) Elastic Beanstalk menetapkan status semua cabang platform berdasarkan Amazon Linux AMI AL1 () untuk pensiun.** Untuk informasi selengkapnya tentang migrasi ke cabang platform Amazon Linux 2023 saat ini dan didukung penuh, lihat. [Memigrasi aplikasi Elastic Beanstalk Linux Anda ke Amazon Linux 2023 atau Amazon Linux 2](using-features.migration-al.md)

#### Opsi wadah - Amazon Linux AMI (AL1)
<a name="nodejs-platform-console-settings"></a>

Di halaman konfigurasi, tentukan hal berikut:
+ **Proxy server** - Menentukan server web mana yang akan digunakan untuk Node.js koneksi proxy. Secara default, NGINX digunakan. Jika Anda memilih **tidak ada**, pemetaan file statis tidak berlaku, dan GZIP kompresi dinonaktifkan.
+ **Node.jsversi** - Menentukan versi. Node.js Untuk daftar Node.js versi yang didukung, lihat [https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.nodejs](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.nodejs)di panduan *AWS Elastic Beanstalk Platform*.
+ **GZIPkompresi** - Menentukan apakah GZIP kompresi diaktifkan. Secara default, GZIP kompresi diaktifkan.
+ **Perintah node** - Memungkinkan Anda memasukkan perintah yang digunakan untuk memulai Node.js aplikasi. String kosong (default) berarti Elastic `app.js` Beanstalk menggunakan`server.js`, lalu, dan kemudian. `npm start`

## Node.jskonfigurasi namespace
<a name="nodejs-namespaces"></a>

Anda dapat menggunakan [file konfigurasi](ebextensions.md) untuk mengatur opsi konfigurasi dan melakukan tugas-tugas konfigurasi instans lain selama deployment. Opsi konfigurasi dapat berupa [platform khusus](command-options-specific.md) atau berlaku untuk [semua platform di layanan](command-options-general.md) Elastic Beanstalk secara keseluruhan. Opsi konfigurasi diatur ke dalam *ruang nama*.

Anda dapat memilih proxy yang akan digunakan pada instance untuk lingkungan Anda dengan menggunakan `aws:elasticbeanstalk:environment:proxy` namespace. Contoh berikut mengkonfigurasi lingkungan Anda untuk menggunakan server Apache HTTPD proxy.

**Example .ebextensions/nodejs-settings.config**  

```
option_settings:
  aws:elasticbeanstalk:environment:proxy:
    ProxyServer: apache
```

Anda dapat mengonfigurasi proksi untuk menyajikan file statis dengan menggunakan namespace `aws:elasticbeanstalk:environment:proxy:staticfiles`. Untuk informasi lebih lanjut dan contoh, lihat [Menyajikan file statis](environment-cfg-staticfiles.md).

Elastic Beanstalk memberikan banyak opsi konfigurasi untuk menyesuaikan lingkungan Anda. Selain file konfigurasi, Anda juga dapat mengatur opsi konfigurasi menggunakan konsol tersebut, konfigurasi tersimpan, EB CLI, atau AWS CLI. Untuk informasi selengkapnya, lihat [Opsi konfigurasi](command-options.md).

## Platform Amazon Linux AMI (sebelumnya Amazon Linux 2) Node.js
<a name="nodejs.alami"></a>

Jika lingkungan Elastic Node.js Beanstalk Anda menggunakan versi platform AMI Amazon Linux (sebelumnya Amazon Linux 2), pertimbangkan konfigurasi dan rekomendasi spesifik di bagian ini.

**Catatan**  
Informasi dalam topik ini hanya berlaku untuk cabang platform berbasis Amazon Linux AMI (AL1). AL2023/cabang AL2 platform tidak kompatibel dengan versi platform Amazon Linux AMI (AL1) sebelumnya dan *memerlukan pengaturan konfigurasi yang berbeda*.
 **Pada [18 Juli 2022,](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2022-07-18-linux-al1-retire.html) Elastic Beanstalk menetapkan status semua cabang platform berdasarkan Amazon Linux AMI AL1 () untuk pensiun.** Untuk informasi selengkapnya tentang migrasi ke cabang platform Amazon Linux 2023 saat ini dan didukung penuh, lihat. [Memigrasi aplikasi Elastic Beanstalk Linux Anda ke Amazon Linux 2023 atau Amazon Linux 2](using-features.migration-al.md)

### Node.jsopsi konfigurasi khusus platform - Amazon Linux AMI () AL1
<a name="nodejs.alami.options"></a>

Elastic Beanstalk mendukung beberapa opsi konfigurasi khusus platform untuk versi platform Amazon Linux AMI. Node.js Anda dapat memilih server proxy mana yang akan dijalankan di depan aplikasi Anda, memilih versi tertentu Node.js untuk dijalankan, dan memilih perintah yang digunakan untuk menjalankan aplikasi Anda.

Untuk server proxy, Anda dapat menggunakan server Apache proxy NGINX atau proxy. Anda dapat mengatur `none` nilai ke `ProxyServer` opsi. Dengan pengaturan ini, Elastic Beanstalk menjalankan aplikasi Anda secara mandiri, tidak di belakang server proksi. Jika lingkungan Anda menjalankan aplikasi mandiri, perbarui kode Anda untuk mendengarkan port yang NGINX meneruskan lalu lintas ke.

```
var port = process.env.PORT || 8080;

app.listen(port, function() {
  console.log('Server running at http://127.0.0.1:%s', port);
});
```

### Node.jsversi bahasa - Amazon Linux AMI (AL1)
<a name="nodejs.alami.versions"></a>

Dalam hal versi bahasa yang didukung, platform Node.js Amazon Linux AMI berbeda dengan platform yang dikelola Elastic Beanstalk lainnya. Ini karena setiap versi Node.js platform hanya mendukung beberapa versi Node.js bahasa. Untuk daftar Node.js versi yang didukung, lihat [https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.nodejs](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.nodejs)di panduan *AWS Elastic Beanstalk Platform*.

Anda dapat menggunakan opsi konfigurasi spesifik platform untuk mengatur versi bahasa. Untuk petunjuk, lihat [Mengkonfigurasi lingkungan Anda Node.js](#nodejs-platform-console). Atau, gunakan konsol Elastic Beanstalk untuk Node.js memperbarui versi yang digunakan lingkungan Anda sebagai bagian dari memperbarui versi platform Anda.

**catatan**  
Ketika dukungan untuk versi Node.js yang Anda gunakan dihapus dari platform, Anda harus mengubah atau menghapus pengaturan versi sebelum melakukan [pembaruan platform](using-features.platform.upgrade.md). Hal ini mungkin terjadi ketika kelemahan keamanan diidentifikasi untuk satu atau beberapa versi Node.js.  
Ketika ini terjadi, mencoba memperbarui ke versi baru platform yang tidak mendukung konfigurasi [NodeVersion](command-options-specific.md#command-options-nodejs)gagal. Untuk menghindari perlunya membuat lingkungan baru, ubah opsi *NodeVersion*konfigurasi ke versi Node.js yang didukung oleh versi platform lama dan yang baru, atau [hapus pengaturan opsi](environment-configuration-methods-after.md), lalu lakukan pembaruan platform.

**Untuk mengonfigurasi Node.js versi lingkungan Anda di konsol Elastic Beanstalk**

1. **Buka konsol [Elastic Beanstalk, dan di daftar Wilayah, pilih konsol Elastic](https://console.aws.amazon.com/elasticbeanstalk) Beanstalk.** Wilayah AWS

1. Di panel navigasi, pilih **Lingkungan**, dan kemudian pilih nama lingkungan Anda dari daftar.

1. Pada halaman gambaran umum lingkungan, di bawah **Platform**, pilih **Ubah**.

1. Pada kotak dialog **Perbarui versi platform**, pilih Node.js versi.  
![\[Konfirmasi pembaruan versi platform Elastic Beanstalk\]](http://docs.aws.amazon.com/id_id/elasticbeanstalk/latest/dg/images/platform-nodejs-update-node-version.png)

1. Pilih **Simpan**.

### Node.jsruang nama konfigurasi - Amazon Linux AMI () AL1
<a name="nodejs.alami.namespaces"></a>

Platform AMI Node.js Amazon Linux mendefinisikan opsi tambahan di ruang `aws:elasticbeanstalk:container:nodejs` nama `aws:elasticbeanstalk:container:nodejs:staticfiles` dan ruang nama.

File konfigurasi berikut memberitahu Elastic Beanstalk `npm start` untuk digunakan untuk menjalankan aplikasi. Ini juga mengatur jenis proxy ke Apache dan memungkinkan kompresi. Terakhir, file tersebut mengonfigurasi proksi untuk menyediakan file statis dari dua direktori sumber. Salah satu sumber adalah HTML  file di `html` jalur di bawah root situs web dari direktori `statichtml` sumber. Sumber lainnya adalah file gambar di `images` jalur di bawah root situs web dari direktori `staticimages` sumber.

**Example .ebextensions/node-settings.config**  

```
option_settings:
  aws:elasticbeanstalk:container:nodejs: 
    NodeCommand: "npm start"
    ProxyServer: apache
    GzipCompression: true
  aws:elasticbeanstalk:container:nodejs:staticfiles:
    /html: statichtml
    /images: staticimages
```

Elastic Beanstalk memberikan banyak opsi konfigurasi untuk menyesuaikan lingkungan Anda. Selain file konfigurasi, Anda juga dapat mengatur opsi konfigurasi menggunakan konsol tersebut, konfigurasi tersimpan, EB CLI, atau AWS CLI. Untuk informasi selengkapnya, lihat [Opsi konfigurasi](command-options.md).

# Mengkonfigurasi perintah start khusus dengan Procfile on Elastic Beanstalk
<a name="nodejs-configuration-procfile"></a>

Anda dapat menyertakan file yang dipanggil `Procfile` di root bundel sumber Anda untuk menentukan perintah yang memulai aplikasi Anda.

**Example Procfile**  

```
web: node index.js
```

Untuk informasi tentang `Procfile` penggunaan, lihat[Buildfile dan Procfile](platforms-linux-extend.build-proc.md).

**catatan**  
Fitur ini menggantikan `NodeCommand` opsi lama di namespace. `aws:elasticbeanstalk:container:nodejs`

# Mengonfigurasi dependensi aplikasi Anda pada Elastic Beanstalk
<a name="nodejs-platform-dependencies"></a>

Aplikasi Anda mungkin memiliki dependensi pada beberapa Node.js modul, seperti yang Anda tentukan dalam `require()` pernyataan. Modul-modul ini disimpan dalam `node_modules` direktori. Ketika aplikasi Anda berjalan, Node.js memuat modul dari direktori ini. Untuk informasi selengkapnya, lihat [Memuat dari folder node\$1modules dalam dokumentasi](https://nodejs.org/api/modules.html#modules_loading_from_node_modules_folders). Node.js

Anda dapat menentukan dependensi modul ini menggunakan file. `package.json` *Jika Elastic Beanstalk mendeteksi file ini `node_modules` dan direktori tidak ada, Elastic Beanstalk berjalan sebagai pengguna webapp. `npm install`* `npm install`Perintah menginstal dependensi di `node_modules` direktori, yang dibuat Elastic Beanstalk sebelumnya. `npm install`Perintah mengakses paket yang tercantum dalam `package.json` file dari registri npm publik atau lokasi lain. Untuk informasi selengkapnya, lihat situs web [npm Docs.](https://docs.npmjs.com/about-the-public-npm-registry) 

Jika Elastic Beanstalk `node_modules` mendeteksi direktori, Elastic Beanstalk tidak berjalan, bahkan jika ada file. `npm install` `package.json` Elastic Beanstalk mengasumsikan bahwa paket dependensi tersedia di direktori untuk diakses dan dimuat`node_modules`. Node.js

Bagian berikut memberikan informasi selengkapnya tentang membuat dependensi Node.js modul untuk aplikasi Anda.

**catatan**  
Jika Anda mengalami masalah penerapan saat Elastic Beanstalk `npm install` berjalan, pertimbangkan pendekatan alternatif. Sertakan `node_modules` direktori dengan modul dependensi dalam bundel sumber aplikasi Anda. Melakukannya dapat menghindari masalah dengan menginstal dependensi dari registri npm publik saat Anda menyelidiki masalah tersebut. Karena modul ketergantungan bersumber dari direktori lokal, dong ini mungkin juga membantu mengurangi waktu penerapan. Untuk informasi selengkapnya, lihat [Menyertakan Node.js dependensi dalam direktori node\$1modules](#nodejs-platform-nodemodules)

## Menentukan Node.js dependensi dengan file package.json
<a name="nodejs-platform-packagejson"></a>

Sertakan file `package.json` di akar sumber proyek Anda untuk menentukan paket dependensi dan memberikan perintah mulai. Saat `package.json` file ada, dan `node_modules` direktori tidak ada di root sumber proyek Anda, Elastic `npm install` Beanstalk berjalan *sebagai* pengguna webapp untuk menginstal dependensi dari registri npm publik. Elastic Beanstalk juga `start` menggunakan perintah untuk memulai aplikasi Anda. Untuk informasi selengkapnya tentang `package.json` file, lihat [Menentukan dependensi dalam `package.json` file di situs web](https://docs.npmjs.com/specifying-dependencies-and-devdependencies-in-a-package-json-file) *npm* Docs. 

Gunakan kata kunci `scripts` untuk memberikan perintah mulai. Saat ini, `scripts` kata kunci digunakan sebagai pengganti `NodeCommand` opsi lama di `aws:elasticbeanstalk:container:nodejs` namespace.

**Example package.json – Express**  

```
{
    "name": "my-app",
    "version": "0.0.1",
    "private": true,
    "dependencies": {
      "ejs": "latest",
      "aws-sdk": "latest",
      "express": "latest",
      "body-parser": "latest"
    },
    "scripts": {
      "start": "node app.js"
    }
  }
```

**Mode produksi dan dependensi dev**  
*Untuk menentukan dependensi Anda dalam `package.json` file, gunakan atribut *dependensi dan devDependencies*.* Atribut *dependencies* menunjuk paket-paket yang dibutuhkan oleh aplikasi Anda dalam produksi. Atribut *devDependencies* menunjuk paket yang hanya diperlukan untuk pengembangan dan pengujian lokal.

Jika Anda perlu menginstal paket *devDependencies*, setel properti lingkungan NPM\$1USE\$1PRODUCTION ke. `false` Dengan pengaturan ini kami tidak akan menggunakan opsi di atas saat menjalankan npm install. Ini akan mengakibatkan paket *devDependencies diinstal*.

## Menyertakan Node.js dependensi dalam direktori node\$1modules
<a name="nodejs-platform-nodemodules"></a>

Untuk menyebarkan paket dependensi ke instance lingkungan bersama dengan kode aplikasi Anda, sertakan mereka dalam direktori yang diberi nama `node_modules` di root sumber proyek Anda. Untuk informasi selengkapnya, lihat [Mengunduh dan menginstal paket secara lokal di situs](https://docs.npmjs.com/downloading-and-installing-packages-locally) web *npm Docs*. 

[Saat Anda menerapkan `node_modules` direktori ke versi AL2023/AL2 Node.jsplatform, Elastic Beanstalk mengasumsikan bahwa Anda menyediakan paket dependensi Anda sendiri, dan menghindari penginstalan dependensi yang ditentukan dalam file package.json.](#nodejs-platform-packagejson) Node.jsmencari dependensi di direktori. `node_modules` Untuk informasi selengkapnya, lihat [Memuat dari node\$1modules Folder dalam dokumentasi](https://nodejs.org/api/modules.html#modules_loading_from_node_modules_folders). Node.js

**catatan**  
Jika Anda mengalami masalah penerapan saat Elastic Beanstalk `npm install` berjalan, pertimbangkan untuk menggunakan pendekatan yang dijelaskan dalam topik ini sebagai solusi saat Anda menyelidiki masalah tersebut.   
 

### Pertimbangan untuk Node.js di Amazon Linux 2
<a name="nodejs-al2-considerations"></a>

Baca bagian ini jika Anda menggunakan cabang platform *Node.js* yang berjalan di *Amazon Linux 2*.

#### Pertimbangan untuk Node.js di Amazon Linux 2
<a name="nodejs-al2-considerations-detail"></a>

**catatan**  
Informasi dalam topik ini berlaku untuk cabang Node.js platform yang berjalan di Amazon Linux 2. Konten di sini menjelaskan AL2 -fitur dan perilaku spesifik yang berbeda dari AL2023.

**Variasi perintah**  
Opsi perintah bervariasi tergantung pada versi npm yang disertakan pada cabang platform Amazon Linux 2 tempat aplikasi Anda berjalan.
+ npm v6 - Elastic Beanstalk menginstal dependensi dalam mode produksi secara default. Ia menggunakan perintah`npm install --production`. 
+ *npm v7 atau lebih besar — Elastic Beanstalk menghilangkan devDependencies.* Ia menggunakan perintah`npm install --omit=dev`.

Kedua perintah yang tercantum di atas tidak menginstal paket yang *devDependencies*. 

**Protokol SSH dan HTTPS untuk dependensi Git**  
Dimulai dengan rilis platform Amazon Linux 2 7 Maret 2023, Anda dapat menggunakan protokol SSH dan HTTPS untuk mengambil paket dari repositori Git. Platform branch Node.js 16 mendukung protokol SSH dan HTTPS. Node.js14 hanya mendukung protokol HTTPS.

**Example package.json - Node.js 16 mendukung HTTPS dan SSH**  

```
    ...
    "dependencies": {
      "aws-sdk": "https://github.com/aws/aws-sdk-js.git",
      "aws-chime": "git+ssh://git@github.com:aws/amazon-chime-sdk-js.git"
    }
```

**Versi dan rentang versi**  
Gunakan `engines` kata kunci dalam `package.json` file untuk menentukan Node.js versi yang Anda ingin aplikasi Anda gunakan. Anda juga dapat menentukan rentang versi menggunakan notasi npm. Untuk informasi selengkapnya tentang sintaks untuk rentang versi, lihat [Pembuatan Versi Semantik menggunakan npm di situs](https://nodejs.dev/learn/semantic-versioning-using-npm) web. Node.js `engines`Kata kunci dalam Node.js `package.json` file menggantikan `NodeVersion` opsi lama di namespace. `aws:elasticbeanstalk:container:nodejs`

**penting**  
Fitur untuk menentukan rentang versi tidak tersedia untuk cabang platform Node.js yang berjalan AL2023. Kami hanya mendukung satu versi Node.js dalam cabang Node.js tertentu di AL2023. Jika `package.json` file Anda menentukan rentang versi, kami akan mengabaikannya dan default ke versi cabang platform Node.js.

**Example `package.json`— Node.js Versi tunggal**  

```
{
    ...
    "engines": { "node" : "14.16.0" }
  }
```

**Example `package.json`— rentang Node.js versi**  

```
{
    ...
    "engines": { "node" : ">=10 <11" }
  }
```

Ketika rentang versi ditunjukkan, Elastic Beanstalk menginstal versi terbaru yang tersedia Node.js platform dalam kisaran tersebut. Dalam contoh ini, rentang menunjukkan bahwa versi harus lebih besar dari atau sama dengan versi 10, tetapi kurang dari versi 11. [Hasilnya, Elastic Beanstalk menginstal versi 10.x.y terbaru, Node.js yang tersedia di platform yang didukung.](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.nodejs)

Ketahuilah bahwa Anda hanya dapat menentukan Node.js versi yang sesuai dengan cabang platform Anda. Misalnya, jika Anda menggunakan cabang platform Node.js 16, Anda hanya dapat menentukan 16.x.y Node.js versi. Anda dapat menggunakan opsi rentang versi yang didukung oleh npm untuk mengizinkan lebih banyak fleksibilitas. Untuk Node.js versi yang valid untuk setiap cabang platform, lihat [https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.nodejs](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.nodejs)di panduan *AWS Elastic Beanstalk Platform*.

**catatan**  
Ketika support versi Node.js yang digunakan dihapus dari platform, Anda harus mengubah atau menghapus pengaturan versi Node.js sebelum melakukan [pembaruan platform](using-features.platform.upgrade.md). Hal ini mungkin terjadi ketika kelemahan keamanan diidentifikasi pada satu atau beberapa versi Node.js.  
Ketika ini terjadi, upaya untuk memperbarui ke versi platform baru yang tidak support versi Node.js yang dikonfigurasi akan gagal. Agar tidak perlu membuat lingkungan baru, ubah pengaturan versi Node.js di `package.json` ke versi Node.js yang didukung versi platform lama dan yang baru. Anda memiliki opsi untuk menentukan rentang versi Node.js yang mencakup versi yang didukung, seperti yang dijelaskan sebelumnya dalam topik ini. Anda juga memiliki opsi untuk menghapus pengaturan, dan kemudian menyebarkan bundel sumber baru.

# Mengunci dependensi dengan Elastic npm shrinkwrap Beanstalk
<a name="nodejs-platform-shrinkwrap"></a>

Node.jsPlatform berjalan `npm install` sebagai pengguna *webapp* setiap kali Anda menerapkan. Ketika versi baru dependensi Anda tersedia, mereka diinstal saat Anda menerapkan aplikasi Anda, berpotensi menyebabkan penerapan memakan waktu lama.

Agar tidak perlu meningkatkan dependensi dengan membuat file `npm-shrinkwrap.json` yang mengunci dependensi aplikasi Anda ke versi saat ini.

```
$ npm install
$ npm shrinkwrap
wrote npm-shrinkwrap.json
```

Sertakan file ini dalam paket sumber Anda untuk memastikan bahwa dependensi hanya diinstal sekali.

# Mengonfigurasi server proksi
<a name="nodejs-platform-proxy"></a>

Elastic Beanstalk NGINX dapat Apache HTTPD menggunakan atau sebagai proxy terbalik untuk memetakan aplikasi Anda ke penyeimbang beban Elastic Load Balancing di port 80. Nilai default-nya NGINX. Elastic Beanstalk menyediakan konfigurasi proksi default yang dapat Anda perluas atau sepenuhnya diganti dengan konfigurasi Anda sendiri.

Secara default, Elastic Beanstalk mengonfigurasi proxy untuk meneruskan permintaan ke aplikasi Anda pada port 5000. Anda dapat mengganti port default dengan mengatur [properti lingkungan](create_deploy_nodejs.container.md#nodejs-platform-console) `PORT` ke port yang didengarkan aplikasi utama Anda.

**catatan**  
Port yang didengarkan aplikasi Anda tidak memengaruhi port yang didengarkan NGINX server untuk menerima permintaan dari penyeimbang beban.

**Mengkonfigurasi server proxy pada versi platform Anda**  
Semua AL2023/AL2 platform mendukung fitur konfigurasi proxy yang seragam. Untuk informasi selengkapnya tentang mengonfigurasi server proxy pada versi platform yang menjalankan AL2023/AL2, lihat[Konfigurasi proksi terbalik](platforms-linux-extend.proxy.md). 

## Mengonfigurasi proksi di Amazon Linux AMI (Amazon Linux 2 terdahulu)
<a name="nodejs-platform-proxy.alami"></a>

Jika lingkungan Elastic Node.js Beanstalk Anda menggunakan versi platform AMI Amazon Linux (sebelumnya Amazon Linux 2), baca informasi di bagian ini.

**Catatan**  
Informasi dalam topik ini hanya berlaku untuk cabang platform berbasis Amazon Linux AMI (AL1). AL2023/cabang AL2 platform tidak kompatibel dengan versi platform Amazon Linux AMI (AL1) sebelumnya dan *memerlukan pengaturan konfigurasi yang berbeda*.
 **Pada [18 Juli 2022,](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2022-07-18-linux-al1-retire.html) Elastic Beanstalk menetapkan status semua cabang platform berdasarkan Amazon Linux AMI AL1 () untuk pensiun.** Untuk informasi selengkapnya tentang migrasi ke cabang platform Amazon Linux 2023 saat ini dan didukung penuh, lihat. [Memigrasi aplikasi Elastic Beanstalk Linux Anda ke Amazon Linux 2023 atau Amazon Linux 2](using-features.migration-al.md)

### Memperluas dan mengganti konfigurasi proxy default — Amazon Linux AMI () AL1
<a name="nodejs-platform-proxy.alami.extending"></a>

Node.jsPlatform ini menggunakan proxy terbalik untuk menyampaikan permintaan dari port 80 pada instance ke aplikasi Anda yang mendengarkan pada port 8081. Elastic Beanstalk menyediakan konfigurasi proksi default yang dapat Anda perluas atau sepenuhnya diganti dengan konfigurasi Anda sendiri.

Untuk memperluas konfigurasi default, tambahkan file `.conf` ke `/etc/nginx/conf.d` dengan file konfigurasi. Untuk contoh spesifik, lihat[Mengakhiri HTTPS pada instans EC2 yang menjalankan Node.js](https-singleinstance-nodejs.md).

Node.jsPlatform menetapkan variabel PORT lingkungan ke port tempat server proxy melewati lalu lintas. Baca variabel ini dalam kode Anda untuk mengonfigurasi port untuk aplikasi Anda.

```
    var port = process.env.PORT || 3000;

    var server = app.listen(port, function () {
        console.log('Server running at http://127.0.0.1:' + port + '/');
    });
```

NGINXKonfigurasi default meneruskan lalu lintas ke server hulu yang diberi `nodejs` nama di. `127.0.0.1:8081` Dimungkinkan untuk menghapus konfigurasi default dan menyediakan konfigurasi Anda sendiri dalam [file konfigurasi](ebextensions.md).

**Example .ebextensions/proxy.config**  
Contoh berikut menghapus konfigurasi default dan menambahkan konfigurasi kustom yang meneruskan lalu lintas ke port 5000, bukan 8081.  

```
files:
  /etc/nginx/conf.d/proxy.conf:
    mode: "000644"
    owner: root
    group: root
    content: |
      upstream nodejs {
        server 127.0.0.1:5000;
        keepalive 256;
      }

      server {
        listen 8080;

        if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})T(\d{2})") {
            set $year $1;
            set $month $2;
            set $day $3;
            set $hour $4;
        }
        access_log /var/log/nginx/healthd/application.log.$year-$month-$day-$hour healthd;
        access_log  /var/log/nginx/access.log  main;

        location / {
            proxy_pass  http://nodejs;
            proxy_set_header   Connection "";
            proxy_http_version 1.1;
            proxy_set_header        Host            $host;
            proxy_set_header        X-Real-IP       $remote_addr;
            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        }

        gzip on;
        gzip_comp_level 4;
        gzip_types text/html text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

        location /static {
            alias /var/app/current/static;
        }

      }

  /opt/elasticbeanstalk/hooks/configdeploy/post/99_kill_default_nginx.sh:
    mode: "000755"
    owner: root
    group: root
    content: |
      #!/bin/bash -xe
      rm -f /etc/nginx/conf.d/00_elastic_beanstalk_proxy.conf
      service nginx stop 
      service nginx start

container_commands:
  removeconfig:
    command: "rm -f /tmp/deployment/config/#etc#nginx#conf.d#00_elastic_beanstalk_proxy.conf /etc/nginx/conf.d/00_elastic_beanstalk_proxy.conf"
```
Contoh konfigurasi (`/etc/nginx/conf.d/proxy.conf`) menggunakan konfigurasi default di `/etc/nginx/conf.d/00_elastic_beanstalk_proxy.conf` sebagai basis untuk menyertakan blok server default dengan pengaturan kompresi dan log, dan pemetaan file statis.  
`removeconfig`Perintah menghapus konfigurasi default untuk wadah sehingga server proxy menggunakan konfigurasi khusus. Elastic Beanstalk menciptakan kembali konfigurasi default ketika setiap konfigurasi di-deploy. Untuk menjelaskan hal ini, dalam contoh berikut, post-configuration-deployment hook (`/opt/elasticbeanstalk/hooks/configdeploy/post/99_kill_default_nginx.sh`) ditambahkan. Ini menghapus konfigurasi default dan memulai ulang server proksi.

**catatan**  
Konfigurasi default mungkin berubah di versi Node.js platform yang akan datang. Gunakan versi konfigurasi terbaru sebagai dasar penyesuaian Anda untuk memastikan kompatibilitas.

Jika Anda mengganti konfigurasi default, Anda harus menentukan pemetaan dan kompresi file statis apa pun. GZIP Ini karena platform tidak dapat menerapkan [pengaturan standar](create_deploy_nodejs.container.md#nodejs-namespaces).

# Lebih banyak contoh aplikasi dan tutorial Elastic Beanstalk untuk Node.js
<a name="nodejs-getstarted"></a>

Bagian ini menyediakan aplikasi dan tutorial tambahan. [QuickStart untuk Node.js](nodejs-quickstart.md)Topik yang terletak sebelumnya dalam topik ini memandu Anda melalui peluncuran contoh aplikasi Node.js dengan EB CLI.

 Untuk memulai aplikasi Node.js aktif AWS Elastic Beanstalk, yang Anda butuhkan hanyalah [bundel sumber](applications-sourcebundle.md) aplikasi untuk diunggah sebagai versi aplikasi pertama Anda dan untuk menyebarkan ke lingkungan. 

## Meluncurkan lingkungan dengan sampel aplikasi Node.js
<a name="nodejs-getstarted-samples"></a>

Elastic Beanstalk menyediakan contoh aplikasi satu halaman untuk setiap platform serta contoh yang lebih kompleks yang menunjukkan penggunaan sumber daya AWS tambahan seperti Amazon RDS dan fitur khusus bahasa atau platform dan. APIs

**catatan**  
Ikuti langkah-langkah dalam `README.md` file bundel sumber untuk menerapkannya. 


**Sampel**  

|  Tipe lingkungan  |  Paket sumber  |  Deskripsi  | 
| --- | --- | --- | 
|  Server Web  |   [nodejs.zip](samples/nodejs.zip)   |  Aplikasi satu halaman. Untuk meluncurkan aplikasi sampel dengan EB CLI, lihat. [QuickStart untuk Node.js](nodejs-quickstart.md) Anda juga dapat menggunakan konsol Elastic Beanstalk untuk meluncurkan aplikasi sampel. Untuk langkah-langkah rinci, lihat [Membuat aplikasi contoh](GettingStarted.md#GettingStarted.CreateApp) di Bab *Memulai* panduan ini.  | 
|  Server Web dengan Amazon RDS  |  [nodejs-example-express-rds.zip](samples/nodejs-example-express-rds.zip)  |  Aplikasi log hiking yang menggunakan framework Express dan Amazon Relational Database Service (RDS). [Tutorial](create_deploy_nodejs_express.md)  | 
|  Server Web dengan Amazon ElastiCache  |  [nodejs-example-express-elasticache.zip](samples/nodejs-example-express-elasticache.zip)  |  Aplikasi web ekspres yang menggunakan Amazon ElastiCache untuk pengelompokan. Pengklasteran meningkatkan ketersediaan, performa, dan keamanan aplikasi web Anda yang tinggi. [Tutorial](nodejs-express-clustering.md)  | 
|  Server Web dengan DynamoDB, Amazon SNS dan Amazon SQS  |  [nodejs-example-dynamo.zip](samples/nodejs-example-dynamo.zip)  |  situs web Express yang mengumpulkan informasi kontak pengguna untuk kampanye pemasaran perusahaan baru. Menggunakan AWS SDK for JavaScript di Node.js untuk menulis entri ke tabel DynamoDB, dan file konfigurasi Elastic Beanstalk untuk membuat resource di DynamoDB, Amazon SNS, dan Amazon SQS. [Tutorial](nodejs-dynamodb-tutorial.md)  | 

## Langkah selanjutnya
<a name="nodejs-getstarted-next"></a>

Setelah Anda memiliki lingkungan yang menjalankan aplikasi, Anda dapat men-deploy versi baru aplikasi atau aplikasi yang sama sekali berbeda setiap saat. Men-deploy versi aplikasi baru itu sangatlah cepat karena tidak memerlukan persediaan atau memulai ulang instans EC2. Untuk detail deployment aplikasi, lihat [Men-deploy Versi Baru Aplikasi Anda](GettingStarted.md#GettingStarted.DeployApp).

Setelah Anda menerapkan satu atau dua contoh aplikasi dan siap untuk mulai mengembangkan dan menjalankan aplikasi Node.js secara lokal, lihat [Menyiapkan lingkungan pengembangan Node.js Anda untuk Elastic Beanstalk](nodejs-devenv.md) untuk menyiapkan lingkungan pengembangan Node.js dengan semua alat yang Anda perlukan.

# Menyebarkan aplikasi Node.js Express ke Elastic Beanstalk
<a name="create_deploy_nodejs_express"></a>

[Bagian ini memandu Anda melalui penerapan aplikasi sampel ke Elastic Beanstalk menggunakan Elastic Beanstalk Command Line Interface (EB CLI) dan kemudian memperbarui aplikasi untuk menggunakan framework Express.](http://expressjs.com/) 

## Prasyarat
<a name="create_deploy_nodejs_express.prerequisites"></a>

Tutorial ini membutuhkan prasyarat berikut:
+ Runtime Node.js
+ Perangkat lunak pengelola paket Node.js default, npm
+ Generator baris perintah Express
+ Antarmuka Baris Perintah Elastic Beanstalk (EB CLI)

Untuk detail tentang menginstal tiga komponen pertama yang terdaftar dan menyiapkan lingkungan pengembangan lokal Anda, lihat[Menyiapkan lingkungan pengembangan Node.js Anda untuk Elastic Beanstalk](nodejs-devenv.md). Untuk tutorial ini, Anda tidak perlu menginstal AWS SDK untuk Node.js, yang juga disebutkan dalam topik yang direferensikan.

Untuk detail tentang menginstal dan mengonfigurasi CLI EB, lihat dan. [Instal EB CLI dengan skrip pengaturan (disarankan)](eb-cli3.md#eb-cli3-install) [Mengonfigurasi EB CLI](eb-cli3-configuration.md)

## Membuat lingkungan Elastic Beanstalk
<a name="create_deploy_nodejs_express.eb_init-rds"></a>

**Direktori aplikasi Anda**  
Tutorial ini menggunakan direktori yang disebut `nodejs-example-express-rds` untuk bundel sumber aplikasi. Buat `nodejs-example-express-rds` direktori untuk tutorial ini.

```
~$ mkdir nodejs-example-express-rds
```

**catatan**  
Setiap tutorial dalam chapter ini menggunakan direktorinya sendiri untuk bundel sumber aplikasi. Nama direktori cocok dengan nama aplikasi sampel yang digunakan oleh tutorial.

Ubah direktori kerja Anda saat ini menjadi`nodejs-example-express-rds`.

```
~$ cd nodejs-example-express-rds
```

Sekarang, mari kita mengatur lingkungan Elastic Beanstalk yang menjalankan platform Node.js dan aplikasi sampel. Kita akan menggunakan antarmuka baris perintah Elastic Beanstalk (EB CLI).

**Untuk mengonfigurasi repositori EB CLI untuk aplikasi Anda dan membuat lingkungan Elastic Beanstalk yang menjalankan platform Node.js**

1. Buat repositori dengan perintah **[**eb init**](eb3-init.md)**.

   ```
   ~/nodejs-example-express-rds$ eb init --platform node.js --region <region>
   ```

   Perintah ini membuat file konfigurasi dalam folder bernama `.elasticbeanstalk` yang menentukan pengaturan dalam membuat lingkungan untuk aplikasi Anda, dan membuat sebuah aplikasi Elastic Beanstalk yang diambil dari nama folder saat ini.

1. Buat lingkungan yang menjalankan aplikasi sampel dengan perintah **[**eb create**](eb3-create.md)**.

   ```
   ~/nodejs-example-express-rds$ eb create --sample nodejs-example-express-rds
   ```

   Perintah ini membuat lingkungan yang seimbang beban dengan pengaturan default untuk platform Node.js dan sumber daya berikut:
   + **EC2 instance** — Mesin virtual Amazon Elastic Compute Cloud (Amazon EC2) yang dikonfigurasi untuk menjalankan aplikasi web pada platform yang Anda pilih.

     Setiap platform menjalankan satu set perangkat lunak, file konfigurasi dan penulisan tertentu untuk mendukung versi bahasa, kerangka kerja, kontainer web tertentu, atau kombinasi dari semua ini. Sebagian besar platform menggunakan Apache atau NGINX sebagai proksi terbalik yang ada di depan aplikasi web Anda, meneruskan permintaan ke aplikasi web, menyajikan aset statis, dan menghasilkan log akses dan kesalahan.
   + **Grup keamanan instans — Grup** EC2 keamanan Amazon yang dikonfigurasi untuk memungkinkan lalu lintas masuk pada port 80. Sumber daya ini memungkinkan lalu lintas HTTP dari penyeimbang beban mencapai EC2 instance yang menjalankan aplikasi web Anda. Secara default, lalu lintas tidak diizinkan di port lain.
   + **Penyeimbang beban** – Penyeimbang beban Elastic Load Balancing yang dikonfigurasi untuk mendistribusikan permintaan ke instans yang menjalankan aplikasi Anda. Penyeimbang beban juga menghilangkan kebutuhan untuk mengekspos instans Anda langsung ke internet.
   + **Grup keamanan penyeimbang beban - Grup** EC2 keamanan Amazon yang dikonfigurasi untuk memungkinkan lalu lintas masuk di port 80. Sumber daya ini memungkinkan lalu lintas HTTP dari internet mencapai penyeimbang beban. Secara default, lalu lintas tidak diizinkan di port lain.
   + **Grup Auto Scaling** – Grup Auto Scaling yang dikonfigurasi untuk menggantikan instans jika diakhiri atau menjadi tidak tersedia.
   + **Bucket Amazon S3** – Lokasi penyimpanan untuk kode sumber, log, dan artifact lainnya yang dibuat saat Anda menggunakan Elastic Beanstalk.
   + ** CloudWatch Alarm Amazon** — Dua CloudWatch alarm yang memantau beban pada instans di lingkungan Anda dan yang dipicu jika beban terlalu tinggi atau terlalu rendah. Saat alarm terpicu, grup Auto Scaling Anda akan menaikkan atau menurunkan skala sebagai respons.
   + **CloudFormation stack** - Elastic CloudFormation Beanstalk digunakan untuk meluncurkan sumber daya di lingkungan Anda dan menyebarkan perubahan konfigurasi. Sumber daya ditentukan di sebuah templat yang dapat Anda lihat di [Konsol CloudFormation](https://console.aws.amazon.com/cloudformation).
   + **Nama domain — Nama** domain yang merutekan ke aplikasi web Anda dalam formulir **subdomain*. *region*.elasticbeanstalk.com*.
**Keamanan domain**  
[Untuk meningkatkan keamanan aplikasi Elastic Beanstalk Anda, domain elasticbeanstalk.com terdaftar di *Daftar* Akhiran Publik (PSL).](https://publicsuffix.org/)  
Jika Anda perlu mengatur cookie sensitif di nama domain default untuk aplikasi Elastic Beanstalk Anda, kami sarankan Anda menggunakan cookie `__Host-` dengan awalan untuk meningkatkan keamanan. Praktik ini melindungi domain Anda dari upaya pemalsuan permintaan lintas situs (CSRF). Untuk informasi selengkapnya, lihat halaman [Set-Cookie](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#cookie_prefixes) di Jaringan Pengembang Mozilla.

1. Ketika pembuatan lingkungan selesai, gunakan perintah [**eb open**](eb3-open.md) untuk membuka URL lingkungan di browser default.

   ```
   ~/nodejs-example-express-rds$ eb open
   ```

Anda sekarang telah membuat lingkungan Elastic Beanstalk Node.js dengan aplikasi sampel. Anda dapat memperbaruinya dengan aplikasi Anda sendiri. Selanjutnya, kami memperbarui aplikasi sampel untuk menggunakan kerangka kerja Express.

## Perbarui aplikasi untuk menggunakan Express
<a name="create_deploy_nodejs_express.update"></a>

Setelah Anda membuat lingkungan dengan aplikasi sampel, Anda dapat memperbaruinya dengan aplikasi Anda sendiri. Dalam prosedur ini, pertama-tama kita menjalankan **npm install** perintah **express** dan untuk mengatur kerangka kerja Express di direktori aplikasi Anda. Kemudian kami menggunakan EB CLI untuk memperbarui lingkungan Elastic Beanstalk Anda dengan aplikasi yang diperbarui.

**Memperbarui aplikasi Anda untuk menggunakan Express**

1. Jalankan perintah `express`. Perintah menghasilkan `package.json`, `app.js`, dan beberapa direktori.

   ```
   ~/nodejs-example-express-rds$ express
   ```

   Saat diminta, ketik **y** jika Anda ingin melanjutkan.
**catatan**  
Jika **express** perintah tidak berfungsi, Anda mungkin belum menginstal generator baris perintah Express seperti yang dijelaskan di bagian *Prasyarat* sebelumnya. Atau pengaturan jalur direktori untuk mesin lokal Anda mungkin perlu diatur untuk menjalankan **express** perintah. Lihat bagian *Prasyarat* untuk langkah-langkah rinci tentang pengaturan lingkungan pengembangan Anda, sehingga Anda dapat melanjutkan dengan tutorial ini. 

1. Persiapkan dependensi lokal.

   ```
   ~/nodejs-example-express-rds$ npm install
   ```

1. (Opsional) Verifikasi server aplikasi web dimulai.

   ```
   ~/nodejs-example-express-rds$ npm start
   ```

   Anda akan melihat output yang serupa dengan yang berikut:

   ```
   > nodejs@0.0.0 start /home/local/user/node-express
   > node ./bin/www
   ```

   Server berjalan pada port 3000 secara default. Untuk mengujinya, jalankan `curl http://localhost:3000` di terminal lain, atau buka browser di komputer lokal dan masukkan alamat URL`http://localhost:3000`.

   Tekan **Ctrl\$1C** untuk menghentikan server.

1. Terapkan perubahan ke lingkungan Elastic Beanstalk Anda dengan perintah. [**eb deploy**](eb3-deploy.md)

   ```
   ~/nodejs-example-express-rds$ eb deploy
   ```

1. Setelah lingkungan berwarna hijau dan siap, refresh URL untuk memverifikasi bahwa itu berfungsi. Anda akan melihat halaman web yang bertuliskan **Selamat Datang di Express**.

Selanjutnya, mari kita perbarui aplikasi Express untuk menyajikan file statis dan menambahkan halaman baru.

**Untuk mengonfigurasi file statis dan menambahkan halaman baru ke aplikasi Express**

1. Tambahkan file konfigurasi kedua di [`.ebextensions`](ebextensions.md)folder dengan konten berikut:

   **`nodejs-example-express-rds/.ebextensions/staticfiles.config`**

   ```
   option_settings:
       aws:elasticbeanstalk:environment:proxy:staticfiles:
           /stylesheets: public/stylesheets
   ```

   Pengaturan ini mengonfigurasi server proksi untuk menyajikan file di folder `public` pada jalur `/public` aplikasi. Melayani file secara statis dari server proxy mengurangi beban pada aplikasi Anda. Untuk informasi selengkapnya, lihat [File statis](create_deploy_nodejs.container.md#nodejs-platform-console-staticfiles) sebelumnya di Bab ini.

1. (Opsional) Untuk mengonfirmasi bahwa pemetaan statis dikonfigurasi dengan benar, komentari konfigurasi pemetaan statis di. `nodejs-example-express-rds/app.js` Ini menghapus pemetaan dari aplikasi node.

   ```
   //  app.use(express.static(path.join(__dirname, 'public'))); 
   ```

   Pemetaan file statis dalam `staticfiles.config` file dari langkah sebelumnya harus tetap memuat stylesheet dengan sukses, bahkan setelah Anda mengomentari baris ini. Untuk memverifikasi bahwa pemetaan file statis dimuat melalui konfigurasi file statis proxy, bukan aplikasi ekspres, hapus nilai berikut. `option_settings:` Setelah dihapus dari konfigurasi file statis dan aplikasi node, stylesheet akan gagal dimuat.

   Ingatlah untuk mengatur ulang isi dari kedua `nodejs-example-express-rds/app.js` dan `staticfiles.config` ketika Anda selesai pengujian.

1. Menambahkan `nodejs-example-express-rds/routes/hike.js`. Ketik berikut ini:

   ```
   exports.index = function(req, res) {
    res.render('hike', {title: 'My Hiking Log'});
   };
   
   exports.add_hike = function(req, res) {
   };
   ```

1. Perbarui `nodejs-example-express-rds/app.js` untuk menyertakan tiga baris baru.

   Pertama, tambahkan baris berikut untuk menambahkan `require` pada rute ini:

   ```
   var hike = require('./routes/hike');
   ```

   File Anda akan terlihat mirip dengan snippet berikut:

   ```
   var express = require('express');
   var path = require('path');
   var hike = require('./routes/hike');
   ```

   Kemudian, tambahkan dua baris berikut ke `nodejs-example-express-rds/app.js` setelah `var app = express();`

   ```
   app.get('/hikes', hike.index);
   app.post('/add_hike', hike.add_hike);
   ```

   File Anda akan terlihat mirip dengan snippet berikut:

   ```
   var app = express();
   app.get('/hikes', hike.index);
   app.post('/add_hike', hike.add_hike);
   ```

1. Salin `nodejs-example-express-rds/views/index.jade` ke `nodejs-example-express-rds/views/hike.jade`. 

   ```
   ~/nodejs-example-express-rds$ cp views/index.jade views/hike.jade
   ```

1. Terapkan perubahan dengan [**eb deploy**](eb3-deploy.md)perintah.

   ```
   ~/nodejs-example-express-rds$ eb deploy
   ```

1. Lingkungan Anda akan diperbarui setelah beberapa menit. Setelah lingkungan Anda hijau dan siap, verifikasi bahwa itu bekerja dengan me-refresh peramban Anda dan menambahkan **hikes** di akhir URL (misalnya, `http://node-express-env-syypntcz2q.elasticbeanstalk.com/hikes`).

   Anda akan melihat halaman web berjudul **Log Hiking Saya**.

Anda sekarang telah membuat aplikasi web yang menggunakan kerangka kerja Express. Di bagian berikutnya, kita akan memodifikasi aplikasi untuk menggunakan Amazon Relational Database Service (RDS) untuk menyimpan log hiking.

## Perbarui aplikasi untuk menggunakan Amazon RDS
<a name="create_deploy_nodejs_express.add_rds"></a>

Pada langkah selanjutnya ini kami memperbarui aplikasi untuk menggunakan Amazon RDS for MySQL.

**Untuk memperbarui aplikasi Anda untuk menggunakan RDS untuk MySQL**

1. [Untuk membuat database RDS untuk MySQL yang digabungkan ke lingkungan Elastic Beanstalk Anda, ikuti petunjuk dalam topik Menambahkan database yang disertakan nanti dalam chapter ini.](create-deploy-nodejs.rds.md) Menambahkan instance database membutuhkan waktu sekitar 10 menit.

1.  Perbarui bagian dependensi di `package.json` dengan konten berikut: 

   ```
   "dependencies": {
       "async": "^3.2.4",
       "express": "4.18.2",
       "jade": "1.11.0",
       "mysql": "2.18.1",
       "node-uuid": "^1.4.8",
       "body-parser": "^1.20.1",
       "method-override": "^3.0.0",
       "morgan": "^1.10.0",
       "errorhandler": "^1.5.1"
     }
   ```

1. Jalankan **npm install**.

   ```
   ~/nodejs-example-express-rds$ npm install
   ```

1. Perbarui `app.js` untuk terhubung ke database, membuat tabel, dan menyisipkan log hiking default tunggal. Setiap kali aplikasi ini digunakan, aplikasi ini akan menjatuhkan tabel kenaikan sebelumnya dan membuatnya kembali.

   ```
   /**
    * Module dependencies.
    */
   
    const express = require('express')
    , routes = require('./routes')
    , hike = require('./routes/hike')
    , http = require('http')
    , path = require('path')
    , mysql = require('mysql')
    , async = require('async')
    , bodyParser = require('body-parser')
    , methodOverride = require('method-override')
    , morgan = require('morgan')
    , errorhandler = require('errorhandler');
   
   const { connect } = require('http2');
   
   const app = express()
   
   app.set('views', __dirname + '/views')
   app.set('view engine', 'jade')
   app.use(methodOverride())
   app.use(bodyParser.json())
   app.use(bodyParser.urlencoded({ extended: true }))
   app.use(express.static(path.join(__dirname, 'public')))
   
   
   app.set('connection', mysql.createConnection({
   host: process.env.RDS_HOSTNAME,
   user: process.env.RDS_USERNAME,
   password: process.env.RDS_PASSWORD,
   port: process.env.RDS_PORT}));  
   
   function init() {
    app.get('/', routes.index);
    app.get('/hikes', hike.index);
    app.post('/add_hike', hike.add_hike);
   }
   
   const client = app.get('connection');
   async.series([
    function connect(callback) {
      client.connect(callback);
      console.log('Connected!');
    },
    function clear(callback) {
      client.query('DROP DATABASE IF EXISTS mynode_db', callback);
    },
    function create_db(callback) {
      client.query('CREATE DATABASE mynode_db', callback);
    },
    function use_db(callback) {
      client.query('USE mynode_db', callback);
    },
    function create_table(callback) {
       client.query('CREATE TABLE HIKES (' +
                           'ID VARCHAR(40), ' +
                           'HIKE_DATE DATE, ' +
                           'NAME VARCHAR(40), ' +
                           'DISTANCE VARCHAR(40), ' +
                           'LOCATION VARCHAR(40), ' +
                           'WEATHER VARCHAR(40), ' +
                           'PRIMARY KEY(ID))', callback);
    },
    function insert_default(callback) {
      const hike = {HIKE_DATE: new Date(), NAME: 'Hazard Stevens',
            LOCATION: 'Mt Rainier', DISTANCE: '4,027m vertical', WEATHER:'Bad', ID: '12345'};
      client.query('INSERT INTO HIKES set ?', hike, callback);
    }
   ], function (err, results) {
    if (err) {
      console.log('Exception initializing database.');
      throw err;
    } else {
      console.log('Database initialization complete.');
      init();
    }
   });
   
   module.exports = app
   ```

1. Tambahkan konten berikut ke`routes/hike.js`. Ini akan memungkinkan rute untuk memasukkan log hiking baru ke database *HIKES.*

   ```
   const uuid = require('node-uuid');
   exports.index = function(req, res) {
     res.app.get('connection').query( 'SELECT * FROM HIKES', function(err,
   rows) {
       if (err) {
         res.send(err);
       } else {
         console.log(JSON.stringify(rows));
         res.render('hike', {title: 'My Hiking Log', hikes: rows});
     }});
   };
   exports.add_hike = function(req, res){
     const input = req.body.hike;
     const hike = { HIKE_DATE: new Date(), ID: uuid.v4(), NAME: input.NAME,
     LOCATION: input.LOCATION, DISTANCE: input.DISTANCE, WEATHER: input.WEATHER};
     console.log('Request to log hike:' + JSON.stringify(hike));
     req.app.get('connection').query('INSERT INTO HIKES set ?', hike, function(err) {
         if (err) {
           res.send(err);
         } else {
           res.redirect('/hikes');
         }
      });
   };
   ```

1. Ganti konten `routes/index.js` dengan yang berikut ini:

   ```
   /*
    * GET home page.
    */
   
   exports.index = function(req, res){
     res.render('index', { title: 'Express' });
   };
   ```

1. Tambahkan template giok berikut `views/hike.jade` untuk menyediakan antarmuka pengguna untuk menambahkan log hiking.

   ```
   extends layout
   
   block content
     h1= title
     p Welcome to #{title}
   
     form(action="/add_hike", method="post")
       table(border="1")
         tr
           td Your Name
           td
             input(name="hike[NAME]", type="textbox")
         tr
           td Location
           td
             input(name="hike[LOCATION]", type="textbox")
         tr
           td Distance
           td
             input(name="hike[DISTANCE]", type="textbox")
         tr
           td Weather
           td
             input(name="hike[WEATHER]", type="radio", value="Good")
             | Good
             input(name="hike[WEATHER]", type="radio", value="Bad")
             | Bad
             input(name="hike[WEATHER]", type="radio", value="Seattle", checked)
             | Seattle
         tr
           td(colspan="2")
             input(type="submit", value="Record Hike")
   
     div
       h3 Hikes
       table(border="1")
         tr
           td Date
           td Name
           td Location
           td Distance
           td Weather
         each hike in hikes
           tr
             td #{hike.HIKE_DATE.toDateString()}
             td #{hike.NAME}
             td #{hike.LOCATION}
             td #{hike.DISTANCE}
             td #{hike.WEATHER}
   ```

1. Terapkan perubahan dengan [**eb deploy**](eb3-deploy.md)perintah.

   ```
   ~/nodejs-example-express-rds$ eb deploy
   ```

## Bersihkan
<a name="create_deploy_nodejs_express.delete"></a>

Jika Anda selesai bekerja dengan Elastic Beanstalk, Anda dapat menghentikan lingkungan Anda.

Gunakan perintah **eb terminate** untuk mengakhiri lingkungan Anda dan semua sumber daya yang dimuatnya.

```
~/nodejs-example-express-rds$ eb terminate
The environment "nodejs-example-express-rds-env" and all associated instances will be terminated.
To confirm, type the environment name: nodejs-example-express-rds-env
INFO: terminateEnvironment is starting.
...
```

# Menyebarkan aplikasi Node.js Express dengan pengelompokan ke Elastic Beanstalk
<a name="nodejs-express-clustering"></a>

[http://expressjs.com/](http://expressjs.com/) Pengklasteran meningkatkan ketersediaan, performa, dan keamanan aplikasi web Anda yang tinggi. Untuk mempelajari lebih lanjut tentang Amazon ElastiCache, buka [Apa itu Amazon ElastiCache (Memcached](https://docs.aws.amazon.com/AmazonElastiCache/latest/mem-ug/Introduction.html))? di *Panduan Pengguna Amazon ElastiCache (Memcached)*.

**catatan**  
Contoh ini menciptakan AWS sumber daya, yang mungkin dikenakan biaya untuk Anda. Untuk informasi lebih lanjut tentang AWS harga, lihat[https://aws.amazon.com/pricing/](https://aws.amazon.com/pricing/). Beberapa layanan adalah bagian dari Tingkat Penggunaan AWS Gratis. Jika Anda adalah pelanggan baru, Anda dapat menguji layanan ini secara gratis. Lihat [https://aws.amazon.com/free/](https://aws.amazon.com/free/) untuk informasi selengkapnya.

## Prasyarat
<a name="nodejs-express-clustering.prereq"></a>

Tutorial ini membutuhkan prasyarat berikut:
+ Runtime Node.js
+ Perangkat lunak pengelola paket Node.js default, npm
+ Generator baris perintah Express
+ Antarmuka Baris Perintah Elastic Beanstalk (EB CLI)

Untuk detail tentang menginstal tiga komponen pertama yang terdaftar dan menyiapkan lingkungan pengembangan lokal Anda, lihat[Menyiapkan lingkungan pengembangan Node.js Anda untuk Elastic Beanstalk](nodejs-devenv.md). Untuk tutorial ini, Anda tidak perlu menginstal AWS SDK untuk Node.js, yang juga disebutkan dalam topik yang direferensikan.

Untuk detail tentang menginstal dan mengonfigurasi CLI EB, lihat dan. [Instal EB CLI dengan skrip pengaturan (disarankan)](eb-cli3.md#eb-cli3-install) [Mengonfigurasi EB CLI](eb-cli3-configuration.md)

## Membuat lingkungan Elastic Beanstalk
<a name="nodejs-express-clustering.create"></a>

**Direktori aplikasi Anda**  
Tutorial ini menggunakan direktori yang disebut `nodejs-example-express-elasticache` untuk bundel sumber aplikasi. Buat `nodejs-example-express-elasticache` direktori untuk tutorial ini.

```
~$ mkdir nodejs-example-express-elasticache
```

**catatan**  
Setiap tutorial dalam chapter ini menggunakan direktorinya sendiri untuk bundel sumber aplikasi. Nama direktori cocok dengan nama aplikasi sampel yang digunakan oleh tutorial.

Ubah direktori kerja Anda saat ini menjadi`nodejs-example-express-elasticache`.

```
~$ cd nodejs-example-express-elasticache
```

Sekarang, mari kita mengatur lingkungan Elastic Beanstalk yang menjalankan platform Node.js dan aplikasi sampel. Kita akan menggunakan antarmuka baris perintah Elastic Beanstalk (EB CLI).

**Untuk mengonfigurasi repositori EB CLI untuk aplikasi Anda dan membuat lingkungan Elastic Beanstalk yang menjalankan platform Node.js**

1. Buat repositori dengan perintah **[**eb init**](eb3-init.md)**.

   ```
   ~/nodejs-example-express-elasticache$ eb init --platform node.js --region <region>
   ```

   Perintah ini membuat file konfigurasi dalam folder bernama `.elasticbeanstalk` yang menentukan pengaturan dalam membuat lingkungan untuk aplikasi Anda, dan membuat sebuah aplikasi Elastic Beanstalk yang diambil dari nama folder saat ini.

1. Buat lingkungan yang menjalankan aplikasi sampel dengan perintah **[**eb create**](eb3-create.md)**.

   ```
   ~/nodejs-example-express-elasticache$ eb create --sample nodejs-example-express-elasticache
   ```

   Perintah ini membuat lingkungan yang seimbang beban dengan pengaturan default untuk platform Node.js dan sumber daya berikut:
   + **EC2 instance** — Mesin virtual Amazon Elastic Compute Cloud (Amazon EC2) yang dikonfigurasi untuk menjalankan aplikasi web pada platform yang Anda pilih.

     Setiap platform menjalankan satu set perangkat lunak, file konfigurasi dan penulisan tertentu untuk mendukung versi bahasa, kerangka kerja, kontainer web tertentu, atau kombinasi dari semua ini. Sebagian besar platform menggunakan Apache atau NGINX sebagai proksi terbalik yang ada di depan aplikasi web Anda, meneruskan permintaan ke aplikasi web, menyajikan aset statis, dan menghasilkan log akses dan kesalahan.
   + **Grup keamanan instans — Grup** EC2 keamanan Amazon yang dikonfigurasi untuk memungkinkan lalu lintas masuk pada port 80. Sumber daya ini memungkinkan lalu lintas HTTP dari penyeimbang beban mencapai EC2 instance yang menjalankan aplikasi web Anda. Secara default, lalu lintas tidak diizinkan di port lain.
   + **Penyeimbang beban** – Penyeimbang beban Elastic Load Balancing yang dikonfigurasi untuk mendistribusikan permintaan ke instans yang menjalankan aplikasi Anda. Penyeimbang beban juga menghilangkan kebutuhan untuk mengekspos instans Anda langsung ke internet.
   + **Grup keamanan penyeimbang beban - Grup** EC2 keamanan Amazon yang dikonfigurasi untuk memungkinkan lalu lintas masuk di port 80. Sumber daya ini memungkinkan lalu lintas HTTP dari internet mencapai penyeimbang beban. Secara default, lalu lintas tidak diizinkan di port lain.
   + **Grup Auto Scaling** – Grup Auto Scaling yang dikonfigurasi untuk menggantikan instans jika diakhiri atau menjadi tidak tersedia.
   + **Bucket Amazon S3** – Lokasi penyimpanan untuk kode sumber, log, dan artifact lainnya yang dibuat saat Anda menggunakan Elastic Beanstalk.
   + ** CloudWatch Alarm Amazon** — Dua CloudWatch alarm yang memantau beban pada instans di lingkungan Anda dan yang dipicu jika beban terlalu tinggi atau terlalu rendah. Saat alarm terpicu, grup Auto Scaling Anda akan menaikkan atau menurunkan skala sebagai respons.
   + **CloudFormation stack** - Elastic CloudFormation Beanstalk digunakan untuk meluncurkan sumber daya di lingkungan Anda dan menyebarkan perubahan konfigurasi. Sumber daya ditentukan di sebuah templat yang dapat Anda lihat di [Konsol CloudFormation](https://console.aws.amazon.com/cloudformation).
   + **Nama domain — Nama** domain yang merutekan ke aplikasi web Anda dalam formulir **subdomain*. *region*.elasticbeanstalk.com*.
**Keamanan domain**  
[Untuk meningkatkan keamanan aplikasi Elastic Beanstalk Anda, domain elasticbeanstalk.com terdaftar di *Daftar* Akhiran Publik (PSL).](https://publicsuffix.org/)  
Jika Anda perlu mengatur cookie sensitif di nama domain default untuk aplikasi Elastic Beanstalk Anda, kami sarankan Anda menggunakan cookie `__Host-` dengan awalan untuk meningkatkan keamanan. Praktik ini melindungi domain Anda dari upaya pemalsuan permintaan lintas situs (CSRF). Untuk informasi selengkapnya, lihat halaman [Set-Cookie](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#cookie_prefixes) di Jaringan Pengembang Mozilla.

1. Ketika pembuatan lingkungan selesai, gunakan perintah [**eb open**](eb3-open.md) untuk membuka URL lingkungan di browser default.

   ```
   ~/nodejs-example-express-elasticache$ eb open
   ```

Anda sekarang telah membuat lingkungan Elastic Beanstalk Node.js dengan aplikasi sampel. Anda dapat memperbaruinya dengan aplikasi Anda sendiri. Selanjutnya, kami memperbarui aplikasi sampel untuk menggunakan kerangka kerja Express.

## Perbarui aplikasi untuk menggunakan Express
<a name="nodejs-express-clustering.update"></a>

Memperbarui aplikasi sampel di lingkungan Elastic Beanstalk untuk menggunakan kerangka kerja Express.

Anda dapat mengunduh kode sumber akhir [nodejs-example-express-elasticachedari.zip.](samples/nodejs-example-express-elasticache.zip)

**Memperbarui aplikasi Anda untuk menggunakan Express**

Setelah Anda membuat lingkungan dengan aplikasi sampel, Anda dapat memperbaruinya dengan aplikasi Anda sendiri. Dalam prosedur ini, pertama-tama kita menjalankan **npm install** perintah **express** dan untuk mengatur kerangka kerja Express di direktori aplikasi Anda.

1. Jalankan perintah `express`. Perintah menghasilkan `package.json`, `app.js`, dan beberapa direktori.

   ```
   ~/nodejs-example-express-elasticache$ express
   ```

   Saat diminta, ketik **y** jika Anda ingin melanjutkan.
**catatan**  
Jika **express** perintah tidak berfungsi, Anda mungkin belum menginstal generator baris perintah Express seperti yang dijelaskan di bagian *Prasyarat* sebelumnya. Atau pengaturan jalur direktori untuk mesin lokal Anda mungkin perlu diatur untuk menjalankan **express** perintah. Lihat bagian *Prasyarat* untuk langkah-langkah rinci tentang pengaturan lingkungan pengembangan Anda, sehingga Anda dapat melanjutkan dengan tutorial ini. 

1. Persiapkan dependensi lokal.

   ```
   ~/nodejs-example-express-elasticache$ npm install
   ```

1. (Opsional) Verifikasi server aplikasi web dimulai.

   ```
   ~/nodejs-example-express-elasticache$ npm start
   ```

   Anda akan melihat output yang serupa dengan yang berikut:

   ```
   > nodejs@0.0.0 start /home/local/user/node-express
   > node ./bin/www
   ```

   Server berjalan pada port 3000 secara default. Untuk mengujinya, jalankan `curl http://localhost:3000` di terminal lain, atau buka browser di komputer lokal dan masukkan alamat URL`http://localhost:3000`.

   Tekan **Ctrl\$1C** untuk menghentikan server.

1. Ganti nama `nodejs-example-express-elasticache/app.js` ke `nodejs-example-express-elasticache/express-app.js`.

   ```
   ~/nodejs-example-express-elasticache$ mv app.js express-app.js
   ```

1. Perbarui baris `var app = express();` dalam `nodejs-example-express-elasticache/express-app.js` ke berikut ini:

   ```
   var app = module.exports = express();
   ```

1. Di komputer lokal Anda, buat file bernama `nodejs-example-express-elasticache/app.js` dengan kode berikut.

   ```
   /**
    * Module dependencies.
    */
   
    const express = require('express'),
    session = require('express-session'),
    bodyParser = require('body-parser'),
    methodOverride = require('method-override'),
    cookieParser = require('cookie-parser'),
    fs = require('fs'),
    filename = '/var/nodelist',
    app = express();
   
   let MemcachedStore = require('connect-memcached')(session);
   
   function setup(cacheNodes) {
    app.use(bodyParser.raw());
    app.use(methodOverride());
    if (cacheNodes.length > 0) {
      app.use(cookieParser());
   
      console.log('Using memcached store nodes:');
      console.log(cacheNodes);
   
      app.use(session({
        secret: 'your secret here',
        resave: false,
        saveUninitialized: false,
        store: new MemcachedStore({ 'hosts': cacheNodes })
      }));
    } else {
      console.log('Not using memcached store.');
      app.use(session({
        resave: false,
        saveUninitialized: false, secret: 'your secret here'
      }));
    }
   
    app.get('/', function (req, resp) {
      if (req.session.views) {
        req.session.views++
        resp.setHeader('Content-Type', 'text/html')
        resp.send(`You are session: ${req.session.id}. Views: ${req.session.views}`)
      } else {
        req.session.views = 1
        resp.send(`You are session: ${req.session.id}. No views yet, refresh the page!`)
      }
    });
   
    if (!module.parent) {
      console.log('Running express without cluster. Listening on port %d', process.env.PORT || 5000)
      app.listen(process.env.PORT || 5000)
    }
   }
   
   console.log("Reading elastic cache configuration")
   // Load elasticache configuration.
   fs.readFile(filename, 'UTF8', function (err, data) {
    if (err) throw err;
   
    let cacheNodes = []
    if (data) {
      let lines = data.split('\n');
      for (let i = 0; i < lines.length; i++) {
        if (lines[i].length > 0) {
          cacheNodes.push(lines[i])
        }
      }
    }
   
    setup(cacheNodes)
   });
   
   module.exports = app;
   ```

1. Ganti isi `nodejs-example-express-elasticache/bin/www` file dengan yang berikut ini:

   ```
   #!/usr/bin/env node
   
   /**
    * Module dependencies.
    */
   
   const app = require('../app');
   const cluster = require('cluster');
   const debug = require('debug')('nodejs-example-express-elasticache:server');
   const http = require('http');
   const workers = {},
     count = require('os').cpus().length;
   
   function spawn() {
     const worker = cluster.fork();
     workers[worker.pid] = worker;
     return worker;
   }
   
   
   /**
    * Get port from environment and store in Express.
    */
   
   const port = normalizePort(process.env.PORT || '3000');
   app.set('port', port);
   
   if (cluster.isMaster) {
     for (let i = 0; i < count; i++) {
       spawn();
     }
   
     // If a worker dies, log it to the console and start another worker.
     cluster.on('exit', function (worker, code, signal) {
       console.log('Worker ' + worker.process.pid + ' died.');
       cluster.fork();
     });
   
     // Log when a worker starts listening
     cluster.on('listening', function (worker, address) {
       console.log('Worker started with PID ' + worker.process.pid + '.');
     });
   
   } else {
     /**
      * Create HTTP server.
      */
   
     let server = http.createServer(app);
   
     /**
      * Event listener for HTTP server "error" event.
      */
   
     function onError(error) {
       if (error.syscall !== 'listen') {
         throw error;
       }
   
       const bind = typeof port === 'string'
         ? 'Pipe ' + port
         : 'Port ' + port;
   
       // handle specific listen errors with friendly messages
       switch (error.code) {
         case 'EACCES':
           console.error(bind + ' requires elevated privileges');
           process.exit(1);
           break;
         case 'EADDRINUSE':
           console.error(bind + ' is already in use');
           process.exit(1);
           break;
         default:
           throw error;
       }
     }
   
     /**
      * Event listener for HTTP server "listening" event.
      */
   
     function onListening() {
       const addr = server.address();
       const bind = typeof addr === 'string'
         ? 'pipe ' + addr
         : 'port ' + addr.port;
       debug('Listening on ' + bind);
     }
   
     /**
      * Listen on provided port, on all network interfaces.
      */
   
     server.listen(port);
     server.on('error', onError);
     server.on('listening', onListening);
   }
   
   /**
    * Normalize a port into a number, string, or false.
    */
   
   function normalizePort(val) {
     const port = parseInt(val, 10);
   
     if (isNaN(port)) {
       // named pipe
       return val;
     }
   
     if (port >= 0) {
       // port number
       return port;
     }
   
     return false;
   }
   ```

1. Terapkan perubahan ke lingkungan Elastic Beanstalk Anda dengan perintah. [**eb deploy**](eb3-deploy.md)

   ```
   ~/nodejs-example-express-elasticache$ eb deploy
   ```

1. Lingkungan Anda akan diperbarui setelah beberapa menit. Setelah lingkungan berwarna hijau dan siap, refresh URL untuk memverifikasi bahwa itu berfungsi. Anda akan melihat halaman web yang bertuliskan "Selamat Datang di Express".

Anda dapat mengakses log untuk EC2 instance yang menjalankan aplikasi Anda. Untuk petunjuk tentang mengakses log Anda, lihat [Melihat log dari instans Amazon EC2 di lingkungan Elastic Beanstalk Anda](using-features.logging.md).

Selanjutnya, mari kita perbarui aplikasi Express untuk menggunakan Amazon ElastiCache.

**Untuk memperbarui aplikasi Express Anda untuk menggunakan Amazon ElastiCache**

1. Di komputer lokal Anda, buat direktori `.ebextensions` di direktori tingkat atas paket sumber Anda. Dalam contoh ini, kami menggunakan `nodejs-example-express-elasticache/.ebextensions`.

1. Buat file konfigurasi `nodejs-example-express-elasticache/.ebextensions/elasticache-iam-with-script.config` dengan snippet berikut. Untuk informasi lebih lanjut tentang file konfigurasi, lihat [Node.jskonfigurasi namespace](create_deploy_nodejs.container.md#nodejs-namespaces). Hal ini membuat pengguna IAM dengan izin yang diperlukan untuk menemukan simpul elasticache dan menulis ke file kapan pun cache berubah. Anda juga dapat menyalin file [nodejs-example-express-elasticachedari.zip.](samples/nodejs-example-express-elasticache.zip) Untuk informasi lebih lanjut tentang ElastiCache properti, lihat[Contoh: ElastiCache](customize-environment-resources-elasticache.md).
**catatan**  
YAML bergantung pada indentasi yang konsisten. Cocokkan tingkat indentasi saat mengganti konten dalam file konfigurasi contoh dan pastikan bahwa editor teks Anda menggunakan spasi, bukan karakter tab, untuk indentasi.

   ```
   Resources:
     MyCacheSecurityGroup:
       Type: 'AWS::EC2::SecurityGroup'
       Properties:
         GroupDescription: "Lock cache down to webserver access only"
         SecurityGroupIngress:
           - IpProtocol: tcp
             FromPort:
               Fn::GetOptionSetting:
                 OptionName: CachePort
                 DefaultValue: 11211
             ToPort:
               Fn::GetOptionSetting:
                 OptionName: CachePort
                 DefaultValue: 11211
             SourceSecurityGroupName:
               Ref: AWSEBSecurityGroup
     MyElastiCache:
       Type: 'AWS::ElastiCache::CacheCluster'
       Properties:
         CacheNodeType:
           Fn::GetOptionSetting:
             OptionName: CacheNodeType
             DefaultValue: cache.t2.micro
         NumCacheNodes:
           Fn::GetOptionSetting:
             OptionName: NumCacheNodes
             DefaultValue: 1
         Engine:
           Fn::GetOptionSetting:
             OptionName: Engine
             DefaultValue: redis
         VpcSecurityGroupIds:
           -
             Fn::GetAtt:
               - MyCacheSecurityGroup
               - GroupId
     AWSEBAutoScalingGroup :
       Metadata :
         ElastiCacheConfig :
           CacheName :
             Ref : MyElastiCache
           CacheSize :
              Fn::GetOptionSetting:
                OptionName : NumCacheNodes
                DefaultValue: 1
     WebServerUser : 
       Type : AWS::IAM::User
       Properties :
         Path : "/"
         Policies:
           -
             PolicyName: root
             PolicyDocument :
               Statement :
                 -
                   Effect : Allow
                   Action : 
                     - cloudformation:DescribeStackResource
                     - cloudformation:ListStackResources
                     - elasticache:DescribeCacheClusters
                   Resource : "*"
     WebServerKeys :
       Type : AWS::IAM::AccessKey
       Properties :
         UserName :
           Ref: WebServerUser
   
   Outputs:
     WebsiteURL:
       Description: sample output only here to show inline string function parsing
       Value: |
         http://`{ "Fn::GetAtt" : [ "AWSEBLoadBalancer", "DNSName" ] }`
     MyElastiCacheName:
       Description: Name of the elasticache
       Value:
         Ref : MyElastiCache
     NumCacheNodes:
       Description: Number of cache nodes in MyElastiCache
       Value:
         Fn::GetOptionSetting:
           OptionName : NumCacheNodes
           DefaultValue: 1
   
   files:
     "/etc/cfn/cfn-credentials" :
       content : |
         AWSAccessKeyId=`{ "Ref" : "WebServerKeys" }`
         AWSSecretKey=`{ "Fn::GetAtt" : ["WebServerKeys", "SecretAccessKey"] }`
       mode : "000400"
       owner : root
       group : root
   
     "/etc/cfn/get-cache-nodes" :
       content : |
         # Define environment variables for command line tools
         export AWS_ELASTICACHE_HOME="/home/ec2-user/elasticache/$(ls /home/ec2-user/elasticache/)"
         export AWS_CLOUDFORMATION_HOME=/opt/aws/apitools/cfn
         export PATH=$AWS_CLOUDFORMATION_HOME/bin:$AWS_ELASTICACHE_HOME/bin:$PATH
         export AWS_CREDENTIAL_FILE=/etc/cfn/cfn-credentials
         export JAVA_HOME=/usr/lib/jvm/jre
   
         # Grab the Cache node names and configure the PHP page
         aws cloudformation list-stack-resources --stack `{ "Ref" : "AWS::StackName" }` --region `{ "Ref" : "AWS::Region" }` --output text | grep MyElastiCache | awk '{print $4}' | xargs -I {} aws elasticache describe-cache-clusters --cache-cluster-id {} --region `{ "Ref" : "AWS::Region" }` --show-cache-node-info --output text | grep '^ENDPOINT' | awk '{print $2 ":" $3}' > `{ "Fn::GetOptionSetting" : { "OptionName" : "NodeListPath", "DefaultValue" : "/var/www/html/nodelist" } }`
       mode : "000500"
       owner : root
       group : root
   
     "/etc/cfn/hooks.d/cfn-cache-change.conf" :
       "content": |
         [cfn-cache-size-change]
         triggers=post.update
         path=Resources.AWSEBAutoScalingGroup.Metadata.ElastiCacheConfig
         action=/etc/cfn/get-cache-nodes
         runas=root
   
   sources :
     "/home/ec2-user/elasticache" : "https://elasticache-downloads.s3.amazonaws.com/AmazonElastiCacheCli-latest.zip"
   
   commands: 
     make-elasticache-executable:
       command: chmod -R ugo+x /home/ec2-user/elasticache/*/bin/*
   
   packages : 
     "yum" :
       "aws-apitools-cfn"  : []
   
   container_commands:
     initial_cache_nodes:
       command: /etc/cfn/get-cache-nodes
   ```

1. Di komputer lokal Anda, buat file konfigurasi `nodejs-example-express-elasticache/.ebextensions/elasticache_settings.config` dengan cuplikan berikut untuk dikonfigurasi. ElastiCache

   ```
   option_settings:
     "aws:elasticbeanstalk:customoption":
        CacheNodeType: cache.t2.micro
        NumCacheNodes: 1
        Engine: memcached
        NodeListPath: /var/nodelist
   ```

1. Di komputer lokal Anda, ganti `nodejs-example-express-elasticache/express-app.js` dengan snippet berikut. File ini membaca daftar simpul dari disk (`/var/nodelist`) dan mengonfigurasi express untuk menggunakan `memcached` sebagai penyimpanan sesi jika ada simpul. File Anda akan terlihat seperti berikut.

   ```
   /**
    * Module dependencies.
    */
   
   var express = require('express'),
       session = require('express-session'),
       bodyParser = require('body-parser'),
       methodOverride = require('method-override'),
       cookieParser = require('cookie-parser'),
       fs = require('fs'),
       filename = '/var/nodelist',
       app = module.exports = express();
   
   var MemcachedStore = require('connect-memcached')(session);
   
   function setup(cacheNodes) {
     app.use(bodyParser.raw());
     app.use(methodOverride());
     if (cacheNodes) {
         app.use(cookieParser());
   
         console.log('Using memcached store nodes:');
         console.log(cacheNodes);
   
         app.use(session({
             secret: 'your secret here',
             resave: false,
             saveUninitialized: false,
             store: new MemcachedStore({'hosts': cacheNodes})
         }));
     } else {
       console.log('Not using memcached store.');
       app.use(cookieParser('your secret here'));
       app.use(session());
     }
   
     app.get('/', function(req, resp){
     if (req.session.views) {
         req.session.views++
         resp.setHeader('Content-Type', 'text/html')
         resp.write('Views: ' + req.session.views)
         resp.end()
      } else {
         req.session.views = 1
         resp.end('Refresh the page!')
       }
     });
   
     if (!module.parent) {
         console.log('Running express without cluster.');
         app.listen(process.env.PORT || 5000);
     }
   }
   
   // Load elasticache configuration.
   fs.readFile(filename, 'UTF8', function(err, data) {
       if (err) throw err;
   
       var cacheNodes = [];
       if (data) {
           var lines = data.split('\n');
           for (var i = 0 ; i < lines.length ; i++) {
               if (lines[i].length > 0) {
                   cacheNodes.push(lines[i]);
               }
           }
       }
       setup(cacheNodes);
   });
   ```

1. Di komputer lokal Anda, perbarui `package.json` dengan konten berikut:

   ```
     "dependencies": {
       "cookie-parser": "~1.4.4",
       "debug": "~2.6.9",
       "express": "~4.16.1",
       "http-errors": "~1.6.3",
       "jade": "~1.11.0",
       "morgan": "~1.9.1",
       "connect-memcached": "*",
       "express-session": "*",
       "body-parser": "*",
       "method-override": "*"   
     }
   ```

1. Jalankan **npm install**.

   ```
   ~/nodejs-example-express-elasticache$ npm install
   ```

1. Men-deploy aplikasi yang diperbarui.

   ```
   ~/nodejs-example-express-elasticache$ eb deploy
   ```

1. Lingkungan Anda akan diperbarui setelah beberapa menit. Setelah lingkungan Anda berwarna hijau dan siap, verifikasi apakah kode berfungsi.

   1. Periksa [ CloudWatch konsol Amazon](https://console.aws.amazon.com/cloudwatch/home) untuk melihat ElastiCache metrik Anda. Untuk melihat ElastiCache metrik, pilih **Metrik** di panel kiri, lalu cari. **CurrItems** Pilih **ElastiCache > Metrik Node Cache**, lalu pilih node cache Anda untuk melihat jumlah item dalam cache.  
![\[CloudWatch dashboard showing CurrItems metric for an ElastiCache node over time.\]](http://docs.aws.amazon.com/id_id/elasticbeanstalk/latest/dg/images/elasticache-express.png)
**catatan**  
Pastikan Anda melihat wilayahnya sama dengan tempat Anda men-deploy aplikasi Anda.

      Jika Anda menyalin dan menempelkan URL aplikasi Anda ke browser web lain dan menyegarkan halaman, Anda akan melihat CurrItem jumlah Anda naik setelah 5 menit.

   1. Ambil snapshot log Anda. Untuk informasi selengkapnya tentang mendapatkan log kembali, lihat [Melihat log dari instans Amazon EC2 di lingkungan Elastic Beanstalk Anda](using-features.logging.md).

   1. Memeriksa file `/var/log/nodejs/nodejs.log` dalam paket log. Anda akan melihat sesuatu yang serupa dengan yang berikut:

      ```
      Using memcached store nodes:
      [ 'aws-my-1oys9co8zt1uo.1iwtrn.0001.use1.cache.amazonaws.com:11211' ]
      ```

## Pembersihan
<a name="nodejs-express-clustering.delete"></a>

Jika aplikasi tidak ingin dijalankan, Anda dapat membersihkan dengan mengakhiri lingkungan dan menghapus aplikasi Anda.

Gunakan perintah `eb terminate` untuk mengakhiri lingkungan Anda dan perintah `eb delete` untuk menghapus aplikasi Anda. 

**Untuk mengakhiri lingkungan Anda**

Dari direktori tempat Anda membuat repositori lokal, jalankan `eb terminate`.

```
$ eb terminate
```

Proses ini dapat menghabiskan waktu beberapa menit. Elastic Beanstalk menampilkan pesan setelah lingkungan berhasil diakhiri. 

# Men-deploy aplikasi Node.js dengan DynamoDB ke Elastic Beanstalk
<a name="nodejs-dynamodb-tutorial"></a>

Tutorial ini dan contoh [nodejs-example-dynamoaplikasi.zip](samples/nodejs-example-dynamo.zip) memandu Anda melalui proses penerapan aplikasi Node.js yang menggunakan AWS SDK untuk JavaScript di Node.js untuk berinteraksi dengan layanan Amazon DynamoDB. Anda akan membuat tabel DynamoDB yang ada di database yang dipisahkan, atau eksternal, dari lingkungan. AWS Elastic Beanstalk Anda juga akan mengonfigurasi aplikasi untuk menggunakan database terpisah. Dalam lingkungan produksi, praktik terbaik adalah menggunakan database yang dipisahkan dari lingkungan Elastic Beanstalk sehingga independen dari siklus hidup lingkungan. Praktek ini juga memungkinkan Anda untuk melakukan penyebaran [biru/hijau](using-features.CNAMESwap.md).

Contoh aplikasi menggambarkan hal berikut:
+ Tabel DynamoDB yang menyimpan data teks yang disediakan pengguna.
+ [File konfigurasi](ebextensions.md) untuk membuat tabel.
+ Topik Layanan Pemberitahuan Sederhana Amazon.
+  Penggunaan [file package.json](nodejs-platform-dependencies.md#nodejs-platform-packagejson) untuk menginstal paket selama penerapan.

**Topics**
+ [Prasyarat](#nodejs-dynamodb-tutorial-prereqs)
+ [Membuat lingkungan Elastic Beanstalk](#nodejs-dynamodb-tutorial-launch)
+ [Menambahkan izin ke instans lingkungan Anda](#nodejs-dynamodb-tutorial-role)
+ [Menyebarkan contoh aplikasi](#nodejs-dynamodb-tutorial-deploy)
+ [Buat tabel DynamoDB](#nodejs-dynamodb-tutorial-database)
+ [Perbarui file konfigurasi aplikasi](#nodejs-dynamodb-tutorial-update)
+ [Konfigurasikan lingkungan Anda untuk ketersediaan yang tinggi](#nodejs-dynamodb-tutorial-configure)
+ [Pembersihan](#nodejs-dynamodb-tutorial-cleanup)
+ [Langkah selanjutnya](#nodejs-dynamodb-tutorial-nextsteps)

## Prasyarat
<a name="nodejs-dynamodb-tutorial-prereqs"></a>

Tutorial ini membutuhkan prasyarat berikut:
+ Runtime Node.js
+ Perangkat lunak pengelola paket Node.js default, npm
+ Generator baris perintah Express
+ Antarmuka Baris Perintah Elastic Beanstalk (EB CLI)

Untuk detail tentang menginstal tiga komponen pertama yang terdaftar dan menyiapkan lingkungan pengembangan lokal Anda, lihat[Menyiapkan lingkungan pengembangan Node.js Anda untuk Elastic Beanstalk](nodejs-devenv.md). Untuk tutorial ini, Anda tidak perlu menginstal AWS SDK untuk Node.js, yang juga disebutkan dalam topik yang direferensikan.

Untuk detail tentang menginstal dan mengonfigurasi CLI EB, lihat dan. [Instal EB CLI dengan skrip pengaturan (disarankan)](eb-cli3.md#eb-cli3-install) [Mengonfigurasi EB CLI](eb-cli3-configuration.md)

## Membuat lingkungan Elastic Beanstalk
<a name="nodejs-dynamodb-tutorial-launch"></a>

**Direktori aplikasi Anda**  
Tutorial ini menggunakan direktori yang disebut `nodejs-example-dynamo` untuk bundel sumber aplikasi. Buat `nodejs-example-dynamo` direktori untuk tutorial ini.

```
~$ mkdir nodejs-example-dynamo
```

**catatan**  
Setiap tutorial dalam chapter ini menggunakan direktorinya sendiri untuk bundel sumber aplikasi. Nama direktori cocok dengan nama aplikasi sampel yang digunakan oleh tutorial.

Ubah direktori kerja Anda saat ini menjadi`nodejs-example-dynamo`.

```
~$ cd nodejs-example-dynamo
```

Sekarang, mari kita mengatur lingkungan Elastic Beanstalk yang menjalankan platform Node.js dan aplikasi sampel. Kita akan menggunakan antarmuka baris perintah Elastic Beanstalk (EB CLI).

**Untuk mengonfigurasi repositori EB CLI untuk aplikasi Anda dan membuat lingkungan Elastic Beanstalk yang menjalankan platform Node.js**

1. Buat repositori dengan perintah **[**eb init**](eb3-init.md)**.

   ```
   ~/nodejs-example-dynamo$ eb init --platform node.js --region <region>
   ```

   Perintah ini membuat file konfigurasi dalam folder bernama `.elasticbeanstalk` yang menentukan pengaturan dalam membuat lingkungan untuk aplikasi Anda, dan membuat sebuah aplikasi Elastic Beanstalk yang diambil dari nama folder saat ini.

1. Buat lingkungan yang menjalankan aplikasi sampel dengan perintah **[**eb create**](eb3-create.md)**.

   ```
   ~/nodejs-example-dynamo$ eb create --sample nodejs-example-dynamo
   ```

   Perintah ini membuat lingkungan yang seimbang beban dengan pengaturan default untuk platform Node.js dan sumber daya berikut:
   + **EC2 instance** — Mesin virtual Amazon Elastic Compute Cloud (Amazon EC2) yang dikonfigurasi untuk menjalankan aplikasi web pada platform yang Anda pilih.

     Setiap platform menjalankan satu set perangkat lunak, file konfigurasi dan penulisan tertentu untuk mendukung versi bahasa, kerangka kerja, kontainer web tertentu, atau kombinasi dari semua ini. Sebagian besar platform menggunakan Apache atau NGINX sebagai proksi terbalik yang ada di depan aplikasi web Anda, meneruskan permintaan ke aplikasi web, menyajikan aset statis, dan menghasilkan log akses dan kesalahan.
   + **Grup keamanan instans — Grup** EC2 keamanan Amazon yang dikonfigurasi untuk memungkinkan lalu lintas masuk pada port 80. Sumber daya ini memungkinkan lalu lintas HTTP dari penyeimbang beban mencapai EC2 instance yang menjalankan aplikasi web Anda. Secara default, lalu lintas tidak diizinkan di port lain.
   + **Penyeimbang beban** – Penyeimbang beban Elastic Load Balancing yang dikonfigurasi untuk mendistribusikan permintaan ke instans yang menjalankan aplikasi Anda. Penyeimbang beban juga menghilangkan kebutuhan untuk mengekspos instans Anda langsung ke internet.
   + **Grup keamanan penyeimbang beban - Grup** EC2 keamanan Amazon yang dikonfigurasi untuk memungkinkan lalu lintas masuk di port 80. Sumber daya ini memungkinkan lalu lintas HTTP dari internet mencapai penyeimbang beban. Secara default, lalu lintas tidak diizinkan di port lain.
   + **Grup Auto Scaling** – Grup Auto Scaling yang dikonfigurasi untuk menggantikan instans jika diakhiri atau menjadi tidak tersedia.
   + **Bucket Amazon S3** – Lokasi penyimpanan untuk kode sumber, log, dan artifact lainnya yang dibuat saat Anda menggunakan Elastic Beanstalk.
   + ** CloudWatch Alarm Amazon** — Dua CloudWatch alarm yang memantau beban pada instans di lingkungan Anda dan yang dipicu jika beban terlalu tinggi atau terlalu rendah. Saat alarm terpicu, grup Auto Scaling Anda akan menaikkan atau menurunkan skala sebagai respons.
   + **CloudFormation stack** - Elastic CloudFormation Beanstalk digunakan untuk meluncurkan sumber daya di lingkungan Anda dan menyebarkan perubahan konfigurasi. Sumber daya ditentukan di sebuah templat yang dapat Anda lihat di [Konsol CloudFormation](https://console.aws.amazon.com/cloudformation).
   + **Nama domain — Nama** domain yang merutekan ke aplikasi web Anda dalam formulir **subdomain*. *region*.elasticbeanstalk.com*.
**Keamanan domain**  
[Untuk meningkatkan keamanan aplikasi Elastic Beanstalk Anda, domain elasticbeanstalk.com terdaftar di *Daftar* Akhiran Publik (PSL).](https://publicsuffix.org/)  
Jika Anda perlu mengatur cookie sensitif di nama domain default untuk aplikasi Elastic Beanstalk Anda, kami sarankan Anda menggunakan cookie `__Host-` dengan awalan untuk meningkatkan keamanan. Praktik ini melindungi domain Anda dari upaya pemalsuan permintaan lintas situs (CSRF). Untuk informasi selengkapnya, lihat halaman [Set-Cookie](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#cookie_prefixes) di Jaringan Pengembang Mozilla.

1. Ketika pembuatan lingkungan selesai, gunakan perintah [**eb open**](eb3-open.md) untuk membuka URL lingkungan di browser default.

   ```
   ~/nodejs-example-dynamo$ eb open
   ```

Anda sekarang telah membuat lingkungan Elastic Beanstalk Node.js dengan aplikasi sampel. Anda dapat memperbaruinya dengan aplikasi Anda sendiri. Selanjutnya, kami memperbarui aplikasi sampel untuk menggunakan kerangka kerja Express.

## Menambahkan izin ke instans lingkungan Anda
<a name="nodejs-dynamodb-tutorial-role"></a>

Aplikasi Anda berjalan pada satu atau beberapa EC2 instance di belakang penyeimbang beban, yang melayani permintaan HTTP dari Internet. Ketika menerima permintaan yang mengharuskannya untuk menggunakan AWS layanan, aplikasi menggunakan izin dari instance yang dijalankannya untuk mengakses layanan tersebut.

Aplikasi contoh menggunakan izin instance untuk menulis data ke tabel DynamoDB, dan mengirim notifikasi ke topik Amazon SNS dengan SDK untuk di Node.js. JavaScript Tambahkan kebijakan terkelola berikut ke [profil instans](concepts-roles-instance.md) default untuk memberikan izin EC2 instans di lingkungan Anda untuk mengakses DynamoDB dan Amazon SNS:
+ **AmazonDynamoDBFullAkses**
+ **SNSFullAkses Amazon**

**Untuk menambahkan kebijakan ke profil instans default**

1. Buka [Halaman peran](https://console.aws.amazon.com/iam/home#roles) di konsol IAM.

1. Pilih **aws-elasticbeanstalk-ec2-peran**.

1. Di tab **Izin**, pilih **Lampirkan kebijakan**.

1. Pilih kebijakan terkelola untuk layanan tambahan yang digunakan aplikasi Anda. Untuk tutorial ini, pilih `AmazonSNSFullAccess` dan`AmazonDynamoDBFullAccess`.

1. Memilih **Lampirkan kebijakan**.

Lihat [Mengelola profil instans Elastic Beanstalk](iam-instanceprofile.md) untuk selengkapnya tentang mengelola profil instans.

## Menyebarkan contoh aplikasi
<a name="nodejs-dynamodb-tutorial-deploy"></a>

Sekarang lingkungan Anda siap untuk Anda gunakan dan jalankan contoh aplikasi untuk tutorial ini: [nodejs-example-dynamo.zip.](samples/nodejs-example-dynamo.zip)

**Untuk menyebarkan dan menjalankan aplikasi contoh tutorial**

1. Ubah direktori kerja Anda saat ini ke direktori aplikasi`nodejs-example-dynamo`.

   ```
   ~$ cd nodejs-example-dynamo
   ```

1. Unduh dan ekstrak isi contoh bundel sumber aplikasi [nodejs-example-dynamo.zip](samples/nodejs-example-dynamo.zip) ke direktori `nodejs-example-dynamo` aplikasi.

1. Terapkan aplikasi contoh ke lingkungan Elastic Beanstalk Anda dengan perintah. [**eb deploy**](eb3-deploy.md)

   ```
   ~/nodejs-example-dynamo$ eb deploy
   ```
**catatan**  
Secara default, `eb deploy` perintah membuat file ZIP dari folder proyek Anda. Anda dapat mengonfigurasi EB CLI untuk men-deploy Artifact dari proses membangun Anda bukan membuat file ZIP folder proyek Anda. Untuk informasi selengkapnya, lihat [Men-deploy artifact bukan folder proyek](eb-cli3-configuration.md#eb-cli3-artifact).

1. Ketika pembuatan lingkungan selesai, gunakan perintah [**eb open**](eb3-open.md) untuk membuka URL lingkungan di browser default.

   ```
   ~/nodejs-example-dynamo$ eb open
   ```

Situs mengumpulkan informasi kontak pengguna dan menggunakan tabel DynamoDB untuk menyimpan data. Untuk menambahkan entri, pilih **Daftar hari ini**, masukkan nama dan alamat email, lalu pilih **Daftar\$1**. Aplikasi web menulis isi formulir ke tabel dan memicu notifikasi email Amazon SNS.

![\[Startup landing page with teaser message and sign-up button for upcoming product launch.\]](http://docs.aws.amazon.com/id_id/elasticbeanstalk/latest/dg/images/nodejs-dynamodb-tutorial-app.png)


Sekarang, topik Amazon SNS dikonfigurasi dengan email placeholder untuk pemberitahuan. Anda akan memperbarui konfigurasi segera, tetapi sementara itu Anda dapat memverifikasi tabel DynamoDB dan topik Amazon SNS di Konsol Manajemen AWS.

**Untuk melihat tabel**

1. Buka [halaman Tabel](https://console.aws.amazon.com/dynamodb/home?#tables:) di konsol DynamoDB.

1. Temukan tabel yang dibuat aplikasi. Nama dimulai dengan **awseb dan berisi**. **StartupSignupsTable**

1. Pilih tabel, memilih **Item**, lalu pilih **Mulai pencarian** untuk menampilkan semua item dalam tabel.

Tabel berisi entri untuk setiap alamat email yang dikirimkan pada situs pendaftaran. Selain menulis ke tabel, aplikasi mengirim pesan ke topik Amazon SNS yang memiliki dua langganan, satu untuk pemberitahuan email kepada Anda, dan satu lagi untuk antrean Amazon Simple Queue Service yang dapat dibaca aplikasi pekerja untuk memproses permintaan dan mengirim email ke pelanggan yang tertarik.

**Untuk melihat topik**

1. Buka [halaman Topik](https://console.aws.amazon.com/sns/v2/home?#/topics) di konsol Amazon SNS.

1. Temukan topik yang dibuat oleh aplikasi. Nama dimulai dengan **awseb dan berisi**. **NewSignupTopic**

1. Pilih topik untuk melihat langganannya.

Aplikasi (`[app.js](https://github.com/awslabs/eb-node-express-sample/blob/master/app.js)`) mendefinisikan dua rute. Root path (`/`) mengembalikan halaman web yang dirender dari template Embedded JavaScript (EJS) dengan formulir yang diisi pengguna untuk mendaftarkan nama dan alamat email mereka. Dengan mengirim formulir maka akan mengirimkan permintaan POST dengan data formulir ke rute `/signup`, yang menulis entri ke tabel DynamoDB dan menerbitkan pesan ke topik Amazon SNS untuk memberitahu pemilik pendaftaran.

Aplikasi sampel menyertakan [file konfigurasi](ebextensions.md) yang membuat tabel DynamoDB, topik Amazon SNS, dan antrean Amazon SQS yang digunakan oleh aplikasi. Hal ini memungkinkan Anda membuat lingkungan baru dan menguji fungsionalitasnya dengan segera, tetapi memiliki kelemahan mengikat tabel DynamoDB ke lingkungan. Untuk lingkungan produksi, Anda harus membuat tabel DynamoDB di luar lingkungan untuk menghindari kehilangan itu ketika Anda mengakhiri lingkungan atau memperbarui konfigurasinya.

## Buat tabel DynamoDB
<a name="nodejs-dynamodb-tutorial-database"></a>

Untuk menggunakan tabel DynamoDB eksternal dengan aplikasi yang berjalan di Elastic Beanstalk, pertama buat tabel di DynamoDB. Ketika Anda membuat tabel di luar Elastic Beanstalk, tabel tersebut sepenuhnya independen dari Elastic Beanstalk dan lingkungan Elastic Beanstalk Anda, dan tidak akan diakhiri oleh Elastic Beanstalk.

Buat tabel dengan pengaturan berikut:
+ **Nama tabel** – **nodejs-tutorial**
+ **Kunci utama** – **email**
+ Tipe kunci primer – **String**

**Untuk membuat tabel DynamoDB**

1. Buka [Halaman tabel](https://console.aws.amazon.com/dynamodb/home?#tables:) di konsol manajemen DynamoDB.

1. Pilih **Buat tabel**.

1. Ketik **Nama tabel** dan **Kunci utama**.

1. Pilih tipe kunci primer.

1. Pilih **Buat**.

## Perbarui file konfigurasi aplikasi
<a name="nodejs-dynamodb-tutorial-update"></a>

Perbarui [file konfigurasi](ebextensions.md) di sumber aplikasi untuk menggunakan tabel **nodejs-tutorial** daripada membuat yang baru.

**Untuk memperbarui aplikasi contoh untuk penggunaan produksi**

1. Ubah direktori kerja Anda saat ini ke direktori aplikasi`nodejs-example-dynamo`.

   ```
   ~$ cd nodejs-example-dynamo
   ```

1. Buka `.ebextensions/options.config` dan ubah nilai pengaturan berikut:
   + **NewSignupEmail**— Alamat email Anda.
   + **STARTUP\$1SIGNUP\$1TABLE** – **nodejs-tutorial**

     
**Example .ebextensions/options.config**  

   ```
   option_settings:
     aws:elasticbeanstalk:customoption:
       NewSignupEmail: you@example.com
     aws:elasticbeanstalk:application:environment:
       THEME: "flatly"
       AWS_REGION: '`{"Ref" : "AWS::Region"}`'
       STARTUP_SIGNUP_TABLE: nodejs-tutorial
       NEW_SIGNUP_TOPIC: '`{"Ref" : "NewSignupTopic"}`'
     aws:elasticbeanstalk:container:nodejs:
       ProxyServer: nginx
     aws:elasticbeanstalk:container:nodejs:staticfiles:
       /static: /static
     aws:autoscaling:asg:
       Cooldown: "120"
     aws:autoscaling:trigger:
       Unit: "Percent"
       Period: "1"
       BreachDuration: "2"
       UpperThreshold: "75"
       LowerThreshold: "30"
       MeasureName: "CPUUtilization"
   ```

   Ini berlaku konfigurasi berikut untuk aplikasi:
   + Alamat email yang digunakan topik Amazon SNS untuk notifikasi diatur ke alamat Anda, atau alamat yang Anda masukkan dalam file. `options.config`
   + Tabel **nodejs-tutorial** akan digunakan sebagai pengganti yang dibuat oleh. `.ebextensions/create-dynamodb-table.config`

1. Hapus `.ebextensions/create-dynamodb-table.config`.

   ```
   ~/nodejs-tutorial$ rm .ebextensions/create-dynamodb-table.config
   ```

   Lain kali Anda men-deploy aplikasi, tabel yang dibuat oleh file konfigurasi ini akan dihapus.

1. Terapkan aplikasi yang diperbarui ke lingkungan Elastic Beanstalk Anda dengan perintah. [**eb deploy**](eb3-deploy.md)

   ```
   ~/nodejs-example-dynamo$ eb deploy
   ```

1. Ketika pembuatan lingkungan selesai, gunakan perintah [**eb open**](eb3-open.md) untuk membuka URL lingkungan di browser default.

   ```
   ~/nodejs-example-dynamo$ eb open
   ```

Ketika Anda men-deploy, Elastic Beanstalk memperbarui konfigurasi topik Amazon SNS dan menghapus tabel DynamoDB yang dibuat ketika Anda men-deploy versi pertama aplikasi.

Sekarang, ketika Anda mengakhiri lingkungan, tabel **nodejs-tutorial** tidak akan dihapus. Hal ini memungkinkan Anda melakukan deployment biru/hijau, memodifikasi file konfigurasi, atau menghapus situs web Anda tanpa risiko kehilangan data.

Buka situs Anda di peramban dan verifikasi apakah formulir tersebut bekerja seperti yang diharapkan. Membuat beberapa entri, dan kemudian periksa konsol DynamoDB untuk memverifikasi tabel.

**Untuk melihat tabel**

1. Buka [Halaman tabel](https://console.aws.amazon.com/dynamodb/home?#tables:) di konsol DynamoDB.

1. Temukan tabel **nodejs-tutorial**.

1. Pilih tabel, memilih **Item**, lalu pilih **Melai pencarian** untuk menampilkan semua item dalam tabel.

Anda juga dapat melihat bahwa Elastic Beanstalk menghapus tabel yang dibuat sebelumnya.

## Konfigurasikan lingkungan Anda untuk ketersediaan yang tinggi
<a name="nodejs-dynamodb-tutorial-configure"></a>

Terakhir, konfigurasikan grup Auto Scaling lingkungan Anda dengan jumlah instans minimum yang lebih tinggi. Jalankan setidaknya dua instans setiap saat untuk mencegah terjadinya kegagalan di satu titik server web di lingkungan Anda, dan mengizinkan Anda untuk men-deploy perubahan tanpa membuat situs Anda keluar dari layanan.

**Mengonfigurasi grup Auto Scaling lingkungan Anda untuk ketersediaan yang tinggi**

1. **Buka konsol [Elastic Beanstalk, dan di daftar Wilayah, pilih konsol Elastic](https://console.aws.amazon.com/elasticbeanstalk) Beanstalk.** Wilayah AWS

1. Di panel navigasi, pilih **Lingkungan**, dan kemudian pilih nama lingkungan Anda dari daftar.

1. Pada panel navigasi, pilih **Konfigurasi**.

1. Pada kategori konfigurasi **Kapasitas**, pilih **Edit**.

1. Pada bagian **Grup Auto Scaling**, set **Instans minimum** ke **2**.

1. Untuk menyimpan perubahan pilih **Terapkan** di bagian bawah halaman.

## Pembersihan
<a name="nodejs-dynamodb-tutorial-cleanup"></a>

Setelah Anda selesai bekerja dengan kode demo, Anda dapat mengakhiri lingkungan Anda. [Elastic Beanstalk menghapus semua sumber daya AWS terkait, [seperti instans EC2 Amazon](using-features.managing.ec2.md)[, instans database, penyeimbang beban, grup keamanan,](using-features.managing.db.md)[dan](using-features.managing.elb.md) alarm.](using-features.alarms.md#using-features.alarms.title) 

Menghapus sumber daya tidak menghapus aplikasi Elastic Beanstalk, sehingga Anda dapat membuat lingkungan baru untuk aplikasi Anda kapan saja.

**Untuk mengakhiri lingkungan Elastic Beanstalk Anda dari konsol**

1. **Buka konsol [Elastic Beanstalk, dan di daftar Wilayah, pilih konsol Elastic](https://console.aws.amazon.com/elasticbeanstalk) Beanstalk.** Wilayah AWS

1. Di panel navigasi, pilih **Lingkungan**, dan kemudian pilih nama lingkungan Anda dari daftar.

1. Pilih **Tindakan**, lalu pilih **Terminate environment**.

1. Gunakan kotak dialog di layar untuk mengonfirmasi pengakhiran lingkungan.

Anda juga dapat menghapus tabel DynamoDB eksternal yang Anda buat.

**Untuk menghapus tabel DynamoDB**

1. Buka [Halaman tabel](https://console.aws.amazon.com/dynamodb/home?#tables:) di konsol DynamoDB.

1. Pilih tabel.

1. Pilih **Tindakan**, dan lalu **Hapus tabel**.

1. Pilih **Hapus**.

## Langkah selanjutnya
<a name="nodejs-dynamodb-tutorial-nextsteps"></a>

Contoh aplikasi menggunakan file konfigurasi untuk mengonfigurasi pengaturan perangkat lunak dan membuat AWS sumber daya sebagai bagian dari lingkungan Anda. Lihat [Penyesuaian lingkungan lanjutan dengan file konfigurasi (`.ebextensions`)](ebextensions.md) untuk informasi selengkapnya tentang file konfigurasi dan penggunaannya.

Contoh aplikasi untuk tutorial ini menggunakan kerangka web Express untuk Node.js. Untuk informasi selengkapnya tentang Express, lihat dokumentasi resmi di [expressjs.com](https://expressjs.com).

Terakhir, jika Anda berencana menggunakan aplikasi dalam lingkungan produksi, [konfigurasikan nama domain khusus](customdomains.md) untuk lingkungan Anda dan [aktifkan HTTPS](configuring-https.md) untuk koneksi yang aman.

# Menambahkan instans Amazon RDS DB ke lingkungan Node.js Elastic Beanstalk Anda
<a name="create-deploy-nodejs.rds"></a>

Topik ini memberikan instruksi untuk membuat Amazon RDS menggunakan konsol Elastic Beanstalk. Anda dapat menggunakan instans DB Amazon Relational Database Service (Amazon RDS) untuk menyimpan data yang dikumpulkan dan dimodifikasi oleh aplikasi Anda. Basis data dapat digabungkan ke lingkungan Anda dan dikelola oleh Elastic Beanstalk, atau dapat dibuat sebagai dipisahkan dan dikelola secara eksternal oleh layanan lain. Dalam instruksi ini database digabungkan dengan lingkungan Anda dan dikelola oleh Elastic Beanstalk. Untuk informasi lebih lanjut tentang mengintegrasikan Amazon RDS dengan Elastic Beanstalk, lihat. [Menambahkan basis data ke lingkungan Elastic Beanstalk Anda](using-features.managing.db.md)

**Topics**
+ [Menambahkan instans DB ke lingkungan Anda](#nodejs-rds-create)
+ [Mengunduh driver](#nodejs-rds-drivers)
+ [Menyambungkan ke basis data](#nodejs-rds-connect)

## Menambahkan instans DB ke lingkungan Anda
<a name="nodejs-rds-create"></a>

**Untuk menambahkan instans DB ke lingkungan Anda**

1. **Buka konsol [Elastic Beanstalk, dan di daftar Wilayah, pilih konsol Elastic](https://console.aws.amazon.com/elasticbeanstalk) Beanstalk.** Wilayah AWS

1. Di panel navigasi, pilih **Lingkungan**, dan kemudian pilih nama lingkungan Anda dari daftar.

1. Pada panel navigasi, pilih **Konfigurasi**.

1. Di kategori konfigurasi **Basis data**, pilih **Edit**.

1. Pilih mesin DB, dan masukkan nama pengguna dan kata sandi.

1. Untuk menyimpan perubahan pilih **Terapkan** di bagian bawah halaman.

Menambahkan instans DB memakan waktu sekitar 10 menit. Ketika pembaruan lingkungan selesai, nama host instans DB dan informasi koneksi lainnya tersedia untuk aplikasi Anda melalui properti lingkungan berikut:


| Nama properti | Deskripsi | Nilai properti | 
| --- | --- | --- | 
|  `RDS_HOSTNAME`  |  Nama host instans DB.  |  Di tab **Konektivitas & keamanan** di konsol Amazon RDS: **Titik akhir**.  | 
|  `RDS_PORT`  |  Port tempat instans DB menerima koneksi. Nilai default bervariasi di antara mesin DB.  |  Di tab **Konektivitas & keamanan** di konsol Amazon RDS: **Port**.  | 
|  `RDS_DB_NAME`  |  Nama basis data, **ebdb**.  |  Di tab **Konfigurasi** di konsol Amazon RDS: **Nama DB**.  | 
|  `RDS_USERNAME`  |  Nama pengguna yang Anda konfigurasi untuk basis data Anda.  |  Di tab **Konfigurasi** di konsol Amazon RDS: **Nama pengguna utama**.  | 
|  `RDS_PASSWORD`  |  Kata sandi yang Anda konfigurasi untuk basis data Anda.  |  Tidak tersedia untuk referensi di konsol Amazon RDS.  | 

Untuk informasi selengkapnya tentang mengonfigurasi instance database yang digabungkan dengan lingkungan Elastic Beanstalk, lihat. [Menambahkan basis data ke lingkungan Elastic Beanstalk Anda](using-features.managing.db.md)

## Mengunduh driver
<a name="nodejs-rds-drivers"></a>

Tambahkan driver basis data ke [file `package.json`](nodejs-platform-dependencies.md#nodejs-platform-packagejson) proyek Anda di bawah `dependencies`.

**Example `package.json` – Express dengan MySQL**  

```
{
  "name": "my-app",
  "version": "0.0.1",
  "private": true,
  "dependencies": {
    "ejs": "latest",
    "aws-sdk": "latest",
    "express": "latest",
    "body-parser": "latest",
    "mysql": "latest"
  },
  "scripts": {
    "start": "node app.js"
  }
}
```

**Paket driver umum untuk Node.js**
+ **MySQL** – [mysql](https://www.npmjs.com/package/mysql)
+ **PostgreSQL** – [node-postgres](https://www.npmjs.com/package/pg)
+ **SQL Server** – [node-mssql](https://www.npmjs.com/package/mssql)
+ **Oracle** – [node-oracledb](https://www.npmjs.com/package/oracledb)

## Menyambungkan ke basis data
<a name="nodejs-rds-connect"></a>

Elastic Beanstalk memberikan informasi koneksi untuk instans DB terlampir di properti lingkungan. Gunakan `process.env.VARIABLE` untuk membaca properti dan mengonfigurasi koneksi basis data.

**Example app.js – Koneksi basis data MySQL**  

```
var mysql = require('mysql');

var connection = mysql.createConnection({
  host     : process.env.RDS_HOSTNAME,
  user     : process.env.RDS_USERNAME,
  password : process.env.RDS_PASSWORD,
  port     : process.env.RDS_PORT
});

connection.connect(function(err) {
  if (err) {
    console.error('Database connection failed: ' + err.stack);
    return;
  }

  console.log('Connected to database.');
});

connection.end();
```
[Untuk informasi selengkapnya tentang membangun string koneksi menggunakan node-mysql, lihat npmjs. org/package/mysql](https://npmjs.org/package/mysql).

# Alat dan sumber daya Node.js
<a name="create_deploy_nodejs.resources"></a>

Ada beberapa tempat yang dapat dikunjungi untuk mendapatkan bantuan tambahan ketika mengembangkan aplikasi Node.js Anda: 


****  

|  Sumber Daya  |  Deskripsi  | 
| --- | --- | 
|  [GitHub](https://github.com/aws/aws-sdk-js)  | Instal AWS SDK untuk Node.js menggunakan GitHub.  | 
|  [AWS SDK untuk Node.js (Pratinjau Pengembang)](https://aws.amazon.com/sdkfornodejs/)  | Tempat yang lengkap mengakomodasikan segala kebutuhan Anda mulai dari kode sampel, dokumentasi, alat, dan sumber daya tambahan. | 