根本原因:您创建了堆栈,但您在堆栈之外获取了角色,因此它是“孤儿”,AWS CDK 应用程序无法理解它应该如何处理。
这个问题应该分三个步骤来解决(自下而上的方法):
我正在使用 CDK v2。
0.1。 项目结构
.
├── app.py
├── cdk.json
├── requirements.txt
├── .gitignore
└── stacks
├── stack.py
└── __init__.py
这是一个基本项目结构,可让您与 AWS CDK 进行交互。
0.2。 requirements.txt
# CDK v2 update: npm install -g aws-cdk@next
aws-cdk-lib==2.0.0-rc.14
boto3
我添加了 requirements.txt 的内容只是为了确保我们在同一页面上。此外,最好将您的 AWS CDK npm 更新为最新版本。这个命令应该在cmd中运行。
- stack.py
import aws_cdk as cdk
from aws_cdk import aws_iam as _iam
class MyNewStack(cdk.Stack):
def __init__(self, scope, construct_id, **kwargs) -> None:
super().__init__(scope, construct_id, **kwargs)
# Fetch existing resources
role = _iam.Role.from_role_arn(self, "my_existing_role",
role_arn="role_arn_copied_from_webui_as-string",
mutable=False)
在这里,我们创建了一个堆栈,其中列出了使用 CDK API 的所有资源(新的或现有的)。下面给出了链接以查看所有可用选项。
- app.py
from stacks.Stack import *
# Initializing the CDK app
app = cdk.App()
env = cdk.Environment(account=os.getenv('CDK_DEFAULT_ACCOUNT'), region=os.getenv('CDK_DEFAULT_REGION'))
# Stacks
MyNewStack(app, "stack-name-to-be-displayed-in-cloudformation", env=env)
# Required to get files updated in cdk.out
app.synth()
这里我们初始化 CDK 应用并创建我们之前构建的类的实例。
- 部署
$cdk ls
$cdk synth
$cdk deploy stack-name-to-be-displayed-in-cloudformation
部署前,强烈建议运行cdk ls、cdk synth、cdk diff,看看是否一切正常。
请让我知道,以防我可以为您提供更多帮助。希望你觉得它有用。干杯!
参考文档等:
- CDK 简介:https://docs.aws.amazon.com/cdk/latest/guide/home.html
- CDK API 参考:https://docs.aws.amazon.com/cdk/api/v2/python/modules.html
- 构建项目的更好方法:https://www.sentiatechblog.com/aws-cdk-structure-components
- CDK 模式(实际示例):https://cdkpatterns.com/