View a markdown version of this page

Runtime Lambda - AWS Lambda

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

Runtime Lambda

Lambda mendukung banyak bahasa melalui penggunaan runtime. Runtime menyediakan lingkungan khusus bahasa yang menyampaikan peristiwa pemanggilan, informasi konteks, dan respons antara Lambda dan fungsi. Anda dapat menggunakan runtime yang disediakan Lambda, atau membangun sendiri. Untuk informasi tentang runtime sumber terbuka, lihat. Repositori sumber terbuka

Lambda adalah agnostik terhadap pilihan runtime Anda. Untuk fungsi sederhana, bahasa yang ditafsirkan seperti Python dan Node.js menawarkan kinerja tercepat. Untuk fungsi dengan komputasi yang lebih kompleks, bahasa yang dikompilasi seperti Java seringkali lebih lambat untuk diinisialisasi tetapi berjalan dengan cepat di handler Lambda. Pilihan runtime juga dipengaruhi oleh preferensi pengembang dan keakraban bahasa.

Setiap rilis bahasa pemrograman utama memiliki runtime terpisah, dengan pengen al runtime unik, seperti nodejs24.x ataupython3.14. Untuk mengkonfigurasi fungsi untuk menggunakan versi bahasa utama baru, Anda perlu mengubah pengidentifikasi runtime. Karena AWS Lambda tidak dapat menjamin kompatibilitas mundur antara versi utama, ini adalah operasi yang digerakkan oleh pelanggan.

Untuk fungsi yang didefinisikan sebagai image container, Anda memilih runtime dan distribusi Linux saat Anda membuat image container. Untuk mengubah runtime, Anda membuat gambar kontainer baru.

Ketika Anda menggunakan arsip file .zip untuk paket deployment, Anda memilih runtime ketika Anda membuat fungsi. Untuk mengubah runtime, Anda dapat memperbarui konfigurasi fungsi. Runtime dipasangkan dengan salah satu distribusi Amazon Linux. Lingkungan eksekusi yang mendasari menyediakan pustaka dan variabel lingkungan tambahan yang dapat Anda akses dari kode fungsi Anda.

Lambda memanggil fungsi Anda di lingkungan eksekusi. Lingkungan eksekusi menyediakan lingkungan runtime yang aman dan terisolasi yang mengelola sumber daya yang diperlukan untuk menjalankan fungsi Anda. Lambda menggunakan kembali lingkungan eksekusi dari pemanggilan sebelumnya jika tersedia, atau dapat membuat lingkungan eksekusi baru.

Untuk menggunakan bahasa lain di Lambda, seperti Go atau Rust, gunakan OS-only runtime. Area pelaksanaan Lambda menyediakan antarmuka runtime atas adanya event invokasi dan mengirimkan tanggapan. Anda dapat menerapkan bahasa lain dengan mengimplementasikan runtime khusus di samping kode fungsi Anda, atau dalam lapisan.

Waktu aktif yang didukung

Tabel berikut mencantumkan runtime Lambda yang didukung dan tanggal penghentian yang diproyeksikan. Setelah runtime tidak digunakan lagi, Anda masih dapat membuat dan memperbarui fungsi untuk jangka waktu terbatas. Untuk informasi selengkapnya, lihat Penggunaan runtime setelah penghentian. Tabel ini memberikan tanggal yang diperkirakan saat ini untuk penghentian waktu proses, berdasarkan pada kami. Kebijakan penghentian waktu proses Tanggal-tanggal ini disediakan untuk tujuan perencanaan dan dapat berubah.

penting

Amazon Linux 2 dijadwalkan berakhir pada 30 Juni 2026. Runtime Lambda dan image basis wadah untuk Java 8 (AL2), Java 11 (AL2), Java 17 (AL2), Python 3.10, Python 3.11, dan provided.al2 akan terus menerima patch untuk masalah keamanan penting dan terpilih Amazon Linux 2 penting dan terpilih, selain patch runtime bahasa, hingga tanggal penghentian yang ditunjukkan pada tabel di bawah ini.

