我无法在 AWS ECS FARGATE 上部署 MySQL 映像。
我拥有的cloudformation脚本是这个(不要介意语法,我正在使用python lib Troposphere 来管理cloudfromation模板):
TaskDefinition(
'WordpressDatabaseTaskDefinition',
RequiresCompatibilities=['FARGATE'],
Cpu='512',
Memory='2048',
NetworkMode='awsvpc',
ContainerDefinitions=[
ContainerDefinition(
Name='WordpressDatabaseContainer',
Image='mysql:5.7',
Environment=[
Environment(Name='MYSQL_ROOT_PASSWORD', Value='root'),
Environment(Name='MYSQL_DATABASE', Value='wpdb'),
Environment(Name='MYSQL_USER', Value='root'),
Environment(Name='MYSQL_PASSWORD', Value='root'),
],
PortMappings=[
PortMapping(
ContainerPort=3306
)
]
)
]
)
部署成功。我什至可以看到任务运行了几秒钟,直到其状态变为已停止。
我唯一能看到的是:
在localhost上,它像一个超级按钮一样工作。我在这里做什么错了?至少-有什么方法可以调试吗?
答案 0 :(得分:1)
对于AWS ECS,如果正在停止,则可能无法通过运行状况检查,从而导致容器重新启动。容器DB映射到哪个端口,您可以检查容器日志以了解启动后停止时发生了什么吗?另外,请检查服务或任务下ECS中的日志。张贴在这里,以便我看看它们。
答案 1 :(得分:0)
所以,我发现了一个错误。
您要做的第一件事-是在本地主机上测试docker容器,看看是否可以重现该问题。就我而言,环境完全相同的本地计算机上的docker mysql容器也崩溃了。我能够检查日志,发现它无法创建“ root”用户。只需更改用户名和密码,就可以在ECS上正常工作。
这是在 AWS ECS FARGATE :
上运行mysql docker映像的完整堆栈: self.wordpress_database_task = TaskDefinition(
'WordpressDatabaseTaskDefinition',
RequiresCompatibilities=['FARGATE'],
Cpu='512',
Memory='2048',
NetworkMode='awsvpc',
# If your tasks are using the Fargate launch type, the host and sourcePath parameters are not supported.
Volumes=[
Volume(
Name='MySqlVolume',
DockerVolumeConfiguration=DockerVolumeConfiguration(
Scope='shared',
Autoprovision=True
)
)
],
ContainerDefinitions=[
ContainerDefinition(
Name='WordpressDatabaseContainer',
Image='mysql:5.7',
Environment=[
Environment(Name='MYSQL_ROOT_PASSWORD', Value='root'),
Environment(Name='MYSQL_DATABASE', Value='wpdb'),
Environment(Name='MYSQL_USER', Value='wordpressuser'),
Environment(Name='MYSQL_PASSWORD', Value='wordpressuserpassword'),
],
PortMappings=[
PortMapping(
ContainerPort=3306
)
]
)
]
)
self.wordpress_database_service = Service(
'WordpressDatabaseService',
Cluster=Ref(self.ecs_cluster),
DesiredCount=1,
TaskDefinition=Ref(self.wordpress_database_task),
LaunchType='FARGATE',
NetworkConfiguration=NetworkConfiguration(
AwsvpcConfiguration=AwsvpcConfiguration(
Subnets=[Ref(sub) for sub in VpcFormation().public_subnets],
AssignPublicIp='ENABLED',
SecurityGroups=[Ref(self.security_group)]
)
),
)
请注意 AssignPublicIp ='ENABLED' 选项,这样您就可以远程连接到数据库。
完成堆栈后,我可以使用以下命令成功连接:
mysql -uwordpressuser -pwordpressuserpassword -h18.202.31.123
就这样:)