Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
AWS CloudFormation Lambda Hooks memungkinkan Anda untuk mengevaluasi CloudFormation dan AWS Cloud Control API operasi terhadap kode kustom Anda sendiri. Hook Anda dapat memblokir operasi agar tidak berjalan, atau mengeluarkan peringatan kepada penelepon dan memungkinkan operasi dilanjutkan. Saat Anda membuat Lambda Hook, Anda dapat mengonfigurasinya untuk mencegat dan mengevaluasi operasi berikut: CloudFormation
-
Operasi sumber daya
-
Operasi tumpukan
-
Ubah operasi set
Topik
Mengembangkan Lambda Hook
Saat Hooks memanggil Lambda Anda, Lambda akan menunggu hingga 30 detik hingga Lambda mengevaluasi input. Lambda akan mengembalikan JSON respons yang menunjukkan apakah Hook berhasil atau gagal.
Minta masukan
Input yang diteruskan ke fungsi Lambda Anda bergantung pada operasi target Hook (contoh: tumpukan, sumber daya, atau set perubahan).
Masukan respons
Untuk berkomunikasi dengan Hooks jika permintaan Anda berhasil atau gagal, fungsi Lambda Anda perlu mengembalikan respons. JSON
Berikut ini adalah contoh bentuk respons yang diharapkan Hooks:
{
"hookStatus": "SUCCESS" or "FAILED" or "IN_PROGRESS",
"errorCode": None or "NonCompliant" or "InternalFailure"
"pesan": String,
"clientRequestToken": String
"callbackContext": None,
"callbackDelaySeconds": Integer,
}
- hookStatus
-
Status Hook. Bidang ini harus diisi.
Nilai yang valid: (
SUCCESS
|FAILED
|IN_PROGRESS
)catatan
Hook dapat kembali
IN_PROGRESS
3 kali. Jika tidak ada hasil yang dikembalikan, Hook akan gagal. Untuk Lambda Hook, ini berarti fungsi Lambda Anda dapat dipanggil hingga 3 kali. - errorCode
-
Menunjukkan apakah operasi dievaluasi dan ditentukan tidak valid, atau jika kesalahan terjadi dalam Hook, mencegah evaluasi. Bidang ini diperlukan jika Hook gagal.
Nilai yang valid: (
NonCompliant
|InternalFailure
) - pesan
-
Pesan kepada penelepon yang menyatakan mengapa Hook berhasil atau gagal.
catatan
Saat mengevaluasi CloudFormation operasi, bidang ini dipotong menjadi 4096 karakter.
Saat mengevaluasi API operasi Cloud Control, bidang ini dipotong menjadi 1024 karakter.
- clientRequestToken
-
Token permintaan yang disediakan sebagai masukan untuk permintaan Hook. Bidang ini harus diisi.
- callbackContext
-
Jika Anda menunjukkan bahwa
hookStatus
is,IN_PROGRESS
Anda meneruskan konteks tambahan yang disediakan sebagai input saat fungsi Lambda dipanggil kembali. - callbackDelaySeconds
-
Berapa lama Hooks harus menunggu untuk memanggil Hook ini lagi.
Contoh
Berikut ini adalah contoh respons yang berhasil:
{
"hookStatus": "SUCCESS",
"message": "compliant",
"clientRequestToken": "123avjdjk31"
}
Berikut ini adalah contoh respons yang gagal:
{
"hookStatus": "FAILED",
"errorCode": "NON_COMPLIANT",
"message": "S3 Bucket Versioning must be enabled.",
"clientRequestToken": "123avjdjk31"
}
Mengevaluasi operasi sumber daya dengan Lambda Hooks
Setiap kali Anda membuat, memperbarui, atau menghapus sumber daya, itu dianggap sebagai operasi sumber daya. Sebagai contoh, jika Anda menjalankan pembaruan CloudFormation tumpukan yang membuat sumber daya baru, Anda telah menyelesaikan operasi sumber daya. Saat Anda membuat, memperbarui, atau menghapus sumber daya menggunakan Cloud ControlAPI, itu juga dianggap sebagai operasi sumber daya. Anda dapat mengonfigurasi CloudFormation Lambda Hook Anda untuk menargetkan RESOURCE
dan CLOUD_CONTROL
operasi dalam konfigurasi HookTargetOperations
.
catatan
delete
Handler Hook hanya dipanggil ketika sumber daya dihapus menggunakan pemicu operasi dari cloud-control
delete-resource
atau. cloudformation delete-stack
Topik
Sintaks masukan sumber daya Lambda Hook
Ketika Lambda Anda dipanggil untuk operasi sumber daya, Anda akan menerima JSON input yang berisi properti sumber daya, properti yang diusulkan, dan konteks di sekitar pemanggilan Hook.
Berikut ini adalah contoh bentuk JSON input:
{
"awsAccountId": String,
"stackId": String,
"changeSetId": String,
"hookTypeName": String,
"hookTypeVersion": String,
"hookModel": {
"LambdaFunction": String
},
"actionInvocationPoint": "CREATE_PRE_PROVISION" or "UPDATE_PRE_PROVISION" or "DELETE_PRE_PROVISION"
"requestData": {
"targetName": String,
"targetType": String,
"targetLogicalId": String,
"targetModel": {
"resourceProperties": {...},
"previousResourceProperties": {...}
}
},
"requestContext": {
"doa": 1,
"callbackContext": null
}
}
awsAccountId
-
ID yang Akun AWS berisi sumber daya yang sedang dievaluasi.
stackId
-
ID tumpukan CloudFormation tumpukan operasi ini adalah bagian dari. Bidang ini kosong jika pemanggil adalah Cloud ControlAPI.
changeSetId
-
ID dari set perubahan yang memulai pemanggilan Hook. Nilai ini kosong jika perubahan sumber daya dimulai oleh Cloud ControlAPI, atau
create-stack
,update-stack
, ataudelete-stack
operasi. hookTypeName
-
Nama Hook yang sedang berjalan.
hookTypeVersion
-
Versi Hook yang sedang berjalan.
hookModel
-
LambdaFunction
-
Lambda saat ini ARN dipanggil oleh Hook.
actionInvocationPoint
-
Poin yang tepat dalam logika penyediaan tempat Hook berjalan.
Nilai yang valid: (
CREATE_PRE_PROVISION
|UPDATE_PRE_PROVISION
|DELETE_PRE_PROVISION
) requestData
-
targetName
-
Nama sumber daya target yang sedang dibuat.
targetType
-
Jenis target yang sedang dibuat, misalnya
AWS::S3::Bucket
. targetLogicalId
-
ID logis dari sumber daya yang sedang dievaluasi. Jika asal pemanggilan Hook adalah CloudFormation, ini akan menjadi ID sumber daya logis yang ditentukan dalam template Anda CloudFormation . Jika asal pemanggilan Hook ini adalah Cloud ControlAPI, ini akan menjadi nilai yang dibangun.
targetModel
-
resourceProperties
-
Properti yang diusulkan dari sumber daya yang sedang dimodifikasi. Jika sumber daya dihapus, nilai ini akan kosong.
previousResourceProperties
-
Properti yang saat ini terkait dengan sumber daya yang sedang dimodifikasi. Jika sumber daya sedang dibuat, nilai ini akan kosong.
requestContext
-
- doa
-
Upaya saat ini untuk mengeksekusi Hook.
- callbackContext
-
Jika Hookwas diatur ke
IN_PROGRESS
, dan dikembalikan,callbackContext
itu akan ada di sini setelah pemanggilan kembali.
Contoh input perubahan sumber daya Lambda Hook
Dalam masukan contoh berikut, Guard Hook akan menerima definisi AWS::DynamoDB::Table
sumber daya yang diubah. ReadCapacityUnits
Parameter ProvisionedThroughput
dan sedang diperbarui dari 3 hingga 10.
Untuk informasi selengkapnya tentang properti yang tersedia untuk sumber daya, lihat AWS: :DynamoDB: :Table.
{
"awsAccountId": "123456789",
"stackId": "arn:aws:cloudformation:eu-central-1:123456789:stack/test-stack/123456abcd",
"hookTypeName": "my::lambda::resourcehookfunction",
"hookTypeVersion": "00000008",
"hookModel": {
"LambdaFunction": "arn:aws:lambda:eu-central-1:123456789:function:resourcehookfunction"
},
"actionInvocationPoint": "UPDATE_PRE_PROVISION",
"requestData": {
"targetName": "AWS::DynamoDB::Table",
"targetType": "AWS::DynamoDB::Table",
"targetLogicalId": "DDBTable",
"targetModel": {
"resourceProperties": {
"AttributeDefinitions": [
{
"AttributeType": "S",
"AttributeName": "Album"
},
{
"AttributeType": "S",
"AttributeName": "Artist"
}
],
"ProvisionedThroughput": {
"WriteCapacityUnits": 5,
"ReadCapacityUnits": 10
},
"KeySchema": [
{
"KeyType": "HASH",
"AttributeName": "Album"
},
{
"KeyType": "RANGE",
"AttributeName": "Artist"
}
]
},
"previousResourceProperties": {
"AttributeDefinitions": [
{
"AttributeType": "S",
"AttributeName": "Album"
},
{
"AttributeType": "S",
"AttributeName": "Artist"
}
],
"ProvisionedThroughput": {
"WriteCapacityUnits": 5,
"ReadCapacityUnits": 5
},
"KeySchema": [
{
"KeyType": "HASH",
"AttributeName": "Album"
},
{
"KeyType": "RANGE",
"AttributeName": "Artist"
}
]
}
}
},
"requestContext": {
"invocation": 1,
"callbackContext": null
}
}
Contoh fungsi Lambda untuk operasi sumber daya
Contoh berikut target Lambda Hook. Node.js
Ini adalah fungsi sederhana yang gagal pembaruan sumber daya apa pun ke DynamoDB, yang mencoba mengatur ke sesuatu yang lebih besar ProvisionedThroughput ReadCapacity
dari 10. Jika Hook berhasil, pesan, "ReadCapacity dikonfigurasi dengan benar,” akan ditampilkan ke penelepon. Jika permintaan gagal validasi, Hook akan gagal dengan status, "ReadCapacity tidak boleh lebih dari 10.”
export const handler = async (event, context) => {
var targetModel = event?.requestData?.targetModel;
var targetName = event?.requestData?.targetName;
var response = {
"hookStatus": "SUCCESS",
"message": "ReadCapacity is correctly configured.",
"clientRequestToken": event.clientRequestToken
};
if (targetName == "AWS::DynamoDB::Table") {
var readCapacity = targetModel?.resourceProperties?.ProvisionedThroughput?.ReadCapacityUnits;
if (readCapacity > 10) {
response.hookStatus = "FAILED";
response.errorCode = "NonCompliant";
response.message = "ReadCapacity must be cannot be more than 10.";
}
}
return response;
};
Mengevaluasi operasi tumpukan dengan Lambda Hooks
Setiap kali Anda membuat, memperbarui, atau menghapus tumpukan dengan templat baru, Anda dapat mengonfigurasi CloudFormation Lambda Hook Anda untuk memulai dengan mengevaluasi template baru dan berpotensi memblokir operasi tumpukan agar tidak dilanjutkan. Anda dapat mengonfigurasi CloudFormation Lambda Hook Anda untuk menargetkan STACK
operasi dalam konfigurasi HookTargetOperations
.
Topik
Sintaks masukan tumpukan Lambda Hook
Saat Lambda Anda dipanggil untuk operasi tumpukan, Anda akan menerima JSON permintaan yang berisi konteks pemanggilan Hook, actionInvocationPoint
dan konteks permintaan. Karena ukuran CloudFormation template, dan ukuran input terbatas yang diterima oleh fungsi Lambda, template sebenarnya disimpan dalam objek Amazon S3. Input dari requestData
termasuk Amazon S3 mengundurkan diri URL ke objek lain, yang berisi versi template saat ini dan sebelumnya.
Berikut ini adalah contoh bentuk JSON input:
{
"clientRequesttoken": String,
"awsAccountId": String,
"stackID": String,
"changeSetId": String,
"hookTypeName": String,
"hookTypeVersion": String,
"hookModel": {
"LambdaFunction":String
},
"actionInvocationPoint": "CREATE_PRE_PROVISION" or "UPDATE_PRE_PROVISION" or "DELETE_PRE_PROVISION"
"requestData": {
"targetName": "STACK",
"targetType": "STACK",
"targetLogicalId": String,
"payload": String (S3 Presigned URL)
},
"requestContext": {
"invocation": Integer,
"callbackContext": String
}
}
clientRequesttoken
-
Token permintaan yang disediakan sebagai masukan untuk permintaan Hook. Bidang ini harus diisi.
awsAccountId
-
ID yang Akun AWS berisi tumpukan yang sedang dievaluasi.
stackID
-
ID tumpukan CloudFormation tumpukan.
changeSetId
-
ID dari set perubahan yang memulai pemanggilan Hook. Nilai ini kosong jika perubahan tumpukan dimulai oleh Cloud ControlAPI, atau
create-stack
,update-stack
, ataudelete-stack
operasi. hookTypeName
-
Nama Hook yang sedang berjalan.
hookTypeVersion
-
Versi Hook yang sedang berjalan.
hookModel
-
LambdaFunction
-
Lambda saat ini ARN dipanggil oleh Hook.
actionInvocationPoint
-
Poin yang tepat dalam logika penyediaan tempat Hook berjalan.
Nilai yang valid: (
CREATE_PRE_PROVISION
|UPDATE_PRE_PROVISION
|DELETE_PRE_PROVISION
) requestData
-
targetName
-
Nilai ini akan menjadi
STACK
. targetType
-
Nilai ini akan menjadi
STACK
. targetLogicalId
-
Nama tumpukan.
payload
-
Amazon S3 presigned URL berisi JSON objek dengan definisi template saat ini dan sebelumnya.
requestContext
-
Jika Hook sedang dipanggil kembali, objek ini akan diatur.
invocation
-
Upaya saat ini untuk mengeksekusi Hook.
callbackContext
-
Jika Hook diatur ke
IN_PROGRESS
dan dikembalikan,callbackContext
itu akan berada di sini setelah pemanggilan kembali.
payload
Properti dalam data permintaan adalah kode URL yang perlu diambil oleh kode Anda. Setelah menerimaURL, Anda mendapatkan objek dengan skema berikut:
{
"template": String,
"previousTemplate": String
}
template
-
CloudFormation Template lengkap yang disediakan untuk
create-stack
atauupdate-stack
. Ini bisa berupa JSON atau YAML string tergantung pada apa yang disediakan CloudFormation.Dalam
delete-stack
operasi, nilai ini akan kosong. previousTemplate
-
CloudFormation Template sebelumnya. Ini bisa berupa JSON atau YAML string tergantung pada apa yang disediakan CloudFormation.
Dalam
delete-stack
operasi, nilai ini akan kosong.
Contoh input perubahan tumpukan Lambda Hook
Berikut ini adalah contoh masukan perubahan tumpukan. Hook sedang mengevaluasi perubahan yang memperbarui ObjectLockEnabled
ke true, dan menambahkan SQS antrian Amazon:
{
"clientRequestToken": "f8da6d11-b23f-48f4-814c-0fb6a667f50e",
"awsAccountId": "123456789",
"stackId": "arn:aws:cloudformation:eu-central-1:123456789:stack/david-ddb-test-stack/400b40f0-8e72-11ef-80ab-02f2902f0df1",
"changeSetId": null,
"hookTypeName": "my::lambda::stackhook",
"hookTypeVersion": "00000008",
"hookModel": {
"LambdaFunction": "arn:aws:lambda:eu-central-1:123456789:function:stackhookfunction"
},
"actionInvocationPoint": "UPDATE_PRE_PROVISION",
"requestData": {
"targetName": "STACK",
"targetType": "STACK",
"targetLogicalId": "my-cloudformation-stack",
"payload": "https://s3......"
},
"requestContext": {
"invocation": 1,
"callbackContext": null
}
}
Ini adalah contoh payload
darirequestData
:
{
"template": "{\"Resources\":{\"S3Bucket\":{\"Type\":\"AWS::S3::Bucket\",\"Properties\":{\"ObjectLockEnabled\":true}},\"SQSQueue\":{\"Type\":\"AWS::SQS::Queue\",\"Properties\":{\"QueueName\":\"NewQueue\"}}}}",
"previousTemplate": "{\"Resources\":{\"S3Bucket\":{\"Type\":\"AWS::S3::Bucket\",\"Properties\":{\"ObjectLockEnabled\":false}}}}"
}
Contoh fungsi Lambda untuk operasi tumpukan
Contoh berikut Lambda Hook menargetkan. Node.js
Ini adalah fungsi sederhana yang mengunduh payload operasi tumpukan, mem-parsing templateJSON, dan mengembalikan. SUCCESS
export const handler = async (event, context) => {
var targetType = event?.requestData?.targetType;
var payloadUrl = event?.requestData?.payload;
var response = {
"hookStatus": "SUCCESS",
"message": "Stack update is compliant",
"clientRequestToken": event.clientRequestToken
};
try {
const templateHookPayloadRequest = await fetch(payloadUrl);
const templateHookPayload = await templateHookPayloadRequest.json()
if (templateHookPayload.template) {
// Do something with the template templateHookPayload.template
// JSON or YAML
}
if (templateHookPayload.previousTemplate) {
// Do something with the template templateHookPayload.previousTemplate
// JSON or YAML
}
} catch (error) {
console.log(error);
response.hookStatus = "FAILED";
response.message = "Failed to evaluate stack operation.";
response.errorCode = "InternalFailure";
}
return response;
};
Mengevaluasi operasi set perubahan dengan Lambda Hooks
Setiap kali Anda membuat set perubahan, Anda dapat mengonfigurasi CloudFormation Lambda Hook Anda untuk terlebih dahulu mengevaluasi set perubahan baru dan berpotensi memblokir pelaksanaannya. Anda dapat mengonfigurasi CloudFormation Lambda Hook Anda untuk menargetkan CHANGE_SET
operasi dalam konfigurasi HookTargetOperations
.
Topik
Lambda Hook mengubah sintaks masukan set
Input untuk operasi set perubahan mirip dengan operasi tumpukan, tetapi payload requestData
juga mencakup daftar perubahan sumber daya yang diperkenalkan oleh set perubahan.
Berikut ini adalah contoh bentuk JSON input:
{
"clientRequesttoken": String,
"awsAccountId": String,
"stackID": String,
"changeSetId": String,
"hookTypeName": String,
"hookTypeVersion": String,
"hookModel": {
"LambdaFunction":String
},
"requestData": {
"targetName": "CHANGE_SET",
"targetType": "CHANGE_SET",
"targetLogicalId": String,
"payload": String (S3 Presigned URL)
},
"requestContext": {
"invocation": Integer,
"callbackContext": String
}
}
clientRequesttoken
-
Token permintaan yang disediakan sebagai masukan untuk permintaan Hook. Bidang ini harus diisi.
awsAccountId
-
ID yang Akun AWS berisi tumpukan yang sedang dievaluasi.
stackID
-
ID tumpukan CloudFormation tumpukan.
changeSetId
-
ID dari set perubahan yang memulai pemanggilan Hook.
hookTypeName
-
Nama Hook yang sedang berjalan.
hookTypeVersion
-
Versi Hook yang sedang berjalan.
hookModel
-
LambdaFunction
-
Lambda saat ini ARN dipanggil oleh Hook.
requestData
-
targetName
-
Nilai ini akan menjadi
CHANGE_SET
. targetType
-
Nilai ini akan menjadi
CHANGE_SET
. targetLogicalId
-
Set perubahanARN..
payload
-
Amazon S3 presigned URL berisi JSON objek dengan template saat ini, serta daftar perubahan yang diperkenalkan oleh set perubahan ini.
requestContext
-
Jika Hook sedang dipanggil kembali, objek ini akan diatur.
invocation
-
Upaya saat ini untuk mengeksekusi Hook.
callbackContext
-
Jika Hook diatur ke
IN_PROGRESS
dan dikembalikan,callbackContext
itu akan berada di sini setelah pemanggilan kembali.
payload
Properti dalam data permintaan adalah kode URL yang perlu diambil oleh kode Anda. Setelah menerimaURL, Anda mendapatkan objek dengan skema berikut:
{
"template": String,
"changedResources": [
{
"action": String,
"beforeContext": JSON String,
"afterContext": JSON String,
"lineNumber": Integer,
"logicalResourceId": String,
"resourceType": String
}
]
}
template
-
CloudFormation Template lengkap yang disediakan untuk
create-stack
atauupdate-stack
. Ini bisa berupa JSON atau YAML string tergantung pada apa yang disediakan CloudFormation. changedResources
-
Daftar sumber daya yang diubah.
action
-
Jenis perubahan yang diterapkan pada sumber daya.
Nilai yang valid: (
CREATE
|UPDATE
|DELETE
) beforeContext
-
Sebuah JSON string dari properti sumber daya sebelum perubahan. Nilai ini adalah null ketika sumber daya sedang dibuat. Semua nilai boolean dan angka dalam JSON string ini adalahSTRINGS.
afterContext
-
Sebuah JSON string dari properti sumber daya jika set perubahan ini dijalankan. Nilai ini adalah null ketika sumber daya sedang dihapus. Semua nilai boolean dan angka dalam JSON string ini adalahSTRINGS.
lineNumber
-
Nomor baris dalam template yang menyebabkan perubahan ini. Jika tindakan adalah nilai
DELETE
ini akan menjadi nol. logicalResourceId
-
ID sumber daya logis dari sumber daya yang diubah.
resourceType
-
Jenis sumber daya yang sedang diubah.
Contoh perubahan Lambda Hook mengatur masukan perubahan
Berikut ini adalah contoh perubahan set perubahan input. Dalam contoh berikut, Anda dapat melihat perubahan yang diperkenalkan oleh set perubahan. Perubahan pertama adalah menghapus antrian yang disebut. CoolQueue
Perubahan kedua adalah menambahkan antrian baru yang disebutNewCoolQueue
. Perubahan terakhir adalah pembaruan keDynamoDBTable
.
{
"clientRequestToken": "f8da6d11-b23f-48f4-814c-0fb6a667f50e",
"awsAccountId": "123456789",
"stackId": "arn:aws:cloudformation:eu-central-1:123456789:stack/david-ddb-test-stack/400b40f0-8e72-11ef-80ab-02f2902f0df1",
"changeSetId": "arn:aws:cloudformation:eu-central-1:123456789:changeSet/davids-change-set/59ebd63c-7c89-4771-a576-74c3047c15c6",
"hookTypeName": "my::lambda::changesethook",
"hookTypeVersion": "00000008",
"hookModel": {
"LambdaFunction": "arn:aws:lambda:eu-central-1:123456789:function:changesethookfunction"
},
"actionInvocationPoint": "CREATE_PRE_PROVISION",
"requestData": {
"targetName": "CHANGE_SET",
"targetType": "CHANGE_SET",
"targetLogicalId": "arn:aws:cloudformation:eu-central-1:123456789:changeSet/davids-change-set/59ebd63c-7c89-4771-a576-74c3047c15c6",
"payload": "https://s3......"
},
"requestContext": {
"invocation": 1,
"callbackContext": null
}
}
Ini adalah contoh payload
darirequestData.payload
:
{
template: 'Resources:\n' +
' DynamoDBTable:\n' +
' Type: AWS::DynamoDB::Table\n' +
' Properties:\n' +
' AttributeDefinitions:\n' +
' - AttributeName: "PK"\n' +
' AttributeType: "S"\n' +
' BillingMode: "PAY_PER_REQUEST"\n' +
' KeySchema:\n' +
' - AttributeName: "PK"\n' +
' KeyType: "HASH"\n' +
' PointInTimeRecoverySpecification:\n' +
' PointInTimeRecoveryEnabled: false\n' +
' NewSQSQueue:\n' +
' Type: AWS::SQS::Queue\n' +
' Properties:\n' +
' QueueName: "NewCoolQueue"',
changedResources: [
{
logicalResourceId: 'SQSQueue',
resourceType: 'AWS::SQS::Queue',
action: 'DELETE',
lineNumber: null,
beforeContext: '{"Properties":{"QueueName":"CoolQueue"}}',
afterContext: null
},
{
logicalResourceId: 'NewSQSQueue',
resourceType: 'AWS::SQS::Queue',
action: 'CREATE',
lineNumber: 14,
beforeContext: null,
afterContext: '{"Properties":{"QueueName":"NewCoolQueue"}}'
},
{
logicalResourceId: 'DynamoDBTable',
resourceType: 'AWS::DynamoDB::Table',
action: 'UPDATE',
lineNumber: 2,
beforeContext: '{"Properties":{"BillingMode":"PAY_PER_REQUEST","AttributeDefinitions":[{"AttributeType":"S","AttributeName":"PK"}],"KeySchema":[{"KeyType":"HASH","AttributeName":"PK"}]}}',
afterContext: '{"Properties":{"BillingMode":"PAY_PER_REQUEST","PointInTimeRecoverySpecification":{"PointInTimeRecoveryEnabled":"false"},"AttributeDefinitions":[{"AttributeType":"S","AttributeName":"PK"}],"KeySchema":[{"KeyType":"HASH","AttributeName":"PK"}]}}'
}
]
}
Contoh fungsi Lambda untuk operasi set perubahan
Contoh berikut Lambda Hook menargetkan. Node.js
Ini adalah fungsi sederhana yang mengunduh payload operasi set perubahan, loop melalui setiap perubahan, dan kemudian mencetak properti sebelum dan sesudah sebelum mengembalikan file. SUCCESS
export const handler = async (event, context) => {
var payloadUrl = event?.requestData?.payload;
var response = {
"hookStatus": "SUCCESS",
"message": "Change set changes are compliant",
"clientRequestToken": event.clientRequestToken
};
try {
const changeSetHookPayloadRequest = await fetch(payloadUrl);
const changeSetHookPayload = await changeSetHookPayloadRequest.json();
const changes = changeSetHookPayload.changedResources || [];
for(const change of changes) {
var beforeContext = {};
var afterContext = {};
if(change.beforeContext) {
beforeContext = JSON.parse(change.beforeContext);
}
if(change.afterContext) {
afterContext = JSON.parse(change.afterContext);
}
console.log(beforeContext)
console.log(afterContext)
// Evaluate Change here
}
} catch (error) {
console.log(error);
response.hookStatus = "FAILED";
response.message = "Failed to evaluate change set operation.";
response.errorCode = "InternalFailure";
}
return response;
};