Kami menyarankan pelanggan meningkatkan ke runtime berbasis Amazon Linux 2023 sesegera mungkin. Untuk pelanggan yang memutakhirkan ke Java 21 atau Java 25, Anda dapat menggunakan AWS Transform kustom untuk membantu dengan peningkatan ini. Bagi pelanggan yang tidak dapat meningkatkan versi Java mereka, kami menyediakan runtime berbasis Amazon Linux 2023 untuk Java 8, Java 11, dan Java 17 yang mengikuti jadwal penghentian AL2023.

Nama Pengidentifikasi Sistem operasi Tanggal pengusangan Blokir fungsi buat Pembaruan fungsi blok

Node.js 24

nodejs24.x

Amazon Linux 2023

30 April 2028

1 Juni 2028

1 Juli 2028

Node.js 22

nodejs22.x

Amazon Linux 2023

30 April 2027

1 Juni 2027

1 Juli 2027

Python 3.14

python3.14

Amazon Linux 2023

30 Juni 2029

31 Juli 2029

31 Agu 2029

Python 3.13

python3.13

Amazon Linux 2023

30 Juni 2029

31 Juli 2029

31 Agu 2029

Python 3.12

python3.12

Amazon Linux 2023

31 Okt 2028

30 November 2028

10 Jan 2029

Python 3.11

python3.11

Amazon Linux 2

30 Juni 2027

31 Juli 2027

31 Agu 2027

Python 3.10

python3.10

Amazon Linux 2

31 Okt 2026

1 Februari 2027

3 Maret 2027

Jawa 25

java25

Amazon Linux 2023

30 Juni 2029

31 Juli 2029

31 Agu 2029

Jawa 21

java21

Amazon Linux 2023

30 Juni 2029

31 Juli 2029

31 Agu 2029

Jawa 17

java17.al2023

Amazon Linux 2023

Tidak dijadwalkan

Tidak dijadwalkan

Tidak dijadwalkan

Java 11

java11.al2023

Amazon Linux 2023

Tidak dijadwalkan

Tidak dijadwalkan

Tidak dijadwalkan

Java 8

java8.al2023

Amazon Linux 2023

Tidak dijadwalkan

Tidak dijadwalkan

Tidak dijadwalkan

Jawa 17

java17

Amazon Linux 2

30 Juni 2027

31 Juli 2027

31 Agu 2027

Java 11

java11

Amazon Linux 2

30 Juni 2027

31 Juli 2027

31 Agu 2027

Java 8

java8.al2

Amazon Linux 2

30 Juni 2027

31 Juli 2027

31 Agu 2027

.NET10

dotnet10

Amazon Linux 2023

14 November 2028

14 Des 2028

15 Jan 2029

.NET 9 (hanya kontainer)

dotnet9

Amazon Linux 2023

10 November 2026

Tidak dijadwalkan

Tidak dijadwalkan

.NET8

dotnet8

Amazon Linux 2023

10 November 2026

1 Februari 2027

3 Maret 2027

Ruby 4.0

ruby4.0

Amazon Linux 2023

31 Maret 2029

30 April 2029

Mei 31, 2029

Ruby 3.4

ruby3.4

Amazon Linux 2023

31 Maret 2028

30 April 2028

Mei 31, 2028

Ruby 3.3

ruby3.3

Amazon Linux 2023

31 Maret 2027

30 April 2027

Mei 31, 2027

OS-only Waktu pelaksanaan

provided.al2023

Amazon Linux 2023

30 Juni 2029

31 Juli 2029

31 Agu 2029

catatan

Untuk wilayah baru, Lambda tidak akan mendukung runtime yang ditetapkan untuk tidak digunakan lagi dalam 6 bulan ke depan.

Lambda selalu memperbarui runtime terkelola dan gambar basis kontainer yang sesuai dengan tambalan dan dukungan untuk rilis versi minor. Untuk informasi selengkapnya lihat pembaruan runtime Lambda.

Untuk berinteraksi secara terprogram dengan sumber daya lain Layanan AWS dari fungsi Lambda Anda, Anda dapat menggunakan salah satu SDK. AWS Run Node.js time, Python, dan Ruby menyertakan versi AWS SDK. Namun, untuk mempertahankan kontrol penuh atas dependensi Anda, dan untuk memaksimalkan kompatibilitas mundur selama pembaruan runtime otomatis, sebaiknya Anda selalu menyertakan modul SDK yang digunakan kode Anda (bersama dengan dependensi apa pun) dalam paket penerapan fungsi Anda atau di lapisan Lambda.

