Skip to content

Commit fc16d73

Browse files
committed
Fix build lambda layer issue
1 parent 6214220 commit fc16d73

1 file changed

Lines changed: 49 additions & 17 deletions

File tree

utils/build/docker/python_lambda/build_lambda_layer.sh

Lines changed: 49 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,25 +4,69 @@ set -euo pipefail
44

55
ARCH=${ARCH:-$(uname -m)}
66
PYTHON_VERSION=${PYTHON_VERSION:-3.13}
7+
PYTHON_VERSION_NO_DOT=$(echo "$PYTHON_VERSION" | cut -d'.' -f1-2)
78

89
if [ "$ARCH" = "x86_64" ]; then
910
ARCH="amd64"
1011
fi
12+
if [ "$ARCH" = "aarch64" ]; then
13+
ARCH="arm64"
14+
fi
1115

1216
cd binaries
1317

1418
SKIP_BUILD=0
15-
CLONED_REPO=0
19+
20+
# Reexport all SYSTEM_TESTS_AWS_* variables as AWS_* variables
21+
for var in $(compgen -v SYSTEM_TESTS_AWS_); do
22+
export "${var/SYSTEM_TESTS_AWS_/AWS_}"
23+
done
24+
echo "Following AWS variables are set:"
25+
env | grep '^AWS_'
1626

1727
if [ -e "datadog-lambda-python" ]; then
1828
echo "datadog-lambda-python already exists, skipping clone."
1929
elif [ "$(find . -maxdepth 1 -name "*.zip" | wc -l)" = "1" ]; then
2030
echo "Using provided datadog-lambda-python layer."
2131
SKIP_BUILD=1
32+
elif command -v aws >/dev/null 2>&1 && aws sts get-caller-identity >/dev/null 2>&1; then
33+
echo "AWS credentials detected. Downloading datadog-lambda-python layer from AWS..."
34+
REGION=${AWS_DEFAULT_REGION:-us-east-1}
35+
ARCH_SUFFIX=$(if [ "$ARCH" = "arm64" ]; then echo "-ARM"; else echo ""; fi)
36+
LAMBDA_LAYER_NAME="arn:aws:lambda:$REGION:464622532012:layer:Datadog-Python$PYTHON_VERSION_NO_DOT$ARCH_SUFFIX"
37+
38+
# Get the latest layer version
39+
LAYER_VERSION=$(aws lambda list-layer-versions \
40+
--layer-name "$LAMBDA_LAYER_NAME" \
41+
--query 'LayerVersions[0].Version' \
42+
--output text \
43+
--region "$REGION")
44+
45+
if [ "$LAYER_VERSION" != "None" ] && [ -n "$LAYER_VERSION" ]; then
46+
echo "Downloading layer version $LAYER_VERSION for $LAMBDA_LAYER_NAME from region $REGION"
47+
48+
# Get the download URL
49+
DOWNLOAD_URL=$(aws lambda get-layer-version \
50+
--layer-name "$LAMBDA_LAYER_NAME" \
51+
--version-number "$LAYER_VERSION" \
52+
--query 'Content.Location' \
53+
--output text \
54+
--region "$REGION")
55+
56+
if [ -n "$DOWNLOAD_URL" ] && [ "$DOWNLOAD_URL" != "None" ]; then
57+
# Download the layer
58+
curl -L "$DOWNLOAD_URL" -o "datadog_lambda_py-${ARCH}-${PYTHON_VERSION}.zip"
59+
echo "Successfully downloaded datadog-lambda-python layer from AWS"
60+
SKIP_BUILD=1
61+
else
62+
echo "Failed to get download URL for layer. Falling back to git clone..."
63+
fi
64+
else
65+
echo "No layer version found. Falling back to git clone..."
66+
fi
2267
else
23-
echo "Cloning datadog-lambda-python repository..."
24-
git clone --depth 1 https://github.com/DataDog/datadog-lambda-python.git
25-
CLONED_REPO=1
68+
echo "Impossible to download datadog-lambda-python layer from AWS and no local layer provided, Aborting."
69+
exit 1
2670
fi
2771

2872
# Patch the ddtrace dependency in datadog-lambda-python based on the same rules as install_ddtrace.sh
@@ -78,22 +122,10 @@ if [[ $SKIP_BUILD -eq 0 ]]; then
78122
fi
79123
# Build the datadog-lambda-python package
80124
cd datadog-lambda-python
81-
ARCH=$ARCH PYTHON_VERSION=$PYTHON_VERSION ./scripts/build_layers.sh
125+
ARCH=$ARCH PYTHON_VERSION=$PYTHON_VERSION bash ./scripts/build_layers.sh
82126

83127
mv .layers/*.zip ../
84128
cd ..
85-
86-
# Clean up the datadog-lambda-python directory
87-
if [ "$CLONED_REPO" -eq 1 ]; then
88-
echo "Removing datadog-lambda-python directory..."
89-
rm -rf datadog-lambda-python
90-
else
91-
# Restore the original pyproject.toml if it was not cloned
92-
cd datadog-lambda-python
93-
git checkout -- pyproject.toml
94-
rm -rf dd-trace-py ./*.whl
95-
cd ..
96-
fi
97129
fi
98130

99131
cd ..

0 commit comments

Comments
 (0)