有没有一种方式可以在不使用 appspec.yml
文件的情况下运行 AWS Codedeploy?
我正在寻找一种完全基于命令行的方式来运行 create-deployment,而不需要在 S3 存储桶中使用任何 yml 文件。
有没有一种方式可以在不使用 appspec.yml
文件的情况下运行 AWS Codedeploy?
我正在寻找一种完全基于命令行的方式来运行 create-deployment,而不需要在 S3 存储桶中使用任何 yml 文件。
使用JSON调用aws deploy
的方法,而不使用S3并在变量中构建Appspec内容:
APPSPEC=$(echo '{"version":1,"Resources":[{"TargetService":{"Type":"AWS::ECS::Service","Properties":{"TaskDefinition":"'${AWS_TASK_DEFINITION_ARN}'","LoadBalancerInfo":{"ContainerName":"react-web","ContainerPort":3000}}}}]}' | jq -Rs .)
jq -Rs .
,内容应为 JSON 字符串而不是实际 JSON 的一部分。使用 jq
可以转义 JSON。根据需要替换变量(如 AWS_TASK_DEFINITION_ARN、ContainerName 和 ContainerPort 等)。REVISION='{"revisionType":"AppSpecContent","appSpecContent":{"content":'${APPSPEC}'}}'
最后,我们可以使用新版本创建部署:
aws deploy create-deployment --application-name "${AWS_APPLICATION_NAME}" --deployment-group-name "${AWS_DEPLOYMENT_GROUP_NAME}" --revision "$REVISION"
在aws-cli/2.4.15版本上进行了测试
在 AWS Lambda/ECS 部署中,可以创建不带 S3 中 appspec.yaml 文件的部署。
使用 AWS Cli V2:https://awscli.amazonaws.com/v2/documentation/api/latest/reference/deploy/create-deployment.html
aws deploy create-deployment --cli-input-yaml file://code-deploy.yaml
其中code-deploy.yaml
将具有以下结构(ecs服务示例):
applicationName: 'code-deploy-app'
deploymentGroupName: 'code-deploy-deployment-group'
revision:
revisionType: AppSpecContent
appSpecContent:
content: |
version: 0.0
Resources:
- TargetService:
Type: AWS::ECS::Service
Properties:
TaskDefinition: "[YOUR_TASK_DEFINITION_ARN]"
LoadBalancerInfo:
ContainerName: "ecs-service-container"
ContainerPort: 8080
很遗憾,没有办法在不使用appspec
文件的情况下执行CodeDeploy。
您可以使用CodePipeline将资产部署到S3存储桶(不需要appspec)。但是,如果它们要传输到EC2实例,则需要找到自己的方法来拉取它们。