我试图使用CodePipeline和CodeDeploy一起部署产品,用于ECS、EC2、Blue/Green部署,但它在运行时总是返回此错误:
Container.image包含无效字符。
我认为这个错误来自于2个文件appspec.yaml和taskdef.json,因为当我使用滚动部署时,它起了作用。
这是我的配置:
appspec.yaml
version: 0.0
Resources:
- TargetService:
Type: AWS::ECS::Service
Properties:
TaskDefinition: <TASK_DEFINITION>
LoadBalancerInfo:
ContainerName: "my-container"
ContainerPort: 80taskdef.json
{
"ipcMode": null,
"executionRoleArn": null,
"containerDefinitions": [
{
"dnsSearchDomains": null,
"environmentFiles": null,
"logConfiguration": null,
"entryPoint": null,
"portMappings": [
{
"hostPort": 80,
"protocol": "tcp",
"containerPort": 80
},
{
"hostPort": 8000,
"protocol": "tcp",
"containerPort": 8000
}
],
"command": null,
"linuxParameters": null,
"cpu": 0,
"environment": [],
"resourceRequirements": null,
"ulimits": null,
"dnsServers": null,
"mountPoints": [],
"workingDirectory": null,
"secrets": null,
"dockerSecurityOptions": null,
"memory": null,
"memoryReservation": null,
"volumesFrom": [],
"stopTimeout": null,
"image": "<IMAGE1_NAME>",
"startTimeout": null,
"firelensConfiguration": null,
"dependsOn": null,
"disableNetworking": null,
"interactive": null,
"healthCheck": null,
"essential": true,
"links": null,
"hostname": null,
"extraHosts": null,
"pseudoTerminal": null,
"user": null,
"readonlyRootFilesystem": null,
"dockerLabels": null,
"systemControls": null,
"privileged": null,
"name": "my-container"
}
],
"placementConstraints": [],
"memory": "512",
"taskRoleArn": null,
"compatibilities": [
"EXTERNAL",
"EC2"
],
"taskDefinitionArn": "<TASK_DEFINITION>",
"family": "task-definition-name",
"requiresAttributes": [
{
"targetId": null,
"targetType": null,
"value": null,
"name": "com.amazonaws.ecs.capability.ecr-auth"
}
],
"pidMode": null,
"requiresCompatibilities": [
"EC2"
],
"networkMode": null,
"cpu": "512",
"revision": 17,
"status": "ACTIVE",
"inferenceAccelerators": null,
"proxyConfiguration": null,
"volumes": []
}我的配置如下所示:
https://www.proud2becloud.com/how-to-setup-a-continuous-deployment-pipeline-on-aws-for-ecs-blue-green-deployments/ https://docs.aws.amazon.com/codepipeline/latest/userguide/action-reference-ECSbluegreen.html
我试图找到解决这一问题的办法,但仍然没有效果。任何帮助都将不胜感激。
发布于 2021-09-13 21:13:49
有关这方面的文件通常很贫乏。
在任务定义中有:“图像”:"“
在管道定义中,您需要一个文件,特别是名为imageDetail.json的文件。
它需要与以下完全一样,与相关的码头形象。
{"ImageURI":"???????.dkr.ecr.eu-west-1.amazonaws.com/???/???:????"}如果您的管道使用ECR作为源来触发管道,那么它会为您创建它--我认为,如果不是您需要自己创建它。
例如,在我的管道中,我不使用ECR作为源代码,我编译代码,创建和推送映像,然后使用一个名为BuildDockerOutput的CodeBuild项目生成imageDetail.json
- Name: BlueGreenDeploy
InputArtifacts:
- Name: PrepareCodeDeployOutputProd
- Name: BuildDockerOutput
Region: !Ref DeployRegion1
ActionTypeId:
Category: Deploy
Owner: AWS
Version: '1'
Provider: CodeDeployToECS
RoleArn: !Sub arn:aws:iam::${ProdAccountId}:role/CrossAccountsDeploymentRole
Configuration:
AppSpecTemplateArtifact: PrepareCodeDeployOutputProd
AppSpecTemplatePath: appspec.json
ApplicationName: !Ref ApplicationName
DeploymentGroupName: !Ref ApplicationName
TaskDefinitionTemplateArtifact: PrepareCodeDeployOutputProd
TaskDefinitionTemplatePath: taskdef.json
Image1ArtifactName: BuildDockerOutput
Image1ContainerName: "IMAGE1_NAME"工件BuildDockerOutput是CodeDeploy阶段的输入,它用来自imageDetail.json的ImageURI值替换占位符。
注意:我从不指定文件名。
https://stackoverflow.com/questions/69157099
复制相似问题