CDK에서 us-east-1 외부의 Lambda@Edge 사용
배경
ap-southeast-2는 제 고향 지역입니다.
us-east-1은 CDN 및 기타 글로벌 리소스를 배포하는 곳입니다.
내 OAI와 S3가 내 홈 리전에 있어야 하므로 CloudFront는 ap-southeast-2의 스택에서 배포되었습니다. 문제)
참고: Lambda@Edge 함수는 CloudFront 배포 및 스택의 리전에 관계없이 us-east-1 리전에서 생성되어야 합니다.
자세히 살펴보면 us-east-1에 Edge 기능을 배포하면 일반 람다 구성을 사용할 수 있습니다.
func = lambda_.Function(self, "EdgeFunction",
runtime=lambda_.Runtime.NODEJS_12_X,
handler="index.handler",
code=lambda_.Code.from_asset(<path_of_your_lambda@edge function>)
)
나와 같은 스택 구조가 있는 경우 ARN 또는 관련 참조를 SSM에 업로드하고 리소스가 리전에서 리전으로 전달되도록 해야 합니다.
아래 방법으로 엄지 손가락
EdgeFunction
edge_lambda_function = cloudfront.experimental.EdgeFunction(self, "edge_lambda_function",
runtime=lambda_.Runtime.NODEJS_12_X,
handler="index.handler",
code=lambda_.Code.from_asset(<path_of_your_lambda@edge function>),
)
이제 동일한 스택에서 기본 멘토드에서 참조할 수 있습니다.
cdn_distribution = cloudfront.Distribution(
self,
"cdn_distribution",
default_behavior=cloudfront.BehaviorOptions(origin=my_origin),
additional_behaviors={
"images/*": cloudfront.BehaviorOptions(
origin=my_origin,
edge_lambdas=[cloudfront.EdgeLambda(
function_version=edge_lambda_function.current_version,
event_type=cloudfront.LambdaEdgeEventType.VIEWER_REQUEST,
include_body=True
)
]
)
}
)
문제
함수에 연결된 역할이 지정된 CloudFront EdgeFunction을 사용할 때,
edge_lambda_role = iam.Role(
self,
"edge-lambda-iam-role",
assumed_by=iam.CompositePrincipal(
iam.ServicePrincipal('lambda.amazonaws.com'),
iam.ServicePrincipal('edgelambda.amazonaws.com')
),
managed_policies=[
iam.ManagedPolicy.from_aws_managed_policy_name('service-role/AWSLambdaBasicExecutionRole')
]
)
오류 -
Adding this dependency ("edge-lambda-stack-xxxxxxxxxxxxxxxxxxxxxxxxx/edge-fucntion/Resource" depends on "cloudfront/edge-iam-role/Resource") would create a cyclic reference.
이것은 가장 까다로운 부분이며 무슨 일이 일어나고 있는지 이해하는 데 시간이 걸렸습니다.
해결책
약간의 조사 후 누군가 언급했습니다.
The created us-east-1 stack must have a dependency on the "main" stack, as the main stack can't be created first; doing so would mean the function ARN isn't available to read and that the Distribution would not deploy correctly. Creating the role in the main stack certainly leads to a circular dependency.
따라서 이를 제거하고 Lambda@Edge 구성이 즉시 생성하도록 해야 합니다(우리가 정의한 IAM 역할보다 더 나은 것 같습니다. 잠시 후에 설명하겠습니다)
내부적으로 EdgeFunction 메서드는 다음을 수행합니다.
이 모든 작업을 수행하는 데 2시간이 걸렸습니다. 해결책을 찾는 것을 즐기며 이것이 도움이 되기를 바랍니다.
Reference
이 문제에 관하여(CDK에서 us-east-1 외부의 Lambda@Edge 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/desawsume/making-use-of-lambdaedge-outside-of-us-east-1-in-cdk-c6a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)