AWSLambda: Ability to customize Dockers' data dir (#6084)
This commit is contained in:
parent
5eef06ee51
commit
851f0c1181
@ -59,8 +59,6 @@ from tempfile import TemporaryDirectory
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
docker_3 = docker.__version__[0] >= "3"
|
||||
|
||||
|
||||
def zip2tar(zip_bytes: bytes) -> bytes:
|
||||
with TemporaryDirectory() as td:
|
||||
@ -127,11 +125,7 @@ class _DockerDataVolumeContext:
|
||||
self._vol_ref.volume = self._lambda_func.docker_client.volumes.create(
|
||||
self._lambda_func.code_digest
|
||||
)
|
||||
volumes = {
|
||||
self.name: {"bind": "/tmp/data", "mode": "rw"}
|
||||
if docker_3
|
||||
else "/tmp/data"
|
||||
}
|
||||
volumes = {self.name: {"bind": settings.LAMBDA_DATA_DIR, "mode": "rw"}}
|
||||
|
||||
self._lambda_func.docker_client.images.pull(
|
||||
":".join(parse_image_ref("alpine"))
|
||||
@ -141,7 +135,7 @@ class _DockerDataVolumeContext:
|
||||
)
|
||||
try:
|
||||
tar_bytes = zip2tar(self._lambda_func.code_bytes)
|
||||
container.put_archive("/tmp/data", tar_bytes)
|
||||
container.put_archive(settings.LAMBDA_DATA_DIR, tar_bytes)
|
||||
finally:
|
||||
container.remove(force=True)
|
||||
|
||||
@ -801,14 +795,11 @@ class LambdaFunction(CloudFormationModel, DockerModel):
|
||||
finally:
|
||||
if container:
|
||||
try:
|
||||
exit_code = container.wait(timeout=300)
|
||||
exit_code = container.wait(timeout=300)["StatusCode"]
|
||||
except requests.exceptions.ReadTimeout:
|
||||
exit_code = -1
|
||||
container.stop()
|
||||
container.kill()
|
||||
else:
|
||||
if docker_3:
|
||||
exit_code = exit_code["StatusCode"]
|
||||
|
||||
output = container.logs(stdout=False, stderr=True)
|
||||
output += container.logs(stdout=True, stderr=False)
|
||||
@ -1514,6 +1505,12 @@ class LambdaBackend(BaseBackend):
|
||||
|
||||
MOTO_DOCKER_LAMBDA_IMAGE=mlupin/docker-lambda
|
||||
|
||||
Use the following environment variable if you want to configure the data directory used by the Docker containers:
|
||||
|
||||
.. sourcecode:: bash
|
||||
|
||||
MOTO_LAMBDA_DATA_DIR=/tmp/data
|
||||
|
||||
.. note:: When using the decorators, a Docker container cannot reach Moto, as the Docker-container loses all mock-context. Any boto3-invocations used within your Lambda will try to connect to AWS.
|
||||
"""
|
||||
|
||||
|
@ -35,6 +35,8 @@ PRETTIFY_RESPONSES = bool(os.environ.get("MOTO_PRETTIFY_RESPONSES", False))
|
||||
# Fully skip test that require docker
|
||||
SKIP_REQUIRES_DOCKER = bool(os.environ.get("TESTS_SKIP_REQUIRES_DOCKER", False))
|
||||
|
||||
LAMBDA_DATA_DIR = os.environ.get("MOTO_LAMBDA_DATA_DIR", "/tmp/data")
|
||||
|
||||
|
||||
def get_sf_execution_history_type():
|
||||
"""
|
||||
|
14
setup.cfg
14
setup.cfg
@ -44,7 +44,7 @@ include_package_data = True
|
||||
all =
|
||||
python-jose[cryptography]>=3.1.0,<4.0.0
|
||||
ecdsa!=0.15
|
||||
docker>=2.5.1
|
||||
docker>=3.0.0
|
||||
graphql-core
|
||||
PyYAML>=5.1
|
||||
cfn-lint>=0.40.0
|
||||
@ -57,7 +57,7 @@ all =
|
||||
server =
|
||||
python-jose[cryptography]>=3.1.0,<4.0.0
|
||||
ecdsa!=0.15
|
||||
docker>=2.5.1
|
||||
docker>=3.0.0
|
||||
graphql-core
|
||||
PyYAML>=5.1
|
||||
cfn-lint>=0.40.0
|
||||
@ -82,15 +82,15 @@ applicationautoscaling =
|
||||
appsync = graphql-core
|
||||
athena =
|
||||
autoscaling =
|
||||
awslambda = docker>=2.5.1
|
||||
batch = docker>=2.5.1
|
||||
awslambda = docker>=3.0.0
|
||||
batch = docker>=3.0.0
|
||||
batch_simple =
|
||||
budgets =
|
||||
ce =
|
||||
cloudformation =
|
||||
python-jose[cryptography]>=3.1.0,<4.0.0
|
||||
ecdsa!=0.15
|
||||
docker>=2.5.1
|
||||
docker>=3.0.0
|
||||
graphql-core
|
||||
PyYAML>=5.1
|
||||
cfn-lint>=0.40.0
|
||||
@ -118,8 +118,8 @@ datasync =
|
||||
dax =
|
||||
dms =
|
||||
ds = sshpubkeys>=3.1.0
|
||||
dynamodb = docker>=2.5.1
|
||||
dynamodbstreams = docker>=2.5.1
|
||||
dynamodb = docker>=3.0.0
|
||||
dynamodbstreams = docker>=3.0.0
|
||||
ebs = sshpubkeys>=3.1.0
|
||||
ec2 = sshpubkeys>=3.1.0
|
||||
ec2instanceconnect =
|
||||
|
Loading…
Reference in New Issue
Block a user