GitHub Action for deploying Lambda code to an existing function
Upload zip file to AWS Lambda function.
name: deploy to lambda
on: [push]
jobs:
deploy_zip:
name: deploy lambda function
runs-on: ubuntu-latest
strategy:
matrix:
go-version: [1.21]
steps:
- name: checkout source code
uses: actions/checkout@v3
- name: Install Go
uses: actions/setup-go@v1
with:
go-version: ${{ matrix.go-version }}
- name: Build binary
run: |
cd example && CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -v -a -o main main.go && zip deployment.zip main
- name: default deploy
uses: appleboy/lambda-action@v0.2.0
with:
aws_access_key_id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws_secret_access_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws_region: ${{ secrets.AWS_REGION }}
function_name: gorush
zip_file: example/deployment.zip
memory_size: 128
timeout: 10
handler: foobar
role: arn:aws:iam::xxxxxxxxxxx:role/test1234
runtime: nodejs12.x
Deploy lambda function with source file
name: deploy to lambda
on: [push]
jobs:
deploy_source:
name: deploy lambda from source
runs-on: ubuntu-latest
steps:
- name: checkout source code
uses: actions/checkout@v3
- name: default deploy
uses: appleboy/lambda-action@v0.2.0
with:
aws_access_key_id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws_secret_access_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws_region: ${{ secrets.AWS_REGION }}
function_name: gorush
source: example/index.js
Set dry run mode to validate the request parameters and access permissions without modifying the function code.
name: deploy to lambda
on: [push]
jobs:
deploy:
name: deploy lambda function
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: AWS Lambda Deploy
uses: appleboy/lambda-action@v0.2.0
with:
aws_access_key_id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws_secret_access_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws_region: ${{ secrets.AWS_REGION }}
function_name: gorush
zip_file: output.zip
dry_run: true
Deploy from a specific branch, master
or release
.
name: deploy to lambda
on: [push]
jobs:
deploy:
name: deploy lambda function
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: AWS Lambda Deploy
if: github.ref == 'refs/heads/master'
uses: appleboy/lambda-action@v0.2.0
with:
aws_access_key_id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws_secret_access_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws_region: ${{ secrets.AWS_REGION }}
function_name: gorush
zip_file: output.zip
dry_run: true
Add multiple environment:
name: deploy to lambda
on: [push]
jobs:
deploy:
name: deploy lambda function
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: AWS Lambda Deploy
if: github.ref == 'refs/heads/master'
uses: appleboy/lambda-action@v0.2.0
with:
aws_access_key_id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws_secret_access_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws_region: ${{ secrets.AWS_REGION }}
function_name: gorush
zip_file: output.zip
dry_run: true
+ environment: foo=bar,author=appleboy
See action.yml for more detailed information.
false
).true
).arn:(aws[a-zA-Z-]*)?:iam::\d{12}:role/?[a-zA-Z_0-9+=,.@\-_/]+
nodejs | nodejs4.3 | nodejs6.10 | nodejs8.10 | nodejs10.x | nodejs12.x | nodejs14.x | nodejs16.x | java8 | java8.al2 | java11 | python2.7 | python3.6 | python3.7 | python3.8 | python3.9 | dotnetcore1.0 | dotnetcore2.0 | dotnetcore2.1 | dotnetcore3.1 | dotnet6 | nodejs4.3-edge | go1.x | ruby2.5 | ruby2.7 | provided | provided.al2 | nodejs18.x
foo=bar,author=appleboy
Active
to sample and trace a subset of incoming requests with X-Ray.arm64 | x86_64
See the UpdateFunctionConfiguration for detail information.
Add the following AWS policy if you want to integrate with GitHub Actions. Please change REGION
, ACCOUNT
and LAMBDA_NAME
variable to your specfic data.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"iam:ListRoles",
"lambda:UpdateFunctionCode",
"lambda:CreateFunction",
"lambda:GetFunction",
"lambda:UpdateFunctionConfiguration",
"lambda:GetFunctionConfiguration"
],
"Resource": "arn:aws:lambda:${REGION}:${ACCOUNT}:function:${LAMBDA_NAME}"
}
]
}
Our function needs permission to upload trace data to X-Ray. When you activate tracing in the Lambda console, Lambda adds the required permissions to your function's execution role. Otherwise, add the AWSXRayDaemonWriteAccess policy to the execution role.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"xray:PutTraceSegments",
"xray:PutTelemetryRecords",
"xray:GetSamplingRules",
"xray:GetSamplingTargets",
"xray:GetSamplingStatisticSummaries"
],
"Resource": [
"*"
]
}
]
}