AWS CDK提供了DockerAssetImage构造函数和DockerImageAsset.create方法,允许您在生成CDK堆栈之前构建和推送Docker镜像。使用这些方法可以访问其他Dockerfile构建参数(通过build_args选项)。
以下是将构建参数传递给DockerImageCode.from_image_asset的示例代码:
from aws_cdk import (
core,
aws_ec2 as ec2,
aws_ecr_assets as assets,
aws_ecs as ecs,
)
class MyStack(core.Stack):
def __init__(self, scope: core.Construct, id: str, **kwargs):
super().__init__(scope, id, **kwargs)
# 定义一个Dockerfile,该Dockerfile使用了ARG构建参数
dockerfile = """
FROM ubuntu:$UBUNTU_VERSION
ARG APP_PORT
EXPOSE $APP_PORT
"""
# 创建DockerImageAsset,传递build_args
asset = assets.DockerImageAsset(
self, "MyAsset",
directory="./my-docker-image",
file="Dockerfile",
build_args={
"UBUNTU_VERSION": "20.04",
"APP_PORT": "8080",
},
)
# 创建DockerImageCode并将其传递给EC2任务定义
image = ecs.DockerImageCode.from_image_asset(asset)
task_def = ecs.Ec2TaskDefinition(self, "MyTaskDef")
container = task_def.add_container(
"MyContainer",
image=image,
port_mappings=[
ecs.PortMapping(container_port=8080),
],
)
# 创建EC2服务
vpc = ec2.Vpc.from_lookup(self, "MyVpc", vpc_id="vpc-12345")
cluster = ecs.Cluster(self, "MyCluster", vpc=vpc)
service = ecs.Ec2Service(self, "MyService", cluster=cluster)
service.add_placement_strategies(
ecs.PlacementStrategy(count=1, field="instanceId", type=ecs.PlacementStrategy