使用CLI执行CodeDeploy部署遇AppSpec格式错误,控制台可正常运行
问题原因
你在create-deployment.json里犯了一个关键错误:appSpecContent.content字段需要的是AppSpec文件的实际内容,而不是文件名。当你填"appspec.json"时,CodeDeploy会把这个字符串本身当作AppSpec内容去解析,这显然不是有效的YAML或JSON,所以触发格式错误提示。控制台能成功是因为它会自动读取你上传的文件内容并传入该字段,而不是直接传文件名。
解决方案
方案1:将AppSpec内容直接嵌入JSON配置
把appspec.json的内容转义成字符串后,直接放到content字段中。
比如你的appspec.json内容为:
{ "version": "0.0", "files": [ { "source": "/", "destination": "/var/www/html" } ] }
修改后的create-deployment.json应该是:
{ "applicationName": "myapp", "deploymentGroupName": "myapp-test", "revision": { "revisionType": "AppSpecContent", "appSpecContent": { "content": "{\"version\": \"0.0\",\"files\": [{\"source\": \"/\",\"destination\": \"/var/www/html\"}]}" } } }
方案2:改用S3作为修订源(更推荐)
如果AppSpec文件较大,或者需要复用,建议将文件上传到S3,然后在配置中指定S3路径和格式:
{ "applicationName": "myapp", "deploymentGroupName": "myapp-test", "revision": { "revisionType": "S3", "s3Location": { "bucket": "你的S3桶名", "key": "appspec.json的存储路径", "bundleType": "json" } } }
执行CLI命令前确保CodeDeploy服务角色有权限访问该S3桶。
验证YAML格式的AppSpec
如果用YAML格式,同样要把内容嵌入content字段,或者放到S3中指定bundleType: "yaml"。比如嵌入YAML内容的配置:
{ "applicationName": "myapp", "deploymentGroupName": "myapp-test", "revision": { "revisionType": "AppSpecContent", "appSpecContent": { "content": "version: 0.0\nfiles:\n - source: /\n destination: /var/www/html" } } }
内容的提问来源于stack exchange,提问作者MVM
相关产品推荐
相关产品推荐

