cdk -资产
用于向 AWS 环境发布 CDK 资产的库.
这是一个库,用于集成到应用程序中 CDK 工具包 国 际上传资产为 用户,使用 cdk-资产CLI
概览
@aws-cdk/cdk-assets-lib 需要名为资产表文件 assets.json,在 CDK 中
云会( C)cdk.out/assets.json) (中文(简体) ). 它将取走列入
清单,按要求编制,并上传到所示地点
名单.
目前支持以下资产类型:
- 文件和档案,上传到S3
- Docker 图像, 上传到 ECR
- 外部公用设施所建的文件、档案和 Docker 图像
上传的 S3 桶和 ECR 寄存器预计已经存在 .
我们期望资产是不可改变的,我们期望资产是不可改变的 资产标识和目的地都反映出这一点。 这反映了 本身在以下行为中:
- 如果指明的资产已在指定目的地存在,则该资产 将不会被包装和上传.
- 如果一些本地缓存的文物(取决于资产类型) 本地 Docker 缓存中的图像) 已经以该资产的身份命名, 它 将不进行包装,而是直接上传到目的地 地点.
对于由外部公用事业建造的资产,合同规定为cdk资产 期望该工具能够管理去dupe检测以及路径/图像标记生成. 这意味着cdk-assets每一代都会调用外部的效用 (a) 决定是否采取 完全重建;和 (b) 仅返回 stdout 上的一件事: 文件/存档路径 资产,或本地 Docker 图像的名称.
使用量
用法是这样的:
const manifest = AssetManifest.fromPath(args.path);
const someAssets = manifest.select([DestinationPattern.parse('...')]);
// Or implement your own AWS host
const aws: IAws = new DefaultAwsClient('PROFILENAME');
// Or implement your own progress listener
const progressListener: IProgressListener = new ConsoleProgress();
const pub = new AssetPublishing(manifest, {
aws,
progressListener,
});
await pub.publish();
示意图示例
资产清单是这样的:
{
"version": "1.22.0",
"files": {
"7aac5b80b050e7e4e168f84feffa5893": {
"source": {
"path": "some_directory",
"packaging": "zip"
},
"destinations": {
"us-east-1": {
"region": "us-east-1",
"assumeRoleArn": "arn:aws:iam::12345789012:role/my-account",
"bucketName": "MyBucket",
"objectKey": "7aac5b80b050e7e4e168f84feffa5893.zip"
}
}
},
"3dfe2b80b050e7e4e168f84feff678d4": {
"source": {
"executable": ["myzip"]
},
"destinations": {
"us-east-1": {
"region": "us-east-1",
"assumeRoleArn": "arn:aws:iam::12345789012:role/my-account",
"bucketName": "MySpecialBucket",
"objectKey": "3dfe2b80b050e7e4e168f84feff678d4.zip"
}
}
}
},
"dockerImages": {
"b48783c58a86f7b8c68a4591c4f9be31": {
"source": {
"directory": "dockerdir"
},
"destinations": {
"us-east-1": {
"region": "us-east-1",
"assumeRoleArn": "arn:aws:iam::12345789012:role/my-account",
"repositoryName": "MyRepository",
"imageTag": "b48783c58a86f7b8c68a4591c4f9be31",
"imageUri": "123456789012.dkr.ecr.us-east-1.amazonaws.com/MyRepository:1234567891b48783c58a86f7b8c68a4591c4f9be31"
}
}
},
"d92753c58a86f7b8c68a4591c4f9cf28": {
"source": {
"executable": ["mytool", "package", "dockerdir"]
},
"destinations": {
"us-east-1": {
"region": "us-east-1",
"assumeRoleArn": "arn:aws:iam::12345789012:role/my-account",
"repositoryName": "MyRepository2",
"imageTag": "d92753c58a86f7b8c68a4591c4f9cf28",
"imageUri": "123456789987.dkr.ecr.us-east-1.amazonaws.com/MyRepository2:1234567891b48783c58a86f7b8c68a4591c4f9be31"
}
}
}
}
}
占位符
这个 destination 资产清单的区块可能包含下列区域:
和账户占位符 :
${AWS::Region}${AWS::AccountId}
这些将取而代之的是目前配置的区域和账户ID
aWS SDK(通过环境变量或 ~/.aws/... 配置文件).
- 这个
${AWS::AccountId}占位符将 没有 之后重新评价 执行AssumeRole电话. - 若为
${AWS::Region}将主要替换为值 输入region键。 如果默认区域被设定,请离开region键出 的列表.
Docker 图像证书
对于 Docker 图像资产发布, cdk-assets 将 docker login 与
在建造和出版之前
docker文件可以在账户的ECR repo中引用图像.
cdk-assets 也可以配置为从ECR和
密钥管理器在构建前先创建证书配置
'~.克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克
CDK DOCKER CDES FILE环境变量. 证书文件有:
以下格式:
{
"version": "1.0",
"domainCredentials": {
"domain1.example.com": {
"secretsManagerSecretId": "mySecret", // Can be the secret ID or full ARN
"roleArn": "arn:aws:iam::0123456789012:role/my-role" // (Optional) role with permissions to the secret
},
"domain2.example.com": {
"ecrRepository": true,
"roleArn": "arn:aws:iam::0123456789012:role/my-role" // (Optional) role with permissions to the repo
}
}
}
如果有证书文件, docker 将配置为使用
docker-credential-cdk-assets 列出每个域的证书助手
在文件中。 此助手将承担提供的角色( 如果有), 然后获取
登录来自 SecretsManager 或 ECR 的证书.
使用 Drop- in Docker 替换
默认情况下, AWS CDK 将使用
docker 命令。 然而,通过具体说明 CDK_DOCKER 环境变量,
您可以覆盖用于构建和发布您的命令
资产.