AWS announces preview of AWS Interconnect - multicloud
AWS announces AWS Interconnect – multicloud (preview), providing simple, resilient, high-speed private connections to other cloud service providers. AWS Interconnect - multicloud is easy to configure and provides high-speed, resilient connectivity with dedicated bandwidth, enabling customers to interconnect AWS networking services such as AWS Transit Gateway, AWS Cloud WAN, and Amazon VPC to other cloud service providers with ease.
如何使用 AwsSdkCall 接口从 CDK 项目进行 AWS SDK 调用?
我想使用 AwsSdkCall 接口从 AWS Cloud Development Kit(AWS CDK)项目进行 AWS SDK 调用。
简短描述
可以将 AWS 软件开发工具包(AWS SDK)调用用于堆栈部署场景,例如:
- 在动态创建和更新堆栈时检索配置。
- 检索 AWS CloudFormation 中资源的返回值不支持的资源属性。
- 进行 AWS CloudFormation 不支持的小修补或配置更改。
可以在发生不同的 CloudFormation 堆栈操作事件(例如创建、删除或更新)时触发 AWS SDK 调用。无需为部署管道设置访问权限和工具即可进行 AWS SDK 调用。AWS SDK 运行时系统完全由 AWS Cloud Development Kit(AWS CDK)进行设置。此外,还可以自定义和限制自定义资源背后的 AWS Lambda 函数的访问权限。
解决方法
**注意:**此解决方法中的以下示例使用 Python。确保使用特定于您正在使用的编程语言的命令。
要使用 AwsSdkCall 进行 AWS SDK 调用,必须声明三个基本参数:
- 服务 – 这是您打算调用的 AWS 服务。值区分大小写。
- 操作 – 这是您打算进行的 API/操作调用。通常遵循混合大小写模式。值区分大小写。
- 参数 – 这些是您在进行 API/操作调用时传递的可选参数。可以将参数声明为变量,然后将其传递给接口,类似于 API 负载的 JSON 对象。有关详细信息,请参阅适用于 JavaScript 的 AWS SDK。
1. 从 AWS Systems Manager Agent 检索亚马逊云机器镜像 ID:
**注意:**在以下示例中,以 cr 形式导入 custom_resources,以 cdk 形式导入 aws_cdk。
get_ami_id = cr.AwsCustomResource(self, "GetAMIId", on_create=cr.AwsSdkCall( service="SSM", action="getParameter", parameters={ "Name": "/aws/service/ami-amazon-linux-latest/amzn2-ami-kernel-5.10-hvm-x86_64-gp2" }, physical_resource_id=cr.PhysicalResourceId.of('get-ami-id')), policy=cr.AwsCustomResourcePolicy.from_sdk_calls( resources=cr.AwsCustomResourcePolicy.ANY_RESOURCE )) cdk.CfnOutput(self, 'ImageId', value=get_ami_id.get_response_field('Parameter.Value'))
**注意:**可以使用 get_response_field 参数引用 API 调用的响应。
2. 使用自定义 KMS 密钥加密 Lambda 日志组:
**注意:**在以下示例中,从 aws_cdk,以 lambda_ 形式导入 aws_lambda,以 cr 形式导入 custom_resources,以 kms 形式导入 aws_kms。
encryption_key = kms.Key(self, 'Key') encryption_key.grant_encrypt_decrypt( iam.ServicePrincipal('logs.amazonaws.com')) fn = lambda_.Function(self, "MyFunction", runtime=lambda_.Runtime.NODEJS_16_X, handler="index.handler", code=lambda_.Code.from_inline("hello world")) associate_kms_key = cr.AwsCustomResource(self, "AssociateKmsKey", on_create=cr.AwsSdkCall( service="CloudWatchLogs", action="associateKmsKey", parameters={ "kmsKeyId": encryption_key.key_arn, "logGroupName": fn.log_group.log_group_name }, physical_resource_id=cr.PhysicalResourceId.of("associate-kms-key")), policy=cr.AwsCustomResourcePolicy.from_sdk_calls( resources=cr.AwsCustomResourcePolicy.ANY_RESOURCE ) )
注意:可以使用属性策略为自定义资源背后的 Lambda 函数授予权限,以进行 API 调用。如果使用 from_sdk_calls(),则每个 API 调用都会转换为相应的 AWS Identity and Access Management(IAM)权限。如果合成后未添加正确的权限,则可以使用 from_statements() 手动添加权限。
示例:
policy=cr.AwsCustomResourcePolicy.from_statements( statements=[iam.PolicyStatement(actions=[ 'dynamodb:DescribeTable', 'dynamodb:ListTables'], resources=['*'], )] )
- 语言
- 中文 (简体)