Sebaiknya gunakan versi SDK yang disertakan runtime hanya jika Anda tidak dapat menyertakan paket tambahan dalam penerapan Anda. Misalnya, saat Anda membuat fungsi menggunakan editor kode konsol Lambda atau menggunakan kode fungsi sebaris dalam CloudFormation template.

Lambda secara berkala memperbarui versi AWS SDK yang disertakan dalam runtime Node.js, Python, dan Ruby. Untuk menentukan versi AWS SDK yang disertakan dalam runtime yang Anda gunakan, lihat bagian berikut:

Lambda terus mendukung bahasa pemrograman Go setelah penghentian runtime Go 1.x. Untuk informasi selengkapnya, lihat Migrasi AWS Lambda fungsi dari Go1.x runtime ke runtime khusus di Amazon Linux 2 di AWS Compute Blog.

Semua runtime Lambda yang didukung mendukung arsitektur x86_64 dan arm64.

Rilis runtime baru

Lambda menyediakan runtime terkelola untuk versi bahasa baru hanya ketika rilis mencapai fase dukungan jangka panjang (LTS) dari siklus rilis bahasa. Misalnya, untuk siklus Node.js rilis, ketika rilis mencapai fase LTS Aktif.

Sebelum rilis mencapai fase dukungan jangka panjang, itu tetap dalam pengembangan dan masih dapat mengalami perubahan besar. Lambda menerapkan pembaruan runtime secara otomatis secara default, jadi melanggar perubahan pada versi runtime dapat menghentikan fungsi Anda berfungsi seperti yang diharapkan.

Lambda tidak menyediakan runtime terkelola untuk versi bahasa yang tidak dijadwalkan untuk rilis LTS.

Daftar berikut menunjukkan bulan peluncuran target untuk runtime Lambda mendatang. Tanggal-tanggal ini hanya bersifat indikatif dan dapat berubah.

  • Node.js 26 - November 2026

  • Python 3.15 - November 2026

Kebijakan penghentian waktu proses

Runtime Lambda untuk arsip file.zip dibangun di sekitar kombinasi sistem operasi, bahasa pemrograman, dan pustaka perangkat lunak yang tunduk pada pemeliharaan dan pembaruan keamanan. Kebijakan penghentian standar Lambda adalah menghentikan runtime ketika komponen utama runtime mencapai akhir dukungan jangka panjang komunitas (LTS) dan pembaruan keamanan tidak lagi tersedia. Paling sering, ini adalah runtime bahasa, meskipun dalam beberapa kasus, runtime dapat tidak digunakan lagi karena sistem operasi (OS) mencapai akhir LTS.

Setelah runtime tidak digunakan lagi, AWS mungkin tidak lagi menerapkan patch keamanan atau pembaruan ke runtime tersebut, dan fungsi yang menggunakan runtime tersebut tidak lagi memenuhi syarat untuk dukungan teknis. Runtime yang tidak digunakan lagi disediakan 'apa adanya', tanpa jaminan apa pun, dan mungkin berisi bug, kesalahan, cacat, atau kerentanan lainnya.

Untuk mempelajari selengkapnya tentang mengelola peningkatan runtime dan penghentian, lihat bagian berikut dan M engelola peningkatan AWS Lambda runtime di Blog AWS Komputasi.

penting

Lambda terkadang menunda penghentian runtime Lambda untuk jangka waktu terbatas setelah tanggal akhir dukungan versi bahasa yang didukung runtime. Selama periode ini, Lambda hanya menerapkan patch keamanan ke OS runtime. Lambda tidak menerapkan patch keamanan ke runtime bahasa pemrograman setelah mencapai tanggal akhir dukungan.

Model tanggung jawab bersama

Lambda bertanggung jawab untuk mengkurasi dan menerbitkan pembaruan keamanan untuk semua runtime terkelola yang didukung dan gambar basis kontainer. Secara default, Lambda akan menerapkan pembaruan ini secara otomatis ke fungsi menggunakan runtime terkelola. Jika pengaturan pembaruan runtime otomatis default telah diubah, lihat model tanggung jawab bersama kontrol manajemen runtime. Untuk fungsi yang digunakan menggunakan gambar kontainer, Anda bertanggung jawab untuk membangun kembali image wadah fungsi Anda dari image dasar terbaru dan menyebarkan ulang image kontainer.

