AWS CDK ssm.CfnAssociation определяют параметры - PullRequest
0 голосов
/ 10 октября 2019

Я застрял в создании ssm.CfnAssociation из-за того, что я новичок в AWS CDK и CloudFormation. Я пытаюсь создать задачу диспетчера состояний AWS Systems Manager (AWS-RunAnsiblePlaybook) с помощью ssm.CfnAssociation, но у меня возникло недопонимание, как определить параметры? Я хочу установить в параметрах URL для s3 для playbook. Начиная с документации CDK это должно быть: parameters (Union[IResolvable, None, Mapping[str, Union[IResolvable, Forwardref]]]) – AWS::SSM::Association.Parameters.

По докам AWS Type: Map of ParameterValues -> { "ParameterValues" : [ String, ... ] }

Я пытался определить различные типы параметров, но у меня всегда ошибка: Value did not match any type in union: Expected object reference, got {"plybook":"s3-url"},Value did not match any type in union: Expected object reference, got "s3-url",Expected object reference, got "s3-url" Если я использую ssm.CfnAssociation.ParameterValuesProperty для сопоставления с ключом playbookurl, у меня возникает ошибка на этапе развертывания: SSMAssociation/SSMAssociation (SSMAssociation6148DA19) Value of {Parameters} must be a map where each value is a list of {String}

Не могли бы вы помочь мне с этим, потому что понятия не имеюкакой тип и как должен соответствовать параметрам? Спасибо.

class SSMAssociation(core.Construct):

def __init__(self, scope: core.Construct, id: str, 
ssm_association_name: str, **kwargs) -> None:
    super().__init__(scope, id, **kwargs)

    ssm_param_values = ssm.CfnAssociation.ParameterValuesProperty(
        parameter_values=["s3://test-ansible-test1-pl1/playbook1.yml"],
    )

    ssm_tartgets = ssm.CfnAssociation.TargetProperty(
        key="CDK-Type",
        values="EC2Instance",
    ),

    ssm_association = ssm.CfnAssociation(
        self, "SSMAssociation",
        name=ssm_association_name,
        output_location=None,
        parameters={
            "playbookurl": ssm_param_values,
        },

        targets=None,
    )

1 Ответ

0 голосов
/ 18 октября 2019

На данный момент обойти эту проблему - это способ использовать CfnInclude вместо CfnAssociation. Но, по моему мнению, было бы лучше использовать CfnAssociation надлежащим образом.

class SSMAssociationConstruct(core.Construct):

def __init__(self, scope: core.Construct, id: str, 
             playbook_url: str,
             ec2_tag_key: str,
             ec2_tag_value: str,
             **kwargs) -> None:
    super().__init__(scope, id, **kwargs)

    if playbook_url is not None:
        cfn_include = core.CfnInclude(
            self, "CfnInclude",
            template={
                "Resources": {
                    "SSMAssociation": {
                        "Type" : "AWS::SSM::Association",
                        "Properties" : {
                            "AssociationName" : "SSMRunAnsible" ,
                            "Name" : "AWS-RunAnsiblePlaybook",
                            "ScheduleExpression": "cron(0 0/30 * * * ? *)",
                            "Parameters" : {
                                "playbookurl":[playbook_url],
                            },
                            "Targets" : [{
                                "Key": f"tag:{ec2_tag_key}",
                                "Values": [f"{ec2_tag_value}"]
                            }]
                          }
                    }
                }
            }
        )
...