Global outage event
If you're experiencing issues with your AWS services, then please refer to the AWS Health Dashboard. You can find the overall status of ongoing outages, the health of AWS services, and the latest updates from AWS engineers.
如何使用介面 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 年前
- 已提問 3 年前