在 cloudformation 中从远程 API 获取参数值

Get values for parameters from remote API in cloudformation

我们有一个远程 API(不是 AWS),我们可以从中读取参数值。 我们可以在 cloudformation 中读取这些值并将它们用作值吗?

或者是获取值并通过使用 aws cli 并将值作为部署命令中的参数值传递来提供它们的唯一可能方法。

您可以使用 cloudformation custom resource 调用 lambda 函数解析 API 输出并将其发送回 cloudformation 并通过 !GetAtt

获取它

Cloudformation:

    Resources:
      API:
        Type: Custom::API
        Version: '1.0'
        Properties:
          ServiceToken: arn:aws:lambda:us-east-1:acc:function:CALL_API
    Outputs:
      Status:
        Value:
          Fn::GetAtt:
          - API
          - Data

Lambda 脚本:

import json
import cfnresponse
import boto3
import urllib.request 
from botocore.exceptions import ClientError

def handler(event, context):
    responseData = {}
    try:
        with urllib.request.urlopen("http://maps.googleapis.com/maps/api/geocode/json?address=google") as url:
            data = json.loads(url.read().decode())
        print(data)
        responseData['Data'] = data
        status=cfnresponse.SUCCESS
    except ClientError as e:
        responseData['Data'] = "FAILED"
        status=cfnresponse.FAILED
        print("Unexpected error: %s" % e)
    cfnresponse.send(event, context, status, responseData, "CustomResourcePhysicalID")