如何使用介面 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 代理程式擷取 Amazon 機器映像 ID:
注意: 在下列範例中,將 custom_resources 匯入為 cr,將 aws_cdk 匯入為 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 將 aws_lambda 匯入為 lambda_,將 custom_resources 匯入為 cr,將 aws_kms 匯入為 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 身分和存取管理 (IAM) 權限。如果合成後沒有新增正確的權限,則您可以使用 from_statements() 手動新增權限。
範例:
policy=cr.AwsCustomResourcePolicy.from_statements( statements=[iam.PolicyStatement(actions=[ 'dynamodb:DescribeTable', 'dynamodb:ListTables'], resources=['*'], )] )
相關內容
- 已提問 1 年前lg...
- 已提問 1 年前lg...
- 已提問 2 個月前lg...
- AWS 官方已更新 2 年前
- AWS 官方已更新 3 年前
- AWS 官方已更新 3 年前