ค้นหาเว็บไซต์

typescript - การดึงค่า Secret ของ AWS SecretManager เป็นค่าจำนวนเต็มต่อ CDK


ฉันกำลังพยายามดึงค่า Secret เป็นค่า integer (หมายเลขพอร์ต) ตาม CDK เพื่อสร้างทรัพยากรอื่น โดยพื้นฐานแล้วเมื่อฉันต้องการค่าประเภท String สำหรับพารามิเตอร์ String ทุกอย่างทำงานได้ดี แต่เมื่อฉันพยายามแปลง String เป็น int เพื่อใช้เป็นพารามิเตอร์ตัวเลข มันกลับไม่ทำงานอีกต่อไป ปัญหาคือ CDK สร้างการอ้างอิงสำหรับค่าพวกนี้และไม่สามารถแปลงเป็นค่าตัวเลขได้ คำถามคือ: มีวิธีใดในการดึงค่า Secret เป็นตัวเลขหรือไม่?

นี่คือโค้ดตัวอย่างบางส่วน:

อ็อบเจ็กต์ SecretManager:

const secret = secretsmanager.Secret.fromSecretAttributes(this, "SecretId", {
      secretCompleteArn: someValidSecretArn
    });

ทำงานได้ดี:

host: secret.secretValueFromJson('host').toString()

ไม่ทำงานเพราะพารามิเตอร์ต้องเป็นค่าตัวเลข:

port: secret.secretValueFromJson('port').toString()

ไม่ทำงานเพราะพอร์ตเป็นค่า null (มันไม่ใช่!) โดยพื้นฐานแล้ว อ้างอิงไม่สามารถถูกแยกวิเคราะห์ได้:

port: parseInt(secret.secretValueFromJson('port').toString())

ไม่ทำงาน เหมือนกับด้านบน:

port: +secret.secretValueFromJson('port').toString()

คำตอบ #1

คุณสามารถใช้คลาส Token ของ CDK เพื่อตีความค่าโทเค็นเป็นตัวเลขได้:

https://docs.aws.amazon.com/cdk/api/v1/docs/@aws-cdk_core.Token.html#static-aswbrnumbervalue

port: cdk.Token.asNumber(secret.secretValueFromJson('port'));

มันจะถูกแก้ไขเป็นค่าที่ถูกต้องในเวลาการปรับใช้

บทความที่เกี่ยวข้อง