Morph ではプロジェクト内のDockerfileを編集することで、Morph Cloud 上での実行環境のカスタマイズを実施することができます。

Dockerfile の基本構成

morph newコマンドで初期生成される Dockerfile は以下のような構成になっています。

MORPH_TASK_ROOTの予約語は、pip installを正常に動作させるために必要な環境変数です。特別な理由がない限りは変更しないでください。

# Base image for Morph Cloud
FROM public.ecr.aws/i1l4z0u0/morph-cloud:python3.9

# Set working directory
WORKDIR /var/task

# Install Python dependencies with poetry
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt --target "${MORPH_TASK_ROOT}"

# Copy source code and dependencies
COPY .morph/frontend/dist /var/task/.morph/frontend/dist
COPY .morph/core /var/task/core
COPY .morph/meta.json .morph/
COPY morph_project.yml .
COPY src ./src

# Command to run the Lambda function
CMD ["core.morph.api.app.handler"]

パッケージの追加

Morph Cloud のベースイメージでは yum もしくは microdnf を用いてパッケージを管理します。必要なパッケージを RUN コマンドで追加することができます。

  • ベースイメージは Amazon Linux をベースに作成されています。Python3.11 およびそれ以前のイメージはパッケージマネージャーとしてyumコマンドを利用できます。Python3.12 以降のイメージは Amazon Linux 2023 に基づくため、パッケージの追加にはmicrodnfコマンドが利用できます。

例えば、以下のようにDockerfileyumコマンドを追加することで、curlパッケージをインストールすることができます。

イメージサイズ削減のために、パッケージの追加後にはyum clean all (新しいイメージではmicrodnf clean all) コマンドを実行して不要なパッケージを削除することをお勧めします。

# Base image for Morph Cloud
FROM public.ecr.aws/i1l4z0u0/morph-cloud:python3.9

# Set working directory
WORKDIR /var/task

# Install OS-level dependencies
RUN yum update -y && yum install -y \
    curl \
    && yum clean all

-- 省略 --

Python3.12 およびそれ以降のイメージでは、 microdnf コマンドを利用します。

# Base image for Morph Cloud
FROM public.ecr.aws/i1l4z0u0/morph-cloud:python3.12

# Set working directory
WORKDIR /var/task

# Install OS-level dependencies
RUN microdnf install \
    curl \
    && microdnf clean all

-- truncated --

Python バージョンの変更

Morph では、morph new コマンドを利用してプロジェクトを作成する際、利用する Python のバージョンを 3.9, 3.10, 3.11, 3.12 から選択できます。

ここで選択したバージョンは、デプロイしたアプリケーションの実行環境にも反映されるよう、初期生成ファイルが設定されます。

morph new my_project
# 対話的にPythonバージョンを選択

選択したPythonバージョンは、プロジェクト内の設定ファイル(Dockerfileなど)にも反映されるため、Dockerfileをカスタマイズします。

デプロイ環境の Python バージョンを後から変更する

デプロイした環境で使用する Python のバージョンを後から変更したい場合は、プロジェクト内にある Dockerfile のベースイメージのタグを編集し、再度デプロイを行います。

例: Python3.12 のイメージを使う場合

FROM public.ecr.aws/i1l4z0u0/morph-cloud:python3.12

-- 省略 --

上記のように python3.9 から python3.10、python3.11、python3.12 など、任意のバージョンに変更可能です。