¿Cómo puedo hacer una llamada al SDK de AWS desde un proyecto de CDK mediante la interfaz AWSdkCall?

3 minutos de lectura
0

Quiero realizar llamadas al SDK de AWS desde mi proyecto del kit de desarrollo en la nube de AWS (AWS CDK) mediante la interfaz AWSSDKcall.

Descripción breve

Puede usar las llamadas del kit de desarrollo de software de AWS (AWS SDK) para escenarios de implementación de pilas, como:

  • Recuperar configuraciones mientras se crea y actualiza una pila de forma dinámica.
  • Recuperar los atributos de los recursos que no se admiten en los valores devueltos de los recursos de AWS CloudFormation.
  • Realizar pequeños parches o cambios de configuración que no sean compatibles con AWS CloudFormation.

Puede activar llamadas al SDK de AWS en diferentes eventos de operación de pila de CloudFormation, como Crear, Eliminar o Actualizar. No necesita configurar el acceso ni las herramientas para su canalización de implementación para realizar llamadas al SDK de AWS. El AWS Cloud Development Kit (AWS CDK) configura completamente el tiempo de ejecución del SDK de AWS. Además, puede personalizar y limitar el acceso a la función AWS Lambda detrás del recurso personalizado.

Resolución

Nota: Los siguientes ejemplos de esta resolución utilizan Python. Asegúrese de usar comandos específicos del lenguaje de programación que esté usando.

Para realizar una llamada al SDK de AWS mediante AWSdkCall, debe declarar tres parámetros básicos:

  • Servicio: este es el servicio de AWS al que desea llamar. Los valores distinguen entre mayúsculas y minúsculas.
  • Acción: esta es la llamada a la API/acción que pretende realizar. Esto suele seguir el patrón de letra de caja de camello. Los valores distinguen entre mayúsculas y minúsculas.
  • Parámetros: estos son los parámetros opcionales que se pasan al realizar la llamada a la API/acción. Puede declarar los parámetros como una variable y, a continuación, pasarlos a la interfaz similar a un objeto JSON para la carga útil de la API. Para obtener más información, consulte AWS SDK for JavaScript.

1.    Recupere un ID de imagen de máquina de Amazon del agente de AWS Systems Manager:

Nota: En el siguiente ejemplo, importe custom_resources como cr y aws_cdk como 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: Puede hacer referencia a la respuesta de la llamada a la API con el parámetro get_response_field.

2.    Cifre el grupo de registros de Lambda con una clave KMS personalizada:

Nota: En el siguiente ejemplo, desde aws_cdk importe aws_lambda como lambda_, custom_resources como cr y aws_kms como 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: Puede usar la política de propiedades para conceder permisos a la función de Lambda detrás del recurso personalizado para realizar llamadas a la API. Si usa from_sdk_calls(), cada llamada a la API se traduce a los permisos de AWS Identity and Access Management (IAM) correspondientes. Si no se agregan los permisos correctos después de la síntesis, puede agregar manualmente los permisos mediante from_statements().

Ejemplo:

policy=cr.AwsCustomResourcePolicy.from_statements(
                                                     statements=[iam.PolicyStatement(actions=[
                                                         'dynamodb:DescribeTable', 'dynamodb:ListTables'],
                                                         resources=['*'],
                                                     )]
                                                 )
OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un año