在 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")
我们有一个远程 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")