การสร้าง AWS Lambda โดยใช้ NodejsFunction ของ CDK ใน EC2 Instance
สวัสดีครับ POP จากบริษัท Classmethod (Thailand) ครับ
ผมได้มีโอกาสเรียนรู้เกี่ยวกับการใช้งาน AWS CDK กับ AWS Lambda ในส่วนของการสร้าง AWS Lambda โดยใช้ NodejsFunction ใน CDK จึงอยากจะมาแนะนำในบทความนี้ครับ
ข้อดีการใช้ CDK กับ AWS Lambda
การใช้งาน AWS Cloud Development Kit (CDK) กับ AWS Lambda นั้นมีข้อดีหลายอย่างที่ช่วยให้กระบวนการสร้างและจัดการ Lambda functions เป็นเรื่องง่ายและมีประสิทธิภาพมากขึ้น นี่คือข้อดีบางประการของการใช้งาน CDK กับ Lambda:
- Infrastructure as Code (IaC): CDK ช่วยให้คุณสร้างสถาปัตยกรรมของ AWS ในรูปแบบของโค้ด ซึ่งทำให้เป็น IaC ที่เราสามารถตรวจสอบและเก็บรักษาเวอร์ชันของสถาปัตยกรรมได้ นักพัฒนาสามารถเก็บรักษาสถาปัตยกรรมเหมือนการจัดการโค้ดที่มีประสิทธิภาพเทียบเท่ากัน
- Productivity: CDK ช่วยลดเวลาและความซับซ้อนในกระบวนการสร้าง Lambda functions โดยอนุญาตให้คุณใช้ภาษาโปรแกรมที่คุณคุ้นเคยเพื่อกำหนดสถาปัตยกรรม คุณไม่จำเป็นต้องเขียน CloudFormation template เพื่อกำหนดค่า Lambda function แยกตัว เนื่องจาก CDK จะสร้างคำสั่ง CloudFormation ให้คุณโดยอัตโนมัติ
- Reusable Constructs: CDK มีคอนเซ็ปต์ที่สามารถใช้ซ้ำได้ (reusable constructs) ซึ่งช่วยให้คุณสร้าง Lambda functions ในแบบที่คุณต้องการ คุณสามารถใช้คอนเซ็ปต์พร้อมใช้ที่มีอยู่หรือสร้างคอนเซ็ปต์ของคุณเองเพื่อใช้ในโปรเจคที่มากขึ้น
- Type Safety: CDK เป็นภาษาเทพอย่าง TypeScript หรือ Python ช่วยให้คุณสามารถใช้การตรวจสอบชนิดของ TypeScript หรือการตรวจสอบชนิดของ Python เพื่อความถูกต้องและความปลอดภัยในโค้ดของคุณ
- Seamless Integration: CDK ทำให้คุณสามารถสร้างและจัดการ Lambda functions ร่วมกับทรัพยากร AWS อื่นๆ ได้ง่ายขึ้น เช่น Amazon S3, Amazon DynamoDB, Amazon API Gateway, Amazon SQS เป็นต้น ซึ่งช่วยให้คุณสร้างแอปพลิเคชันที่มีขนาดใหญ่และรวดเร็วมากขึ้น
- Easy Deployment: CDK ช่วยให้กระบวนการสร้าง Lambda functions เป็นเรื่องง่ายและสามารถนำไปใช้งานได้ทันที คุณสามารถสร้างและอัปเดต Lambda functions ของคุณด้วยคำสั่ง
cdk deploy
เพื่อดำเนินการที่รวดเร็วและสะดวกสบาย
เป้าหมาย
การสร้าง AWS Lambda ครั้งนี้ ผมจะใช้ NodejsFunction ของ CDK ที่มีการเขียนไว้ใน CDK TypeScript project (custom-widget-lambda-sample) บน GitHub ติดตั้งลงใน EC2 Instance (Amazon Linux 2023) แล้วทำการ Deploy ไปยัง AWS Lambda ใน Amazon Linux 2023 นี้เลยครับ
สร้าง IAM Role
ครั้งนี้จะสร้าง SSM Role ใน IAM Role โดยมีองค์ประกอบดังนี้
Role | |
---|---|
Role name | tinnakorn-cdk-lambda-ssm |
Policy name | AmazonSSMManagedInstanceCore (มีอยู่ใน Policies) |
CDKExecution (สร้างเองแบบ inline policy ใน Role ของเราโดยใช้ชื่อที่ต้องการ) |
ดูตัวอย่างวิธีการสร้าง SSM Role ได้ที่ลิงก์บทความด้านล่างนี้
เมื่อสร้าง IAM Role ตามลิงก์ตัวอย่างด้านบนเสร็จแล้ว เข้ามาที่ Role ของเรา
จะเห็นว่ามี Policy name: AmazonSSMManagedInstanceCore
แสดงอยู่ในแท็บ Permissions แบบนี้ครับ
ต่อไปเราจะมาเพิ่ม Permissions สำหรับ CDK โดยการสร้าง Create inline policy ใน Role(tinnakorn-cdk-lambda-ssm) ที่เราสร้างเมื่อสักครู่นี้
คลิกที่ Add permissions
และเลือก Create inline policy
Step 1 - Specify permissions
เลือก JSON
แล้วลบ Policy เก่าออกทั้งหมด แล้วคัดลอก Policy ด้านล่างนี้วางแทนที่ก็จะแสดงตามรูปภาพ และเลื่อนลงมาด้านล่าง แล้วคลิก Next
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sts:AssumeRole" ], "Resource": [ "arn:aws:iam::*:role/cdk-*" ] } ] }
Step 2 - Review and create
ป้อน Policy name: CDKExecution
(ชื่ออะไรก็ได้) แล้วคลิก Create policy
แล้วดูในแท็บ Permissions จะเห็นว่ามี Policy name: CDKExecution
ที่สร้างขึ้นมาแล้ว
สร้าง EC2 Instance และเพิ่ม SSM Role ใน EC2 Instance
ดูตัวอย่างได้ที่ลิงก์บทความด้านล่างนี้ (หากมีขั้นตอนที่ทำไปแล้ว ข้ามไปหัวข้อที่ยังไม่ได้ทำได้เลย)
ครั้งนี้จะสร้าง EC2 Instance (Amazon Linux 2023) และเพิ่ม IAM Role ใน EC2 Instance โดยมีองค์ประกอบดังนี้
เมื่อสร้าง EC2 Instance เสร็จแล้ว ให้ดูที่ IAM Role หากมี IAM Role เพิ่มเข้ามาแบบนี้ ถือว่าการเพิ่ม IAM Role ใน EC2 Instance เสร็จเรียบร้อยครับ
การติดตั้ง CDK และ Softwere ใน EC2 Instance (Amazon Linux 2023)
ครั้งนี้ผมจะติดตั้ง CDK TypeScript project และ Softwere ต่างๆ ที่เกี่ยวข้องในการดำเนินการทั้งหมดลงใน EC2 Instance ผ่าน Session Manager
ก่อนอื่นให้เชื่อมต่อ EC2 Instance ผ่าน Session Manager หากเชื่อมต่อเข้ามาแล้วจะแสดงหน้าจอแบบนี้
แล้วทำการรันคำสั่งต่างๆ ตามด้านล่างนี้ได้เลยครับ
Root access
แล้วรันคำสั่งเข้าใช้งานสิทธิ์ root
sudo su -
และรันคำสั่งเข้าไปที่โฟลเดอร์ ec2-user
ตามนี้ เนื่องจากผมจะ Copy CDK TypeScript project จาก GitHub ลงที่นี่
cd /home/ec2-user
Install Node.js and npm
คำสั่งเพิ่ม NodeSource yum repository
* แนะนำให้ติดตั้งเป็น V.18 เพื่อให้สอดคล้องกับการทำงานของ CDK TypeScript project ที่จะใช้ในครั้งนี้
curl -sL https://rpm.nodesource.com/setup_18.x | sudo bash
คำสั่งติดตั้ง Node.js และ npm
yum install -y nodejs
คำสั่งตรวจสอบเวอร์ชัน Node.js
node -v
คำสั่งตรวจสอบเวอร์ชัน npm
npm -v
Install CDK project
ครั้งนี้จะใช้โปรเจกต์ custom-widget-lambda-sample บน GitHub ติดตั้งลงใน Amazon Linux 2023 ครับ
ก่อนอื่นเราต้องติดตั้ง Git สำหรับ Linux เพื่อให้สามารถใช้คำสั่งของ Git ได้โดยรันคำสั่งตามนี้
yum install git -y
แล้วรันคำสั่ง Clone เพื่อ Copy custom-widget-lambda-sample จาก GitHub ลงใน Amazon Linux 2023 ตามนี้
git clone https://github.com/eetann/custom-widget-lambda-sample.git
แล้วเข้าไปที่โฟลเดอร์โปรเจกต์ custom-widget-lambda-sample
cd custom-widget-lambda-sample
Install the AWS CDK
คำสั่งดาวน์โหลดและติดตั้งแพ็กเกจทั้งหมดไว้ในโฟล์เดอร์ node_modules
npm install
คำสั่งติดตั้ง TypeScript จาก npm ไปยัง Amazon Linux 2023 ของเราในระดับ global
npm install typescript -g
คำสั่งที่ใช้ในการ Compile โค้ดภาษา TypeScript เป็นโค้ดภาษา JavaScript ด้วย TypeScript Compiler (tsc) (คำสั่ง tsc จะใช้เวลารอสักครู่ ให้รอประมาณ 1-2 นาที)
tsc
คำสั่งติดตั้ง AWS CDK จาก npm ไปยัง Amazon Linux 2023 ของเราในระดับ global
npm install -g aws-cdk
คำสั่งตรวจสอบ cdk หากแสดงชุดคำสั่งและคำอธิบายต่างๆ ถือว่าการติดตั้ง cdk สำเร็จ
cdk
คำสั่งตรวจสอบ aws cli หากแสดงชุดคำสั่งต่างๆ ถือว่าการติดตั้ง aws cli สำเร็จ (aws cli จะถูกติดตั้งมาพร้อมกับ cdk)
aws cli
การ Deploy CDK ไปยัง Lambda
รันคำสั่งตามด้านล่างนี้เพื่อให้สามารถ Deploy CDK ไปยัง Lambda ได้ครับ
คำสั่งที่ใช้ในการเปรียบเทียบการเปลี่ยนแปลง (diff) ของ Infrastructure as Code ในโปรเจค CDK ของเรากับ Infrastructure as Code ที่กำลังถูกแยกออกมาอยู่ใน AWS
cdk diff
ผลลัพธ์
Session ID: role_name-xxxxxxxxxx Instance ID: i-xxxxxxxxxx
[root@ip-xx-xx-xx-xx custom-widget-lambda-sample]# cdk diff
Stack CustomWidgetLambdaSampleStack
IAM Statement Changes
┌───┬───────────────────────────────────────┬────────┬────────────────┬──────────────────────────────┬───────────┐
│ │ Resource │ Effect │ Action │ Principal │ Condition │
├───┼───────────────────────────────────────┼────────┼────────────────┼──────────────────────────────┼───────────┤
│ + │ ${CustomWidgetLambda/ServiceRole.Arn} │ Allow │ sts:AssumeRole │ Service:lambda.amazonaws.com │ │
└───┴───────────────────────────────────────┴────────┴────────────────┴──────────────────────────────┴───────────┘
IAM Policy Changes
┌───┬───────────────────────────────────┬────────────────────────────────────────────────────────────────────────────────┐
│ │ Resource │ Managed Policy ARN │
├───┼───────────────────────────────────┼────────────────────────────────────────────────────────────────────────────────┤
│ + │ ${CustomWidgetLambda/ServiceRole} │ arn:${AWS::Partition}:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole │
└───┴───────────────────────────────────┴────────────────────────────────────────────────────────────────────────────────┘
(NOTE: There may be security-related changes not in this list. See https://github.com/aws/aws-cdk/issues/1299)
Parameters
[+] Parameter BootstrapVersion BootstrapVersion: {"Type":"AWS::SSM::Parameter::Value","Default":"/cdk-bootstrap/hnb659fds/version","Description":"Version of the CDK Bootstrap resources in this environment, automatically retrieved from SSM Parameter Store. [cdk:skip]"}
Conditions
[+] Condition CDKMetadata/Condition CDKMetadataAvailable: {"Fn::Or":[{"Fn::Or":[{"Fn::Equals":[{"Ref":"AWS::Region"},"af-south-1"]},{"Fn::Equals":[{"Ref":"AWS::Region"},"ap-east-1"]},{"Fn::Equals":[{"Ref":"AWS::Region"},"ap-northeast-1"]},{"Fn::Equals":[{"Ref":"AWS::Region"},"ap-northeast-2"]},{"Fn::Equals":[{"Ref":"AWS::Region"},"ap-south-1"]},{"Fn::Equals":[{"Ref":"AWS::Region"},"ap-southeast-1"]},{"Fn::Equals":[{"Ref":"AWS::Region"},"ap-southeast-2"]},{"Fn::Equals":[{"Ref":"AWS::Region"},"ca-central-1"]},{"Fn::Equals":[{"Ref":"AWS::Region"},"cn-north-1"]},{"Fn::Equals":[{"Ref":"AWS::Region"},"cn-northwest-1"]}]},{"Fn::Or":[{"Fn::Equals":[{"Ref":"AWS::Region"},"eu-central-1"]},{"Fn::Equals":[{"Ref":"AWS::Region"},"eu-north-1"]},{"Fn::Equals":[{"Ref":"AWS::Region"},"eu-south-1"]},{"Fn::Equals":[{"Ref":"AWS::Region"},"eu-west-1"]},{"Fn::Equals":[{"Ref":"AWS::Region"},"eu-west-2"]},{"Fn::Equals":[{"Ref":"AWS::Region"},"eu-west-3"]},{"Fn::Equals":[{"Ref":"AWS::Region"},"me-south-1"]},{"Fn::Equals":[{"Ref":"AWS::Region"},"sa-east-1"]},{"Fn::Equals":[{"Ref":"AWS::Region"},"us-east-1"]},{"Fn::Equals":[{"Ref":"AWS::Region"},"us-east-2"]}]},{"Fn::Or":[{"Fn::Equals":[{"Ref":"AWS::Region"},"us-west-1"]},{"Fn::Equals":[{"Ref":"AWS::Region"},"us-west-2"]}]}]}
Resources
[+] AWS::IAM::Role CustomWidgetLambda/ServiceRole CustomWidgetLambdaServiceRole2A9E1A93
[+] AWS::Lambda::Function CustomWidgetLambda CustomWidgetLambda25425A83
Other Changes
[+] Unknown Rules: {"CheckBootstrapVersion":{"Assertions":[{"Assert":{"Fn::Not":[{"Fn::Contains":[["1","2","3","4","5"],{"Ref":"BootstrapVersion"}]}]},"AssertDescription":"CDK bootstrap stack version 6 required. Please run 'cdk bootstrap' with a recent version of the CDK CLI."}]}}
[root@ip-xx-xx-xx-xx custom-widget-lambda-sample]#
คำสั่งที่ใช้ในการสังเคราะห์ (Synthesize) รหัสสำหรับ Infrastructure as Code ที่เรากำหนดไว้ในโค้ด CDK ของเราเพื่อสร้างรายการของคำสั่งในรูปแบบของ AWS CloudFormation ซึ่งจะใช้ในการสร้าง Infrastructure as Code ของ AWS ในขั้นตอนต่อไป
cdk synth
คลิกขยายเพื่อดูผลลัพธ์ (เนื่องจาก Code มีความยาว จึงเขียนแบบเต็มไว้ใน details ด้านล่างนี้)
Session ID: role_name-xxxxxxxxxx Instance ID: i-xxxxxxxxxx
[root@ip-xx-xx-xx-xx custom-widget-lambda-sample]# cdk synth
Bundling asset CustomWidgetLambdaSampleStack/CustomWidgetLambda/Code/Stage...
cdk.out/bundling-temp-13170c4874e1d9452093f95c5249dbc6f8bbb6c2d9359d0cec560e24f20aa51f/index.js 3.5kb
⚡ Done in 17ms
Resources:
CustomWidgetLambdaServiceRole2A9E1A93:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Statement:
- Action: sts:AssumeRole
Effect: Allow
Principal:
Service: lambda.amazonaws.com
Version: "2012-10-17"
ManagedPolicyArns:
- Fn::Join:
- ""
- - "arn:"
- Ref: AWS::Partition
- :iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
Metadata:
aws:cdk:path: CustomWidgetLambdaSampleStack/CustomWidgetLambda/ServiceRole/Resource
CustomWidgetLambda25425A83:
Type: AWS::Lambda::Function
Properties:
Code:
S3Bucket:
Fn::Sub: cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}
S3Key: e1ce82a868cbb393e258ad9b82d4d9a80d6763bb3f6e9823c1b5af3e98287dcf.zip
Role:
Fn::GetAtt:
- CustomWidgetLambdaServiceRole2A9E1A93
- Arn
Environment:
Variables:
AWS_NODEJS_CONNECTION_REUSE_ENABLED: "1"
Handler: index.handler
Runtime: nodejs14.x
DependsOn:
- CustomWidgetLambdaServiceRole2A9E1A93
Metadata:
aws:cdk:path: CustomWidgetLambdaSampleStack/CustomWidgetLambda/Resource
aws:asset:path: asset.e1ce82a868cbb393e258ad9b82d4d9a80d6763bb3f6e9823c1b5af3e98287dcf
aws:asset:is-bundled: true
aws:asset:property: Code
CDKMetadata:
Type: AWS::CDK::Metadata
Properties:
Analytics: v2:deflate64:H4sIAAAAAAAA/zWOzQ6CMAyAn4X7qCImehUTjx7wAUjZJik/XUI3PRDe3THi6UubL197gnMJRYZfybUZ8pFaWF4e9aDiqllGnFqDDTtje4FnwiOw9uRYEU6w1G606v7mjauSskER6wVuG+IMVdCD9RWKVXsNov1vrCp58WJH3KWOFRdmnZp3x4Z2bfsAejl8iisUFzhmvRDlc2BPk4V65w+M1M+4zQAAAA==
Metadata:
aws:cdk:path: CustomWidgetLambdaSampleStack/CDKMetadata/Default
Condition: CDKMetadataAvailable
Conditions:
CDKMetadataAvailable:
Fn::Or:
- Fn::Or:
- Fn::Equals:
- Ref: AWS::Region
- af-south-1
- Fn::Equals:
- Ref: AWS::Region
- ap-east-1
- Fn::Equals:
- Ref: AWS::Region
- ap-northeast-1
- Fn::Equals:
- Ref: AWS::Region
- ap-northeast-2
- Fn::Equals:
- Ref: AWS::Region
- ap-south-1
- Fn::Equals:
- Ref: AWS::Region
- ap-southeast-1
- Fn::Equals:
- Ref: AWS::Region
- ap-southeast-2
- Fn::Equals:
- Ref: AWS::Region
- ca-central-1
- Fn::Equals:
- Ref: AWS::Region
- cn-north-1
- Fn::Equals:
- Ref: AWS::Region
- cn-northwest-1
- Fn::Or:
- Fn::Equals:
- Ref: AWS::Region
- eu-central-1
- Fn::Equals:
- Ref: AWS::Region
- eu-north-1
- Fn::Equals:
- Ref: AWS::Region
- eu-south-1
- Fn::Equals:
- Ref: AWS::Region
- eu-west-1
- Fn::Equals:
- Ref: AWS::Region
- eu-west-2
- Fn::Equals:
- Ref: AWS::Region
- eu-west-3
- Fn::Equals:
- Ref: AWS::Region
- me-south-1
- Fn::Equals:
- Ref: AWS::Region
- sa-east-1
- Fn::Equals:
- Ref: AWS::Region
- us-east-1
- Fn::Equals:
- Ref: AWS::Region
- us-east-2
- Fn::Or:
- Fn::Equals:
- Ref: AWS::Region
- us-west-1
- Fn::Equals:
- Ref: AWS::Region
- us-west-2
Parameters:
BootstrapVersion:
Type: AWS::SSM::Parameter::Value
Default: /cdk-bootstrap/hnb659fds/version
Description: Version of the CDK Bootstrap resources in this environment, automatically retrieved from SSM Parameter Store. [cdk:skip]
Rules:
CheckBootstrapVersion:
Assertions:
- Assert:
Fn::Not:
- Fn::Contains:
- - "1"
- "2"
- "3"
- "4"
- "5"
- Ref: BootstrapVersion
AssertDescription: CDK bootstrap stack version 6 required. Please run 'cdk bootstrap' with a recent version of the CDK CLI.
[root@ip-xx-xx-xx-xx custom-widget-lambda-sample]#
คำสั่งที่ใช้ในกระบวนการสร้าง Infrastructure as Code ที่เราได้กำหนดไว้ในโค้ด CDK ของเราและนำไปสร้างขึ้นในบัญชี AWS
เมื่อรันคำสั่งไปแล้ว จะมีข้อความว่า "Do you wish to deploy these changes (y/n)?" ให้พิมพ์ y
cdk deploy
คลิกขยายเพื่อดูผลลัพธ์ (เนื่องจาก Code มีความยาว จึงเขียนแบบเต็มไว้ใน details ด้านล่างนี้)
Session ID: role_name-xxxxxxxxxx Instance ID: i-xxxxxxxxxx
[root@ip-xx-xx-xx-xx custom-widget-lambda-sample]# cdk deploy
Bundling asset CustomWidgetLambdaSampleStack/CustomWidgetLambda/Code/Stage...
cdk.out/bundling-temp-13170c4874e1d9452093f95c5249dbc6f8bbb6c2d9359d0cec560e24f20aa51f/index.js 3.5kb
⚡ Done in 14ms
✨ Synthesis time: 15.98s
CustomWidgetLambdaSampleStack: start: Building 5a2ca64b9b5951291833d60cb403e9e71fc9947ac5d885f84540185594452af8:current_account-current_region
CustomWidgetLambdaSampleStack: success: Built 5a2ca64b9b5951291833d60cb403e9e71fc9947ac5d885f84540185594452af8:current_account-current_region
CustomWidgetLambdaSampleStack: start: Publishing 5a2ca64b9b5951291833d60cb403e9e71fc9947ac5d885f84540185594452af8:current_account-current_region
CustomWidgetLambdaSampleStack: success: Published 5a2ca64b9b5951291833d60cb403e9e71fc9947ac5d885f84540185594452af8:current_account-current_region
This deployment will make potentially sensitive changes according to your current security approval level (--require-approval broadening).
Please confirm you intend to make the following modifications:
IAM Statement Changes
┌───┬───────────────────────────────────────┬────────┬────────────────┬──────────────────────────────┬───────────┐
│ │ Resource │ Effect │ Action │ Principal │ Condition │
├───┼───────────────────────────────────────┼────────┼────────────────┼──────────────────────────────┼───────────┤
│ + │ ${CustomWidgetLambda/ServiceRole.Arn} │ Allow │ sts:AssumeRole │ Service:lambda.amazonaws.com │ │
└───┴───────────────────────────────────────┴────────┴────────────────┴──────────────────────────────┴───────────┘
IAM Policy Changes
┌───┬───────────────────────────────────┬────────────────────────────────────────────────────────────────────────────────┐
│ │ Resource │ Managed Policy ARN │
├───┼───────────────────────────────────┼────────────────────────────────────────────────────────────────────────────────┤
│ + │ ${CustomWidgetLambda/ServiceRole} │ arn:${AWS::Partition}:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole │
└───┴───────────────────────────────────┴────────────────────────────────────────────────────────────────────────────────┘
(NOTE: There may be security-related changes not in this list. See https://github.com/aws/aws-cdk/issues/1299)
Do you wish to deploy these changes (y/n)? y
CustomWidgetLambdaSampleStack: deploying... [1/1]
CustomWidgetLambdaSampleStack: creating CloudFormation changeset...
✅ CustomWidgetLambdaSampleStack
✨ Deployment time: 51.76s
Stack ARN:
arn:aws:cloudformation:ap-southeast-1:xxxxxxxxxx:stack/CustomWidgetLambdaSampleStack/3d9b4bf0-2d2d-11ee-8c8e-0a71fcee1a86
✨ Total time: 67.74s
[root@ip-xx-xx-xx-xx custom-widget-lambda-sample]#
ตรวจสอบ CDK TypeScript project ใน Lambda
ก่อนอื่นให้เข้าไปที่ Service "CloudFormation > Stacks"
ค้นหาและคลิก Stacks ของเรา เช่น CustomWidgetLambdaSampleStack
แล้วจะมีข้อมูลการ Deploy แสดงที่หน้าต่างด้านขวา ให้เลือกแท็บ Resources
แล้วคลิกขยายที่ +
CustomWidgetLambda ในคอลัมน์ Logical ID
แล้วคลิกลิงก์ในคอลัมน์ Physical ID เพื่อเข้าไปหน้าจอ Lambda functions
เมื่อเข้ามาหน้าจอ Lambda functions แล้ว จะแสดงหน้าจอแบบนี้
แล้วเลื่อนลงมาด้านล่าง ก็จะเห็นข้อมูลในแท็บต่างๆ
เพียงเท่านี้เราก็สามารถ Deploy CDK TypeScript project เพื่อสร้าง Lambda ผ่าน EC2 Instance (Amazon Linux 2023) สำเร็จได้อย่างง่ายดายครับ
การลบ AWS Resource
AWS Resource ที่จะลบทั้งหมดมีดังนี้
Service name | Function name |
---|---|
CloudFormation | Stacks |
Lambda | Functions |
EC2 | Instances |
IAM | Roles |
ผมจะแนะวิธีการลบ Resource ต่างๆ ที่แสดงอยู่ในตาราง Function name ด้านบนดังนี้
การลบ Stacks ใน CloudFormation
เข้าไปที่ Service "CloudFormation > Stacks" ค้นหาและเลือกอันที่ต้องการลบ คลิก Delete
และยืนยันการลบตามคำแนะนำ
สำหรับการลบ Functions ใน Lambda เราไม่จำเป็นต้องไปลบเอง เพราะหลังจากที่ลบ Stacks ใน CloudFormation เสร็จแล้ว
Functions
ใน Lambda จะถูกลบออกโดยอัตโนมัติครับ
การ Terminate Instances ใน EC2
ดูตัวอย่างการ Terminate Instances ได้ที่ลิงก์ด้านล่างนี้
การลบ Roles ใน IAM
เข้าไปที่ Service "IAM > Roles" ค้นหาและเลือกอันที่ต้องการลบ คลิก Delete
และยืนยันการลบตามคำแนะนำ
สรุป
CDK เป็นเครื่องมือที่ทำให้การสร้างและจัดการ Lambda functions ง่ายและมีประสิทธิภาพ โดยทำให้นักพัฒนาสามารถเขียนโค้ดที่เข้าใจได้ง่ายและสร้างสถาปัตยกรรมของ AWS ที่มีประสิทธิภาพและสามารถนำไปใช้งานได้จริง
ผมหวังว่าบทความนี้จะเป็นประโยชน์ให้กับผู้อ่านได้นะครับ