aws云开发工具包核心库
aws-cdk.core的Python项目详细描述
AWS云开发工具包核心库
该库包括aws云开发工具包(aws cdk)的基本构建块。它定义了在 AWS构造库。
参见aws cdk开发人员 指南 此库的大部分功能的信息。剩下的部分 自述文件仅涵盖《开发人员指南》中尚未涵盖的主题。
持续时间
为了使时间间隔的规范明确无误,一个名为
duration
在整个aws构造库中由所有构造使用
以一个时间间隔作为参数(不管是超时,还是
价格,或其他的)。
duration的实例是通过使用一个静态工厂 方法:
Duration.seconds(300)// 5 minutesDuration.minutes(5)// 5 minutesDuration.hours(1)// 1 hourDuration.days(7)// 7 daysDuration.parse('PT5M')// 5 minutes
秘密
为了避免意外地将机密存储为纯文本,我们使用secretvalue
键入
代表秘密。任何具有应该是秘密的值的构造(例如
密码或访问密钥)将采用secretvalue类型的参数
最佳实践是将机密存储在aws secret manager中,并使用secretvalue.secretsmanager引用它们:
constsecret=SecretValue.secretsManager('secretId',{jsonField:'password'// optional: key of a JSON field to retrieve (defaults to all content),versionId:'id'// optional: id of the version (default AWSCURRENT)versionStage:'stage'// optional: version stage name (default AWSCURRENT)});
使用aws secrets manager是在cdk应用程序中引用机密的推荐方法。
secretvalue
还支持以下机密源:
secretvalue.plain text(secret)
:在应用程序和生成的模板中以纯文本形式存储机密(不推荐)。secretvalue.ssmsecure(param,version)
:指存储在ssm参数存储中作为securestring的机密。secretvalue.cfn参数(param)
:指通过cloudformation参数传递的机密(必须有noecho:true
)。secretvalue.cfndynamicreference(dynref)
:指由云信息动态引用(由ssmsecure
和secretsmanager
使用)描述的机密。
ARN操作
有时候你需要把亚马逊的资源名称拼凑起来或者分离出来 (ARNs)函数stack.formatarn()和stack.parsearn()存在于 这个目的。
formatarn()
可用于从组件构建ARN。它将自动
使用调用堆栈的区域和帐户:
// Builds "arn:<PARTITION>:lambda:<REGION>:<ACCOUNT>:function:MyFunction"stack.formatArn({service:'lambda',resource:'function',sep:':',resourceName:'MyFunction'});
parsearn()
可用于从ARN获取单个组件。parsearn()
将正确处理文本ARN和部署时间值(令牌)。
但是在部署时间值的情况下,请注意结果将是另一个
无法在CDK应用程序中检查的部署时间值。
// Extracts the function name out of an AWS Lambda Function ARNconstarnComponents=stack.parseArn(arn,':');constfunctionName=arnComponents.resourceName;
注意,根据服务的不同,资源分隔符可以是
:
或/
,资源名称可以是第6个或第7个
ARN中的部件。使用这些函数时,您需要知道
您正在处理的ARN的格式。
有关aws中使用的arn格式的详细列表,请参见aws arns和 名称空间 在AWS通用参考资料中。
依赖关系
构造依赖关系
有时aws资源依赖于其他资源,并且创建一个 必须先完成资源,然后才能启动下一个资源。
一般来说,cloudformation将正确地推断依赖关系基于所使用的属性值的资源之间。在这种情况下 它没有,aws构造库将为 你,
如果需要添加不自动推断的排序依赖项,
通过使用
constructa.node.addDependency(constructb)
。这将添加依赖项
constructa
范围内的所有资源与所有资源之间的关系
constructb
范围内的资源
如果希望单个对象表示一组
必须在同一范围内,您可以使用具体可靠的
。这个
下面创建一个表示对两个
construts,constructb
和constructc
:
// Declare the dependable objectconstbAndC=newConcreteDependable();bAndC.add(constructB);bAndC.add(constructC);// Take the dependencyconstructA.node.addDependency(bAndC);
堆栈依赖项
两个不同的堆栈实例可以相互依赖。这个 当一个堆栈中的资源被另一个堆栈引用时发生。在 在这种情况下,cdk记录资源的跨堆栈引用, 自动生成正确的cloudformation原语,并添加 两个堆栈之间的依赖关系。也可以手动添加依赖项 通过使用stacka.addDependency(stackb)方法在两个堆栈之间。
堆栈依赖项具有以下含义:
- 不允许循环依赖项,因此如果
stacka
使用的资源来自stackb
,反向操作不再可能。 - cdk特别处理它们之间具有依赖关系的堆栈。
工具包:
- 如果
stacka
依赖于stackb
,运行cdk deploy stacka也将 自动展开
stackb
stackb
的部署将在部署之前执行。stacka
部署。
- 如果
AWS云层特征
cdk堆栈将合成aws云信息模板。本节 说明此模块如何允许用户访问低层云信息 需要时提供功能。
堆栈输出
cloudformation堆栈输出并使用
cfnoutput
类:
newCfnOutput(this,'OutputName',{value: bucket.bucketName,description:'The name of an S3 bucket',// OptionalexportName:'Global.BucketName',// Registers a CloudFormation export});
参数
云信息模板支持使用参数 自定义模板。它们允许cloudformation用户将自定义值输入到 每次创建或更新堆栈时的模板。而cdk设计 哲学倾向于使用构建时参数化,用户可能需要使用 在许多情况下(例如,当迁移现有的 堆叠到AWS CDK)。
可以使用cfn参数将模板参数添加到堆栈中
类:
newCfnParameter(this,'MyParameter',{type:'Number',default:1337,// See the API reference for more configuration props});
然后可以使用value
方法之一获取参数值。
由于参数仅在部署时解析,因此获得的值为
实际值的占位符标记(token.isunresolved()
将返回true
对于那些:
constparam=newCfnParameter(this,'ParameterName',{/* config */});// If the parameter is a Stringparam.valueAsString;// If the parameter is a Numberparam.valueAsNumber;// If the parameter is a Listparam.valueAsList;
伪参数
cloudformation支持许多伪参数,
在部署时解析为有用值。假云形成
可以从aws
类的静态成员获取参数。
通常建议从作用域的堆栈访问伪参数
相反,它保证生成的值符合指定的
堆栈,这在跨堆栈共享资源的情况下非常重要:
// "this" is the current constructconststack=Stack.of(this);stack.account;// Returns the AWS::AccountId for this stack (or the literal value if known)stack.region;// Returns the AWS::Region for this stack (or the literal value if known)stack.partition;
资源选项
云信息资源还可以指定="https://docs.aws.amazon.com/awscloudformation/latest/userguide/aws-product-attribute-reference.html" rel="nofollow">资源
属性。cfnresource
类允许
通过cfnoptions
属性访问它们:
Duration.seconds(300)// 5 minutesDuration.minutes(5)// 5 minutesDuration.hours(1)// 1 hourDuration.days(7)// 7 daysDuration.parse('PT5M')// 5 minutes0
使用
cfnResource.adddependson
方法:
Duration.seconds(300)// 5 minutesDuration.minutes(5)// 5 minutesDuration.hours(1)// 1 hourDuration.days(7)// 7 daysDuration.parse('PT5M')// 5 minutes1
内在函数和条件表达式
cloudformation支持内部函数。这些功能
可以从fn
类访问,该类为每个
内部函数和条件表达式:
Duration.seconds(300)// 5 minutesDuration.minutes(5)// 5 minutesDuration.hours(1)// 1 hourDuration.days(7)// 7 daysDuration.parse('PT5M')// 5 minutes2
当使用部署时间值(那些token.isunresolved
返回true
,来自编程语言的惯用条件不能是
已使用(该值在部署时才会知道)。当条件逻辑
需要用未解析的值表示,必须使用
通过cfcondition
类的云形成条件:
Duration.seconds(300)// 5 minutesDuration.minutes(5)// 5 minutesDuration.hours(1)// 1 hourDuration.days(7)// 7 daysDuration.parse('PT5M')// 5 minutes3
映射
cloudformation使用
cfn映射
类:
Duration.seconds(300)// 5 minutesDuration.minutes(5)// 5 minutesDuration.hours(1)// 1 hourDuration.days(7)// 7 daysDuration.parse('PT5M')// 5 minutes4
动态参考
cloudformation支持动态解析值
用于SSM参数(包括安全字符串)和机密管理器。编码这样的
引用是使用cfndynamicreference
类完成的:
Duration.seconds(300)// 5 minutesDuration.minutes(5)// 5 minutesDuration.hours(1)// 1 hourDuration.days(7)// 7 daysDuration.parse('PT5M')// 5 minutes5
模板选项和转换
cloudformation模板支持许多选项,包括
在部署堆栈时使用的转换。那些可以
使用stack.templateoptions
属性配置:
Duration.seconds(300)// 5 minutesDuration.minutes(5)// 5 minutesDuration.hours(1)// 1 hourDuration.days(7)// 7 daysDuration.parse('PT5M')// 5 minutes6
发射原始资源
cfnResource类允许在 云信息模板的[resources][cfn resources]部分。
Duration.seconds(300)// 5 minutesDuration.minutes(5)// 5 minutesDuration.hours(1)// 1 hourDuration.days(7)// 7 daysDuration.parse('PT5M')// 5 minutes7
对于任何其他资源,cloudformation模板中的逻辑id将是 由aws cdk生成,但类型和属性将在 合成模板。
包括原始云形成模板片段
当将云层堆栈迁移到aws cdk时,可以使用
在合成模板中逐字包含现有模板的片段。
这可以使用cfninclude
类来实现。
Duration.seconds(300)// 5 minutesDuration.minutes(5)// 5 minutesDuration.hours(1)// 1 hourDuration.days(7)// 7 daysDuration.parse('PT5M')// 5 minutes8