如何使用 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=['*'], )] )
相关内容
- AWS 官方已更新 3 年前
- AWS 官方已更新 6 个月前
- AWS 官方已更新 2 个月前