Come posso effettuare una chiamata SDK AWS da un progetto CDK utilizzando l'interfaccia AwsSdkCall?

3 minuti di lettura
0

Desidero effettuare chiamate SDK AWS dal mio progetto Kit di sviluppo per il cloud AWS (AWS CDK) utilizzando l'interfaccia AwsSdkCall.

Descrizione breve

Puoi utilizzare le chiamate utilizzando un Kit di sviluppo software AWS (SDK AWS) per scenari di implementazione dello stack come:

  • Recuperare le configurazioni mentre uno stack viene creato e aggiornato dinamicamente.
  • Recuperare gli attributi delle risorse che non sono supportati nei valori restituiti dalle risorse in AWS CloudFormation.
  • Apportare piccole patch o modifiche alla configurazione non supportate da AWS CloudFormation.

Puoi attivare chiamate SDK AWS su diversi eventi operativi dello stack CloudFormation come Crea, Elimina o Aggiorna. Non è necessario configurare l'accesso e gli strumenti per la pipeline di implementazione per effettuare chiamate SDK AWS. Il runtime di SDK AWS è configurato completamente dal Kit di sviluppo per il cloud AWS (AWS CDK). Inoltre, puoi personalizzare e limitare l'accesso alla funzione AWS Lambda dietro la risorsa personalizzata.

Risoluzione

Nota: i seguenti esempi in questa risoluzione utilizzano Python. Assicurati di utilizzare comandi specifici per il linguaggio di programmazione che stai utilizzando.

Per effettuare una chiamata SDK AWS utilizzando AwsSdkCall, devi dichiarare tre parametri di base:

  • Service: è il servizio AWS che intendi chiamare. I valori fanno distinzione tra lettere maiuscole e minuscole.
  • Action: è la chiamata API/Action che intendi effettuare. Di solito segue un modello CamelCase. I valori fanno distinzione tra lettere maiuscole e minuscole.
  • Parameters: sono i parametri opzionali che trasmetti durante la chiamata API/Action. È possibile dichiarare i parametri come variabili, quindi trasmetterli all'interfaccia simile a un oggetto JSON per il payload dell'API. Per ulteriori informazioni, consulta AWS SDK per JavaScript.

1.    Recupera un ID Amazon Machine Image dall'agente AWS Systems Manager:

Nota: nell'esempio seguente importa custom_resources come cr e aws_cdk come 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'))

Nota: è possibile fare riferimento alla risposta della chiamata API con il parametroget_response_field.

2.    Crittografa il gruppo di log Lambda utilizzando una chiave KMS personalizzata:

Nota: nell'esempio seguente, da aws_cdk importa aws_lambda come lambda_, custom_resources come cr e aws_kms come 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
                                                 )
                                                 )

Nota: puoi utilizzare la policy di proprietà per concedere le autorizzazioni alla funzione Lambda dietro la risorsa personalizzata per effettuare chiamate API. Se usi from_sdk_calls(), ogni chiamata API viene tradotta nelle autorizzazioni AWS Identity and Access Management (IAM) corrispondenti. Se le autorizzazioni corrette non vengono aggiunte dopo la sintesi, puoi aggiungere manualmente le autorizzazioni usando from_statements().

Esempio:

policy=cr.AwsCustomResourcePolicy.from_statements(
                                                     statements=[iam.PolicyStatement(actions=[
                                                         'dynamodb:DescribeTable', 'dynamodb:ListTables'],
                                                         resources=['*'],
                                                     )]
                                                 )
AWS UFFICIALE
AWS UFFICIALEAggiornata 10 mesi fa