Localstack部署CloudFormation栈时引用已有资源的问题咨询
Localstack部署CloudFormation栈问题解答
错误原因分析
从日志中的KeyError: 'arn:aws:iam::XXXXX:policy/BasePolicy-Default-XXX'可以明确:Localstack本地模拟环境中不存在你模板引用的IAM策略资源。Localstack是独立的本地AWS模拟环境,和真实的dev AWS环境完全隔离,不会自动同步真实环境的资源。
问题1:是否需要在部署栈前手动创建这些existing resources?
需要。Localstack无法访问真实AWS dev环境的资源,你必须在Localstack环境中预先创建这些被引用的资源:
- 可以通过指向Localstack端点的AWS CLI命令创建,比如创建IAM策略:
aws iam create-policy --policy-name BasePolicy-Default-XXX --policy-document file://policy.json --endpoint-url=http://localhost:4566 - 也可以编写单独的CloudFormation模板,先部署这些依赖资源,再部署主栈。
问题2:是否可以使用cloudformation.d文件夹中的多个资源文件创建栈?
可以,有几种实现方式:
- 文件合并部署:用命令行工具将目录下的多个YAML文件合并为一个文件,再部署:
cat cloudformation.d/*.yml > combined-template.yml aws cloudformation deploy --template-file combined-template.yml --stack-name ashford1 --endpoint-url=http://localhost:4566 - 嵌套栈方式:在主模板中通过
AWS::CloudFormation::Stack资源引用目录中的其他模板,示例:
注意Localstack需要能访问到这些本地模板文件,直接使用相对路径即可(如果是Localstack容器部署,需要将目录挂载到容器内)。Resources: NetworkStack: Type: AWS::CloudFormation::Stack Properties: TemplateURL: ./cloudformation.d/network.yml IamStack: Type: AWS::CloudFormation::Stack Properties: TemplateURL: ./cloudformation.d/iam.yml - Localstack专属命令:如果使用Localstack CLI,部分版本支持
--template-dir参数直接指定模板目录:localstack aws cloudformation deploy --template-dir ./cloudformation.d --stack-name ashford1
内容的提问来源于stack exchange,提问作者sauumum
相关产品推荐
相关产品推荐

