CDK部署失败报无资产桶错误:Failed to publish asset
AWS CDK部署S3桶失败问题
问题背景
我正在学习AWS CDK,尝试创建一个新的S3桶,代码实现如下:
from aws_cdk import ( Stack, aws_s3 as s3 ) from constructs import Construct class MyCDKBucket(Stack): def __init__(self, scope: Construct, id: str, **kwargs) -> None: super().__init__(scope, id, **kwargs) # Create a simple S3 bucket bucket = s3.Bucket(self, "MyFirstBucket", # Unique identifier for the bucket versioned=True, # Enable versioning (optional) bucket_name="cdk_bucket", removal_policy=core.RemovalPolicy.DESTROY # Automatically delete the bucket on stack deletion )
执行步骤及输出
- cdk bootstrap执行成功,输出:
Bootstrapping environment aws://ACCOUNT/us-east-1... Trusted accounts for deployment: (none) Trusted accounts for lookup: (none) Using default execution policy of 'arn:aws:iam::aws:policy/AdministratorAccess'. Pass '--cloudformation-execution-policies' to customize. Environment aws://ACCOUNT/us-east-1 bootstrapped(no changes).
- cdk synth无报错,部分输出:
Parameters: BootstrapVersion: Type: AWS::SSM::Parameter::Value<String> Default: /cdk-bootstrap/hnb659fds/version Description: Version of the CDK Bootstrap resources in this environment, automatically retrieved from SSM Parameter Store. [cdk:skip]
- cdk deploy失败,错误信息:
Synthesis time: 3.42s CdkHelloStack: start: Building 12ccc934435a1d971aabaf873711add39a08ca1f0e872df373bcf5d43f5e1e45:current_account-current_region CdkHelloStack: success: Built 12ccc934435a1d971aabaf873711add39a08ca1f0e872df373bcf5d43f5e1e45:current_account-current_region CdkHelloStack: start: Publishing 12ccc934435a1d971aabaf873711add39a08ca1f0e872df373bcf5d43f5e1e45:current_account-current_region CdkHelloStack: fail: No bucket named 'cdk-hnb659fds-assets-ACCOUNT-us-east-1'. Is account 448049821786 bootstrapped? Failed to publish asset 12ccc934435a1d971aabaf873711add39a08ca1f0e872df373bcf5d43f5e1e45:current_account-current_region
疑问
我原本认为运行cdk deploy后会创建名为cdk_bucket的S3桶,请问我的理解有误吗?是否遗漏了步骤?
解决方案
1. 代码修复:缺失模块导入
代码中使用了core.RemovalPolicy.DESTROY但未导入core模块,需补充导入:
from aws_cdk import core
或者改用CDK v2标准写法,直接导入RemovalPolicy:
from aws_cdk import ( Stack, aws_s3 as s3, RemovalPolicy ) # 对应修改为: removal_policy=RemovalPolicy.DESTROY
2. 修复Bootstrap环境不匹配问题
错误提示找不到资产桶,说明当前部署的账号/区域和Bootstrap环境不一致:
- 检查当前AWS CLI配置的账号是否为错误信息中的
448049821786,若不是则切换账号后重新执行Bootstrap - 若Bootstrap的区域和部署区域不一致,需在目标区域重新执行Bootstrap:
cdk bootstrap aws://448049821786/us-east-1
3. 关于cdk_bucket的创建逻辑
你的理解没错,代码正确的前提下,cdk deploy会创建名为cdk_bucket的S3桶,但需注意:S3桶名是全局唯一的,如果该名称已被其他用户占用,部署也会失败,需更换唯一桶名。
内容的提问来源于stack exchange,提问作者user1079065
相关产品推荐
相关产品推荐