Ketika runtime tidak digunakan lagi, tanggung jawab Lambda untuk memperbarui runtime terkelola dan image basis kontainer berhenti. Anda bertanggung jawab untuk memutakhirkan fungsi Anda untuk menggunakan runtime atau image dasar yang didukung.

Dalam semua kasus, Anda bertanggung jawab untuk menerapkan pembaruan ke kode fungsi Anda, termasuk dependensinya. Tanggung jawab Anda di bawah model tanggung jawab bersama dirangkum dalam tabel berikut.

Fase siklus proses runtime Tanggung jawab Lambda Tanggung jawab Anda
Runtime terkelola yang didukung

Berikan pembaruan runtime reguler dengan patch keamanan dan pembaruan lainnya.

Terapkan pembaruan runtime secara otomatis secara default (lihat Mode pembaruan runtime untuk perilaku non-default).

Perbarui kode fungsi Anda, termasuk dependensi, untuk mengatasi kerentanan keamanan apa pun.
Gambar wadah yang didukung Berikan pembaruan rutin ke image basis kontainer dengan patch keamanan dan pembaruan lainnya.

Perbarui kode fungsi Anda, termasuk dependensi, untuk mengatasi kerentanan keamanan apa pun.

Secara teratur membangun kembali dan menyebarkan kembali image kontainer Anda menggunakan image dasar terbaru.

Runtime terkelola mendekati penghentian

Beri tahu pelanggan sebelum penghentian runtime melalui dokumentasi,, email Dasbor Health, dan. Trusted Advisor

Tanggung jawab untuk pembaruan runtime berakhir pada penghentian.

Pantau dokumentasi Lambda Dasbor Health, email, atau Trusted Advisor untuk informasi penghentian runtime.

Tingkatkan fungsi ke runtime yang didukung sebelum runtime sebelumnya tidak digunakan lagi.

Gambar kontainer mendekati penghentian

Pemberitahuan penghentian tidak tersedia untuk fungsi yang menggunakan gambar kontainer.

Tanggung jawab untuk pembaruan gambar basis kontainer berakhir saat penghentian.

Waspadai jadwal penghentian dan tingkatkan fungsi ke gambar dasar yang didukung sebelum gambar sebelumnya tidak digunakan lagi.

Penggunaan runtime setelah penghentian

Setelah runtime tidak digunakan lagi, AWS mungkin tidak lagi menerapkan patch keamanan atau pembaruan ke runtime tersebut, dan fungsi yang menggunakan runtime tersebut tidak lagi memenuhi syarat untuk dukungan teknis. Meskipun Anda dapat terus memanggil fungsi Anda tanpa batas waktu, AWS sangat menyarankan untuk bermigrasi ke runtime yang didukung. Runtime yang tidak digunakan lagi disediakan 'apa adanya', tanpa jaminan apa pun, dan mungkin berisi bug, kesalahan, cacat, atau kerentanan lainnya. Fungsi yang menggunakan runtime yang tidak digunakan lagi mungkin juga mengalami penurunan kinerja atau masalah lain, seperti kedaluwarsa sertifikat, yang dapat menyebabkan fungsi tersebut berhenti berfungsi dengan baik.

Anda dapat memperbarui fungsi untuk menggunakan runtime yang didukung yang lebih baru kapan saja setelah runtime tidak digunakan lagi. Kami menyarankan untuk menguji fungsi Anda dengan runtime baru sebelum menerapkan perubahan di lingkungan produksi. Anda tidak akan dapat kembali ke runtime yang tidak digunakan lagi setelah pembaruan fungsi diblokir. Sebaiknya gunakan versi fungsi dan alias untuk mengaktifkan penerapan yang aman dengan rollback.

Garis waktu berikut menjelaskan apa yang terjadi ketika runtime tidak digunakan lagi:

Fase siklus proses runtime Saat Apa

Periode pemberitahuan penghentian

Setidaknya 180 hari sebelum penghentian

Penghentian

