es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Creando despliegues de desarrollo y producción utilizando CDK.

Nuevo en AWS CDK, así que por favor ten paciencia conmigo. Estoy tratando de crear un CDK de implementación múltiple, en el cual el entorno de desarrollo debe desplegarse en la Cuenta A y el entorno de producción en la Cuenta B.

He creado 2 stacks con los respectivos números de cuenta, entre otros detalles.

mktd_dev_stack = Mktv2Stack(app, “Mktv2Stack-dev”,

env=cdk.Environment(account=’#####’, region=’us-east-1′),
stack_name = “myStack-Dev”,

Para más información, consulta https://docs.aws.amazon.com/cdk/latest/guide/environments.html

)

El entorno de producción es similar, pero con la cuenta de producción y un nombre diferente. Cuando los ejecute, planeo hacer

cdk deploy Mktv2Stack-dev

y similares para producción.

Estoy usando CDK 2.xx en Python.

Mi pregunta es si esta configuración me permite pasar un parámetro, digamos “details”, que es un objeto “dict” con nombres y criterios para los recursos que se configurarán. ¿O hay alguna forma de pasar un parámetro/diccionario desde app.py a mi programa_name.py para que pueda buscar valores en el diccionario y asignarlos a los recursos correspondientes?

Saludos, Tanmay

Tags:  

Answer

  1. Avatar for davy.ai

    Sí, puedes definitivamente pasar parámetros a tus stacks de CDK utilizando el Contexto de AWS CDK. En tu archivo app.py, puedes definir un diccionario con los parámetros y valores requeridos:

    params = {
        "dev": {
            "details": {
                "name": "dev",
                "criteria": "low"
             }
        },
        "prod": {
            "details": {
                "name": "prod",
                "criteria": "high"
             }
        }
    }
    

    Luego, puedes pasar estos parámetros a tus stacks agregándolos al contexto del entorno, de la siguiente manera:

    from aws_cdk.core import App, Environment
    
    app = App()
    
    # stack de desarrollo
    dev_env = Environment(account='dev_account_id', region='us-east-1')
    dev_env.context.update(params["dev"])
    mktd_dev_stack = Mktv2Stack(app, "Mktv2Stack-dev", env=dev_env)
    
    # stack de producción
    prod_env = Environment(account='prod_account_id', region='us-east-1')
    prod_env.context.update(params["prod"])
    mktd_prod_stack = Mktv2Stack(app, "Mktv2Stack-prod", env=prod_env)
    
    app.synth()
    

    En este ejemplo, actualizamos el contexto del entorno para cada stack con los parámetros correspondientes del diccionario params. Esto hará que los parámetros estén disponibles para los constructs de tu stack.

    En tu archivo program_name.py, puedes acceder a estos parámetros utilizando el método node.try_get_context(), de la siguiente manera:

    from aws_cdk.core import Construct, Duration
    
    class MyConstruct(Construct):
        def __init__(self, scope, id, details, **kwargs):
            super().__init__(scope, id, **kwargs)
    
            # acceder a los parámetros del contexto
            name = self.node.try_get_context("name")
            criteria = self.node.try_get_context("criteria")
    
            # utilizar los parámetros para configurar el recurso
            resource = MyResource(self, "MyResource",
                                  name=name,
                                  criteria=criteria,
                                  timeout=Duration.seconds(10))
    

    Aquí, definimos una clase MyConstruct que recibe el parámetro details, el cual debe contener los valores de name y criteria. Luego, utilizamos el método node.try_get_context() para acceder a estos valores del contexto y utilizarlos para configurar nuestro recurso.

    Ten en cuenta que necesitarías definir tu propia clase de recurso, MyResource, en este ejemplo, para utilizar estos parámetros.

Comments are closed.