AWSLambda: Try to pull images from multiple repositories (#5895)
This commit is contained in:
parent
4ed8b93e18
commit
c1d85a005d
@ -765,9 +765,27 @@ class LambdaFunction(CloudFormationModel, DockerModel):
|
|||||||
"host.docker.internal": "host-gateway"
|
"host.docker.internal": "host-gateway"
|
||||||
}
|
}
|
||||||
|
|
||||||
image_repo = settings.moto_lambda_image()
|
# The requested image can be found in one of a few repos:
|
||||||
image_ref = f"{image_repo}:{self.run_time}"
|
# - User-provided repo
|
||||||
self.docker_client.images.pull(":".join(parse_image_ref(image_ref)))
|
# - mlupin/docker-lambda (the repo with up-to-date AWSLambda images
|
||||||
|
# - lambci/lambda (the repo with older/outdated AWSLambda images
|
||||||
|
#
|
||||||
|
# We'll cycle through all of them - when we find the repo that contains our image, we use it
|
||||||
|
image_repos = set(
|
||||||
|
[
|
||||||
|
settings.moto_lambda_image(),
|
||||||
|
"mlupin/docker-lambda",
|
||||||
|
"lambci/lambda",
|
||||||
|
]
|
||||||
|
)
|
||||||
|
for image_repo in image_repos:
|
||||||
|
image_ref = f"{image_repo}:{self.run_time}"
|
||||||
|
full_ref = ":".join(parse_image_ref(image_ref))
|
||||||
|
try:
|
||||||
|
self.docker_client.images.pull(full_ref)
|
||||||
|
break
|
||||||
|
except docker.errors.NotFound:
|
||||||
|
pass
|
||||||
container = self.docker_client.containers.run(
|
container = self.docker_client.containers.run(
|
||||||
image_ref,
|
image_ref,
|
||||||
[self.handler, json.dumps(event)],
|
[self.handler, json.dumps(event)],
|
||||||
@ -1483,13 +1501,18 @@ class LambdaBackend(BaseBackend):
|
|||||||
# Note that this option will be ignored if MOTO_DOCKER_NETWORK_NAME is also set
|
# Note that this option will be ignored if MOTO_DOCKER_NETWORK_NAME is also set
|
||||||
MOTO_DOCKER_NETWORK_MODE=host moto_server
|
MOTO_DOCKER_NETWORK_MODE=host moto_server
|
||||||
|
|
||||||
The Docker images used by Moto are taken from the `lambci/lambda`-repo by default. Use the following environment variable to configure a different repo:
|
The Docker images used by Moto are taken from the following repositories:
|
||||||
|
|
||||||
|
- `mlupin/docker-lambda` (for recent versions)
|
||||||
|
- `lambci/lambda` (for older/outdated versions)
|
||||||
|
|
||||||
|
Use the following environment variable to configure Moto to look for images in an additional repository:
|
||||||
|
|
||||||
.. sourcecode:: bash
|
.. sourcecode:: bash
|
||||||
|
|
||||||
MOTO_DOCKER_LAMBDA_IMAGE=mLupin/docker-lambda
|
MOTO_DOCKER_LAMBDA_IMAGE=mlupin/docker-lambda
|
||||||
|
|
||||||
.. note:: When using the decorators, a Docker container cannot reach Moto, as it does not run as a server. Any boto3-invocations used within your Lambda will try to connect to AWS.
|
.. 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.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, region_name: str, account_id: str):
|
def __init__(self, region_name: str, account_id: str):
|
||||||
|
@ -89,7 +89,7 @@ def moto_server_host() -> str:
|
|||||||
|
|
||||||
|
|
||||||
def moto_lambda_image() -> str:
|
def moto_lambda_image() -> str:
|
||||||
return os.environ.get("MOTO_DOCKER_LAMBDA_IMAGE", "lambci/lambda")
|
return os.environ.get("MOTO_DOCKER_LAMBDA_IMAGE", "mlupin/docker-lambda")
|
||||||
|
|
||||||
|
|
||||||
def moto_network_name() -> str:
|
def moto_network_name() -> str:
|
||||||
|
@ -123,7 +123,7 @@ def test_invoke_event_function():
|
|||||||
function_name = str(uuid4())[0:6]
|
function_name = str(uuid4())[0:6]
|
||||||
conn.create_function(
|
conn.create_function(
|
||||||
FunctionName=function_name,
|
FunctionName=function_name,
|
||||||
Runtime="python2.7",
|
Runtime="python3.9",
|
||||||
Role=get_role_name(),
|
Role=get_role_name(),
|
||||||
Handler="lambda_function.lambda_handler",
|
Handler="lambda_function.lambda_handler",
|
||||||
Code={"ZipFile": get_test_zip_file1()},
|
Code={"ZipFile": get_test_zip_file1()},
|
||||||
|
Loading…
Reference in New Issue
Block a user