Tanggal pengusangan

  • AWS mungkin tidak lagi menerapkan pembaruan keamanan atau pembaruan lainnya.

  • Fungsi tidak lagi memenuhi syarat untuk dukungan teknis.

  • Anda tidak dapat lagi membuat atau memperbarui fungsi menggunakan runtime yang tidak digunakan lagi di konsol Lambda. Anda dapat terus membuat dan memperbarui fungsi melalui AWS CLI, AWS SAM, atau CloudFormation.

Blokir fungsi buat

Setidaknya 30 hari setelah penghentian

  • Lambda mulai memblokir pembuatan fungsi baru.

  • Anda dapat terus memperbarui kode dan konfigurasi untuk fungsi yang ada melalui AWS CLI, AWS SAM, atau CloudFormation..

Pembaruan fungsi blok

Setidaknya 60 hari setelah penghentian

  • Lambda mulai memblokir pembaruan kode dan konfigurasi untuk fungsi yang ada.

  • Anda masih dapat memutakhirkan konfigurasi fungsi ke runtime yang didukung. Namun, memutar kembali ke runtime yang tidak digunakan lagi mungkin diblokir.

catatan

Untuk beberapa runtime, AWS menunda tanggal block-function-create dan block-function-update melebihi 30 dan 60 hari yang biasa setelah penghentian. AWS telah membuat perubahan ini sebagai tanggapan terhadap umpan balik pelanggan untuk memberi Anda lebih banyak waktu untuk meningkatkan fungsi Anda. Lihat tabel di Waktu aktif yang didukung dan Waktu pengoperasian terdepresiasi untuk melihat tanggal runtime Anda. Lambda tidak akan mulai memblokir fungsi pembuatan atau pembaruan sebelum tanggal yang diberikan dalam tabel ini.

Menerima pemberitahuan penghentian runtime

Ketika runtime mendekati tanggal penghentiannya, Lambda mengirimi Anda peringatan email jika ada fungsi dalam Anda yang Akun AWS menggunakan runtime itu. Pemberitahuan juga ditampilkan di Dasbor Health dan di AWS Trusted Advisor.

  • Menerima pemberitahuan email:

    Lambda mengirimi Anda peringatan email setidaknya 180 hari sebelum runtime tidak digunakan lagi. Email ini mencantumkan versi $LATEST dari semua fungsi menggunakan runtime. Untuk melihat daftar lengkap versi fungsi yang terpengaruh, gunakan Trusted Advisor atau lihatMengambil data tentang fungsi Lambda yang menggunakan runtime yang tidak digunakan lagi.

    Lambda mengirimkan pemberitahuan email ke kontak akun utama Anda Akun AWS. Untuk informasi tentang melihat atau memperbarui alamat email di akun Anda, lihat Memper barui informasi kontak di Refer AWS ensi Umum.

  • Menerima pemberitahuan melalui Dasbor Health:

    Men Dasbor Health ampilkan pemberitahuan setidaknya 180 hari sebelum runtime tidak digunakan lagi. Pemberitahuan muncul di halaman kesehatan akun Anda di bawah Notifikasi lainnya. Tab sumber daya yang terpengaruh pada notifikasi mencantumkan versi $LATEST dari semua fungsi yang menggunakan runtime.

    catatan

    Untuk melihat daftar lengkap dan terbaru dari versi fungsi yang terpengaruh, gunakan Trusted Advisor atau lihatMengambil data tentang fungsi Lambda yang menggunakan runtime yang tidak digunakan lagi.

    Dasbor Health notifikasi kedaluwarsa 90 hari setelah runtime yang terpengaruh tidak digunakan lagi.

  • Menggunakan AWS Trusted Advisor

    Trusted Advisor menampilkan pemberitahuan setidaknya 180 hari sebelum runtime tidak digunakan lagi. Pemberitahuan muncul di halaman Keamanan. Daftar fungsi yang terpengaruh ditampilkan di bawah AWS Lambda Functions Using Deprecated Runtimes. Daftar fungsi ini menampilkan versi $LATEST dan yang diterbitkan dan diperbarui secara otomatis untuk mencerminkan status fungsi Anda saat ini.

    Anda dapat mengaktifkan notifikasi email mingguan dari Trusted Advisor halaman Preferensi Trusted Advisor konsol.

Waktu pengoperasian terdepresiasi

Runtime berikut telah mencapai akhir dukungan:

Nama Pengidentifikasi Sistem operasi Tanggal pengusangan Blokir fungsi buat Pembaruan fungsi blok

