我想通過 Pulumi 將 S3 存盤桶 ID 作為引數傳遞給 AWS Lambda。但是,Pulumi 傳遞了這個引數On Build,所以我在 Lambda 中而不是 S3 路徑中獲取了一個 Object 參考。
我的代碼看起來像這樣
bucket = s3.Bucket(resource_name="bucket", acl="private")
lambda_func = lambda_.Function("Function",
role=lambda_role.arn,
package_type="Image",
image_uri=docker.image_name,
image_config={"commands": ["api/main.handler"]},
vpc_config={"subnet_ids": private_subnet_ids,
"security_group_ids": [internet_access.id],
},
environment=lambda_.FunctionEnvironmentArgs(
variables={"STORE_PATH": f"s3://s{bucket.id}/api"})
)
根據 Pulumi檔案:
包含字串的輸出不能直接用于字串連接等操作。
所以我嘗試了推薦的方法,如:
bucket_url = Output.all(bucket.id).apply(lambda l: f"http://{l[0]}/")
或者
url = Output.concat("http://", bucket.id, "/")
歡迎任何幫助。先謝謝大家。
uj5u.com熱心網友回復:
最后一種方法應該可以正常作業。請注意,這bucket.id只是存盤桶的名稱,您需要使用它構建 S3 訪問 URL,例如
url = Output.concat("https://", bucket.id, ".s3.us-west-2.amazonaws.com")
# or url = Output.concat("s3://", bucket.id)
如果這仍然不能滿足您的要求,您可以匯出 的值url以查看它的錯誤(或將結果發布到您的問題)。
export('url', url)
uj5u.com熱心網友回復:
發生這種情況是因為 lambda 函式的環境變數欄位需要一個字串。我們需要告訴 Pulumi 確保桶 id 已決議(即,桶已完成創建并且輸出已回傳)
如果您Output.concat像這樣將 傳遞給 lambda 函式,它會起作用:
lambda_func = aws.lambda_.Function(
"function",
runtime="python3.7",
role=role.arn,
handler="hello_world.handler",
code=pulumi.AssetArchive({".": pulumi.FileArchive(".")}),
environment=aws.lambda_.FunctionEnvironmentArgs(
variables={"STORE_PATH": pulumi.Output.concat("s3://", bucket.id, "/")}
),
)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/403111.html
標籤:
