[英]How to use Intrinsic Functions in Python AWS CDK?
我正在嘗試在 Python CDK 中使用 Amazon 的 CloudFormation 中的內在函數,但我很難讓它工作。
我正在 CDK 中創建 Lambda 並添加策略聲明。 在此策略聲明中,我授予 Lambda 對 S3 存儲桶的 S3 操作訪問權限,該存儲桶也在其上方的 CDK 中創建。 我只想將此 lambda 權限授予 S3 存儲桶資源(而不是使用resources="*"
或其他東西)。 我意識到在創建存儲桶之前我需要它的 ARN - 所以我問了一位說使用內部函數的同事(他使用 CloudFormation 但沒有使用 CDK)。
這就是我卡住的地方——我不知道如何使用內在函數來獲取存儲桶 ARN 並將其放入策略聲明的資源中。
這是我的代碼:
bucket_arn = core.Fn.get_att("BucketIDHere", "Arn")
event_lambda.add_to_role_policy(
aws_iam.PolicyStatement(
effect=aws_iam.Effect.ALLOW,
actions=[
"s3:PutObject", "s3:GetObject", "s3:DeleteObject",
"s3:ListBucket", "secretsmanager:GetSecretValue", "kms:*"
],
resources=[
bucket_arn
]))
但我越來越
raise JSIIError(resp.error) from JavaScriptError(resp.stack)
jsii.errors.JSIIError: Expected Scalar, got {"$jsii.byref":"@aws-cdk/core.Intrinsic@10012"}
當我嘗試cdk diff
時。 我了解我沒有正確獲取 ARN,但我不知道如何獲取它。 我已經閱讀了文檔並且知道我可能必須使用IResolveable
和IResolveContext
但我使用它們所做的每一次嘗試都失敗了。
如果有人有一個例子或一些解決方案,將不勝感激!
您應該盡可能多地使用高級構造。 如果您在同一個堆棧中創建了一個存儲桶,您可以通過bucket_arn
屬性獲取該存儲桶的 ARN。
my_bucket = _s3.Bucket(self, "my_bucket")
arn = my_bucket.bucket_arn
如果存儲桶不屬於您的堆棧,您也可以將它作為資源導入。
from aws_cdk import aws_s3 as _s3
...
def __init__(self, scope: core.Construct, id: str, **kwargs) -> None:
bucket = _s3.Bucket.from_bucket_name(self, "an-identifier", "my-bucket-name")
event_lambda.add_to_role_policy(
aws_iam.PolicyStatement(
...
resources=[ bucket.bucket_arn ]
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.