OS-only Waktu pelaksanaan

provided.al2

Amazon Linux 2

31 Juli 2026

1 Februari 2027

3 Maret 2027

Node.js 20

nodejs20.x

Amazon Linux 2023

30 April 2026

1 Februari 2027

3 Maret 2027

Ruby 3.2

ruby3.2

Amazon Linux 2

31 Maret 2026

1 Februari 2027

3 Maret 2027

Python 3.9

python3.9

Amazon Linux 2

15 Des 2025

1 Februari 2027

3 Maret 2027

Node.js 18

nodejs18.x

Amazon Linux 2

1 September 2025

1 Februari 2027

3 Maret 2027

.NET6

dotnet6

Amazon Linux 2

20 Des 2024

1 Februari 2027

3 Maret 2027

Python 3.8

python3.8

Amazon Linux 2

14 Okt 2024

1 Februari 2027

3 Maret 2027

Node.js 16

nodejs16.x

Amazon Linux 2

12 Juni 2024

1 Februari 2027

3 Maret 2027

.NET 7 (hanya kontainer)

dotnet7

Amazon Linux 2

Mei 14, 2024

N/A

N/A

Java 8

java8

Amazon Linux

8 Jan 2024

8 Februari 2024

3 Maret 2027

Jalankan 1.x

go1.x

Amazon Linux

8 Jan 2024

8 Februari 2024

3 Maret 2027

OS-only Waktu pelaksanaan

provided

Amazon Linux

8 Jan 2024

8 Februari 2024

3 Maret 2027

Ruby 2.7

ruby2.7

Amazon Linux 2

7 Des 2023

9 Jan 2024

3 Maret 2027

Node.js 14

nodejs14.x

Amazon Linux 2

4 Des 2023

9 Jan 2024

3 Maret 2027

Python 3.7

python3.7

Amazon Linux

4 Des 2023

9 Jan 2024

3 Maret 2027

.NET Core 3.1

dotnetcore3.1

Amazon Linux 2

3 Apr 2023

3 Apr 2023

3 Mei 2023

Node.js 12

nodejs12.x

Amazon Linux 2

31 Maret 2023

31 Maret 2023

30 Apr 2023

Python 3.6

python3.6

Amazon Linux

Juli 18, 2022

Juli 18, 2022

29 Agustus 2022

.NET 5 (hanya kontainer)

dotnet5.0

Amazon Linux 2

10 Mei 2022

N/A

N/A

.NET Core 2.1

dotnetcore2.1

Amazon Linux

5 Jan 2022

5 Jan 2022

13 Apr 2022

Node.js 10

nodejs10.x

Amazon Linux 2

30 Juli 2021

30 Juli 2021

14 Februari 2022

Ruby 2.5

ruby2.5

Amazon Linux

30 Juli 2021

30 Juli 2021

31 Maret 2022

Python 2.7

python2.7

Amazon Linux

15 Juli 2021

15 Juli 2021

Mei 30, 2022

Node.js 8.10

nodejs8.10

Amazon Linux

6 Maret 2020

4 Februari 2020

6 Maret 2020

Node.js 4.3

nodejs4.3

Amazon Linux

5 Maret 2020

3 Februari 2020

5 Maret 2020

Node.js 4.3 tepi

nodejs4.3-edge

Amazon Linux

5 Maret 2020

31 Maret 2019

30 April 2019

Node.js 6.10

nodejs6.10

Amazon Linux

12 Agustus 2019

12 Juli 2019

12 Agustus 2019

.NET Core 1.0

dotnetcore1.0

Amazon Linux

27 Juni 2019

30 Juni 2019

30 Juli 2019

.NET Core 2.0

dotnetcore2.0

Amazon Linux

30 Mei 2019

30 April 2019

30 Mei 2019

Node.js 0.10

nodejs

Amazon Linux

30 Agustus 2016

30 September 2016

31 Okt 2016

Dalam hampir semua kasus, tanggal akhir penggunaan versi bahasa atau sistem operasi diketahui pada jauh-jauh hari sebelumnya. Tautan berikut memberikan jadwal akhir masa pakai untuk setiap bahasa yang didukung Lambda sebagai runtime terkelola.

Kebijakan dukungan bahasa dan framework