@@ -4,25 +4,69 @@ set -euo pipefail
44
55ARCH=${ARCH:- $(uname -m)}
66PYTHON_VERSION=${PYTHON_VERSION:- 3.13}
7+ PYTHON_VERSION_NO_DOT=$( echo " $PYTHON_VERSION " | cut -d' .' -f1-2)
78
89if [ " $ARCH " = " x86_64" ]; then
910 ARCH=" amd64"
1011fi
12+ if [ " $ARCH " = " aarch64" ]; then
13+ ARCH=" arm64"
14+ fi
1115
1216cd binaries
1317
1418SKIP_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
1727if [ -e " datadog-lambda-python" ]; then
1828 echo " datadog-lambda-python already exists, skipping clone."
1929elif [ " $( 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
2267else
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
2670fi
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
97129fi
98130
99131cd ..
0 commit comments