Next step, we need to create a CodeBuild Project to integrate with github webhook to auto deploy lambda functions when a new commit is detected.
Go to https://us-east-1.console.aws.amazon.com/codesuite/codebuild/start?region=us-east-1
Click Create project
Fill your Project configuration, Source
Choose source: S3/GitHub, at here we choose GitHub
At Environment, we select lambda to build image
Choose Operating system: Amazon Lunix
Choose Runtime(s): Java 11
Choose Image: aws/codebuild/amazonlinux-aarch64-lambda-standard:corretto11
On Buildspec we select Insert build commands and choose Switch to editor
It see like this, now we need config pipeline using code below to build successfully project
version: 0.2
phases:
install:
runtime-versions:
java: corretto11
maven: 3.9.6
# commands:
# - export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")
# - export PATH=$JAVA_HOME/bin:$PATH
build:
commands:
- ls
- cd note-app-serverless/aws-serverless-note-app
- ls -lrt
- mvn clean package -DskipTests=true
- ls
# Upload JAR file to S3
- aws s3 cp target/aws-serverless-note-app-0.0.1-SNAPSHOT.jar s3://cf-templates-1ohbdpx0bstp8-us-east-1/aws-serverless-note-app-0.0.1-SNAPSHOT.jar
- aws lambda update-function-code --function-name LambdaAddDataFunction --s3-bucket cf-templates-1ohbdpx0bstp8-us-east-1 --s3-key aws-serverless-note-app-0.0.1-SNAPSHOT.jar
- aws lambda update-function-code --function-name LambdaDeleteNote --s3-bucket cf-templates-1ohbdpx0bstp8-us-east-1 --s3-key aws-serverless-note-app-0.0.1-SNAPSHOT.jar
- aws lambda update-function-code --function-name LambdaFetchDataFunction --s3-bucket cf-templates-1ohbdpx0bstp8-us-east-1 --s3-key aws-serverless-note-app-0.0.1-SNAPSHOT.jar
- echo 'Successfully Build new version'
aws s3 cp target/aws-serverless-note-app-0.0.1-SNAPSHOT.jar s3://cf-templates-1ohbdpx0bstp8-us-east-1/aws-serverless-note-app-0.0.1-SNAPSHOT.jar
Explain: This command have meaning is coppy .jar file to S3 bucket
aws lambda update-function-code –function-name LambdaDeleteNote –s3-bucket cf-templates-1ohbdpx0bstp8-us-east-1 –s3-key aws-serverless-note-app-0.0.1-SNAPSHOT.jar
Explain: This command have meaning is update source for lambda funtion LambdaDeleteNote from jar file, you have puted in s3
We have complete 4 steps:
Now, almost set up done, we will test by publish new commit change and pipeline auto execution
Now, inspect source code and make any change to test pipeline work correctly.
luongtx@daotq1:~/Workspace/GITHUB/aws-handson$ git status
On branch main
Your branch is up to date with 'origin/main'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: note-app-serverless/aws-resource/code-deploy/pipeline.yaml
no changes added to commit (use "git add" and/or "git commit -a")
luongtx@daotq1:~/Workspace/GITHUB/aws-handson$ git add .
luongtx@daotq1:~/Workspace/GITHUB/aws-handson$ git commit -m "test: pipeline auto build"
[main ac6d839] test: pipeline auto build
1 file changed, 1 insertion(+), 1 deletion(-)
luongtx@daotq1:~/Workspace/GITHUB/aws-handson$ git push
Enumerating objects: 11, done.
Counting objects: 100% (11/11), done.
Delta compression using up to 12 threads
Compressing objects: 100% (5/5), done.
Writing objects: 100% (6/6), 553 bytes | 184.00 KiB/s, done.
Total 6 (delta 2), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (2/2), completed with 2 local objects.
To github.com:daotq2000/aws-handson.git
2bfe657..ac6d839 main -> main
Open your CodeBuild Project and Click to detail and view the build console.
If you received response below, pipeline already build completed and lambda function have been update.
[Container] 2024/03/05 04:33:08.400929 Running command aws lambda update-function-code --function-name LambdaAddDataFunction --s3-bucket cf-templates-1ohbdpx0bstp8-us-east-1 --s3-key aws-serverless-note-app-0.0.1-SNAPSHOT.jar
{
"FunctionName": "LambdaAddDataFunction",
"FunctionArn": "arn:aws:lambda:us-east-1:846338211683:function:LambdaAddDataFunction",
"Runtime": "java11",
"Role": "arn:aws:iam::846338211683:role/LambdaFunctionRole",
"Handler": "org.example.awsserverlessnoteapp.LambdaAddDataFunction::handleRequest",
"CodeSize": 18081570,
"Description": "",
"Timeout": 15,
"MemorySize": 512,
"LastModified": "2024-03-05T04:33:10.000+0000",
"CodeSha256": "54cOLGA6bBmBfrbZkb6trotsuPRfB1fAhwGikbmJyxs=",
"Version": "$LATEST",
"VpcConfig": {
"SubnetIds": [
"subnet-0b31adde22bcc2d4e"
],
"SecurityGroupIds": [
"sg-069f0598b55c8a6b8"
],
"VpcId": "vpc-0bdac14c978619a96",
"Ipv6AllowedForDualStack": false
},
"Environment": {
"Variables": {
"AWS_REGION_VALUE": "us-east-1",
"AWS_DYNAMO_TABLE_NAME_VALUE": "note_tbl"
}
},
"TracingConfig": {
"Mode": "PassThrough"
},
"RevisionId": "2a239e66-937d-405e-974c-549767398c1f",
"State": "Active",
"LastUpdateStatus": "InProgress",
"LastUpdateStatusReason": "The function is being created.",
"LastUpdateStatusReasonCode": "Creating",
"PackageType": "Zip",
"Architectures": [
"x86_64"
],
"EphemeralStorage": {
"Size": 512
},
"SnapStart": {
"ApplyOn": "None",
"OptimizationStatus": "Off"
},
"RuntimeVersionConfig": {
"RuntimeVersionArn": "arn:aws:lambda:us-east-1::runtime:5376f7691b03f8ade18032dc3906c8e0e7a4101c665b17c8766b6949687df24f"
}
}
[Container] 2024/03/05 04:33:10.259486 Running command aws lambda update-function-code --function-name LambdaDeleteNote --s3-bucket cf-templates-1ohbdpx0bstp8-us-east-1 --s3-key aws-serverless-note-app-0.0.1-SNAPSHOT.jar
{
"FunctionName": "LambdaDeleteNote",
"FunctionArn": "arn:aws:lambda:us-east-1:846338211683:function:LambdaDeleteNote",
"Runtime": "java11",
"Role": "arn:aws:iam::846338211683:role/service-role/LambdaDeleteNote-role-fa4amiiz",
"Handler": "org.example.awsserverlessnoteapp.LambdaDeleteDataFunction::handleRequest",
"CodeSize": 18081570,
"Description": "",
"Timeout": 15,
"MemorySize": 512,
"LastModified": "2024-03-05T04:33:11.000+0000",
"CodeSha256": "54cOLGA6bBmBfrbZkb6trotsuPRfB1fAhwGikbmJyxs=",
"Version": "$LATEST",
"VpcConfig": {
"SubnetIds": [
"subnet-0b31adde22bcc2d4e"
],
"SecurityGroupIds": [
"sg-069f0598b55c8a6b8"
],
"VpcId": "vpc-0bdac14c978619a96",
"Ipv6AllowedForDualStack": false
},
"Environment": {
"Variables": {
"AWS_REGION_VALUE": "us-east-1",
"AWS_DYNAMO_TABLE_NAME_VALUE": "note_tbl"
}
},
"TracingConfig": {
"Mode": "PassThrough"
},
"RevisionId": "d1559a95-7b4d-4c7c-a8d3-3b95ead46cae",
"State": "Active",
"LastUpdateStatus": "InProgress",
"LastUpdateStatusReason": "The function is being created.",
"LastUpdateStatusReasonCode": "Creating",
"PackageType": "Zip",
"Architectures": [
"arm64"
],
"EphemeralStorage": {
"Size": 512
},
"SnapStart": {
"ApplyOn": "None",
"OptimizationStatus": "Off"
},
"RuntimeVersionConfig": {
"RuntimeVersionArn": "arn:aws:lambda:us-east-1::runtime:4953353514423cc08453f25c28e74edd762626ff6bf2abe0c78c5a0e5be8547a"
}
}
[Container] 2024/03/05 04:33:11.791342 Running command aws lambda update-function-code --function-name LambdaFetchDataFunction --s3-bucket cf-templates-1ohbdpx0bstp8-us-east-1 --s3-key aws-serverless-note-app-0.0.1-SNAPSHOT.jar
{
"FunctionName": "LambdaFetchDataFunction",
"FunctionArn": "arn:aws:lambda:us-east-1:846338211683:function:LambdaFetchDataFunction",
"Runtime": "java11",
"Role": "arn:aws:iam::846338211683:role/LambdaFunctionRole",
"Handler": "org.example.awsserverlessnoteapp.LambdaFetchDataFunction::handleRequest",
"CodeSize": 18081570,
"Description": "",
"Timeout": 15,
"MemorySize": 512,
"LastModified": "2024-03-05T04:33:13.000+0000",
"CodeSha256": "54cOLGA6bBmBfrbZkb6trotsuPRfB1fAhwGikbmJyxs=",
"Version": "$LATEST",
"VpcConfig": {
"SubnetIds": [
"subnet-0b31adde22bcc2d4e"
],
"SecurityGroupIds": [
"sg-069f0598b55c8a6b8"
],
"VpcId": "vpc-0bdac14c978619a96",
"Ipv6AllowedForDualStack": false
},
"Environment": {
"Variables": {
"AWS_REGION_VALUE": "us-east-1",
"AWS_DYNAMO_TABLE_NAME_VALUE": "note_tbl"
}
},
"TracingConfig": {
"Mode": "PassThrough"
},
"RevisionId": "9254245f-4d87-42ef-a500-751bee1325b0",
"State": "Active",
"LastUpdateStatus": "InProgress",
"LastUpdateStatusReason": "The function is being created.",
"LastUpdateStatusReasonCode": "Creating",
"PackageType": "Zip",
"Architectures": [
"arm64"
],
"EphemeralStorage": {
"Size": 512
},
"SnapStart": {
"ApplyOn": "None",
"OptimizationStatus": "Off"
},
"RuntimeVersionConfig": {
"RuntimeVersionArn": "arn:aws:lambda:us-east-1::runtime:4953353514423cc08453f25c28e74edd762626ff6bf2abe0c78c5a0e5be8547a"
}
}