如果我移除代码部署阶段,codepipeline将创建并执行Source (GitHub)和Build (坞映像到ECR)阶段。在本例中,我还创建了一个新的ECS集群,它将被创建以及预期的服务。
--这是代码的一部分:
fargate_service = ecs_patterns.ApplicationLoadBalancedFargateService(self, parms["ecs_fargate_service"],
cluster = ecs_cluster,
task_definition = task_definition,
public_load_balancer = True,
desired_count = 2,
listener_port = 80,
min_healthy_percent = 100,
max_healthy_percent = 200,
assign_public_ip = False,
)
deploy_action = codepipeline_actions.EcsDeployAction(
action_name = 'DeployAction',
service = fargate_service,
image_file = codepipeline.ArtifactPath(build_output, 'imagedefinitions.json')
)
pipeline = codepipeline.Pipeline(self, "CodePipeline",
pipeline_name=parms["pipeline_name"]+"test",
cross_account_keys = False,
stages=[
codepipeline.StageProps(stage_name="Source", actions=[source_action]),
codepipeline.StageProps(stage_name="Build", actions=[build_action]),
codepipeline.StageProps(stage_name="Deploy-to-ECS", actions=[deploy_action])
]
)如果删除这一行codepipeline.StageProps(stage_name="Deploy-to-ECS",actions=deploy_action),则没有错误,堆栈也能工作。
我已经尝试过以下测试:
引用现有的ECS集群创建
这是错误
jsii.errors.JavaScriptError:
TypeError: Cannot read property 'region' of undefined
at RichAction.get effectiveRegion [as effectiveRegion] (/tmp/jsii-kernel-wOdXOf/node_modules/@aws-cdk/aws-codepipeline/lib/private/rich-action.js:61:111)
at RichAction.get isCrossRegion [as isCrossRegion] (/tmp/jsii-kernel-wOdXOf/node_modules/@aws-cdk/aws-codepipeline/lib/private/rich-action.js:31:61)
at Pipeline.ensureReplicationResourcesExistFor (/tmp/jsii-kernel-wOdXOf/node_modules/@aws-cdk/aws-codepipeline/lib/pipeline.js:377:21)
at Pipeline._attachActionToPipeline (/tmp/jsii-kernel-wOdXOf/node_modules/@aws-cdk/aws-codepipeline/lib/pipeline.js:337:38)
at Stage.attachActionToPipeline (/tmp/jsii-kernel-wOdXOf/node_modules/@aws-cdk/aws-codepipeline/lib/private/stage.js:124:31)
at Stage.addAction (/tmp/jsii-kernel-wOdXOf/node_modules/@aws-cdk/aws-codepipeline/lib/private/stage.js:71:33)
at new Stage (/tmp/jsii-kernel-wOdXOf/node_modules/@aws-cdk/aws-codepipeline/lib/private/stage.js:28:18)
at Pipeline.addStage (/tmp/jsii-kernel-wOdXOf/node_modules/@aws-cdk/aws-codepipeline/lib/pipeline.js:272:23)
at new Pipeline (/tmp/jsii-kernel-wOdXOf/node_modules/@aws-cdk/aws-codepipeline/lib/pipeline.js:239:18)
at /tmp/tmpg46d0z4s/lib/program.js:8367:58
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "app.py", line 40, in <module>
pipeline = EcsCicdStack(main_stack, "Pipeline-"+parms["stage"], vpc=vpc_stack.vpc, parms=parms)
File "/mnt/e/Proyectos/ecs-cicd/.venv/lib/python3.8/site-packages/jsii/_runtime.py", line 86, in __call__
inst = super().__call__(*args, **kwargs)
File "/mnt/e/Proyectos/ecs-cicd/ecs_cicd/ecs_cicd_stack.py", line 190, in __init__
pipeline = codepipeline.Pipeline(self, "CodePipeline",
File "/mnt/e/Proyectos/ecs-cicd/.venv/lib/python3.8/site-packages/jsii/_runtime.py", line 86, in __call__
inst = super().__call__(*args, **kwargs)
File "/mnt/e/Proyectos/ecs-cicd/.venv/lib/python3.8/site-packages/aws_cdk/aws_codepipeline/__init__.py", line 4030, in __init__
jsii.create(Pipeline, self, [scope, id, props])
File "/mnt/e/Proyectos/ecs-cicd/.venv/lib/python3.8/site-packages/jsii/_kernel/__init__.py", line 290, in create
response = self.provider.create(
File "/mnt/e/Proyectos/ecs-cicd/.venv/lib/python3.8/site-packages/jsii/_kernel/providers/process.py", line 344, in create
return self._process.send(request, CreateResponse)
File "/mnt/e/Proyectos/ecs-cicd/.venv/lib/python3.8/site-packages/jsii/_kernel/providers/process.py", line 326, in send
raise JSIIError(resp.error) from JavaScriptError(resp.stack)
jsii.errors.JSIIError: Cannot read property 'region' of undefined这是我的环境的配置:
CDK CLI Version : 1.120.0 (build 6c15150)
Framework Version: 1.120.0 (build 6c15150)
Node.js Version: v16.8.0
OS : Ubuntu 20.04 LTS
Language (Version): Python 3.8.2如果你能给我一个关于在哪里看的想法,我会非常感激的。
提前感谢!
致以问候。
发布于 2021-10-25 14:43:58
这是因为EcsDeployAction在service参数中接受aws_ecs.IBaseService,并且传递一个ecs_patterns.ApplicationLoadBalancedFargateService。
若要访问实际的ECS服务结构,请传递fargate_service.service。
https://stackoverflow.com/questions/68994371
复制相似问题