Nie można wdrożyć tej samej lambdy w wielu regionach z zasobnika s3
Wdrażamy lambdę przy użyciu szablonów SAM CloudFormation.
Chcielibyśmy spakować lambdę w wiadrze S3, a następnie wdrożyć AWS :: Serverless :: Function w wielu regionach.
Jednak kod lambda musi znajdować się w tym samym regionie, w którym został wdrożony.
AWS udokumentowało, jak obejść ten problem, zasadniczo tworząc inną formę lambda.
CopyZipsaby skopiować plik zip do każdego regionu, w którym chcesz go wdrożyć, i nowego zasobnika s3
LambdaZipsBucketw każdym regionie, aby go wstawić. Wtedy twoja funkcja lambda będzie wyglądać następująco:
MyFunction:
DependsOn: CopyZips
Type: AWS::Lambda::Function
Properties:
Code:
S3Bucket: !Ref 'LambdaZipsBucket'
S3Key: !Sub '${QSS3KeyPrefix}functions/packages/MyFunction/lambda.zip'
Problem polega na tym, że zależy to od wiedzy o dokładnej ścieżce do pliku ZIP. W naszym przypadku używamy substytucji szablonu SAM, więc nigdy nie określamy segmentu S3 ani klucza S3 - zamiast tego nasza funkcja wygląda tak:
MyFunction:
Type: 'AWS::Serverless::Function'
Properties:
CodeUri: ./MyCompany.Service.Broker.Public
Segment S3 nie jest w ogóle wspomniany w szablonie CloudFormation. A lambda, które możesz zobaczyć patrząc na wiadro, ma taką nazwę:
ApiFunction-CodeUri-2342873t823t482346-97346583746583745.zipDzieje się tak, ponieważ istnieje wiele podobnych archiwów zip utworzonych w czasie kompilacji. Model bezserwerowy szablonu dekoduje to i jeśli spojrzymy na zakładkę szablonu w konsoli CloudFormation i wybierzemy „wyświetl przetworzony szablon”, zobaczymy, że pola S3Bucket i S3Key są poprawne.
Kompilacja jest wykonywana w usłudze Azure DevOps przy użyciu platformy
AmazonWebServices.aws-vsts-tools.LambdaNETCoreDeploy.LambdaNETCoreDeploy@1zadanie, w którym określamy nazwę segmentu i region, ale znowu nie nazwę pliku zip.
Biorąc pod uwagę, że nie mam dostępu w szablonie do dokładnej ścieżki do pliku zip lambda, w jaki sposób powinienem zautomatyzować kopiowanie pliku zip do lokalnego kosza?
AKTUALIZACJA:
Próbowałem dodać następujący wiersz we właściwościach tuż przed CodeUri:
Code:
S3Bucket: !Ref 'LambdaZipsBucket'
Jednak podczas wdrażania wystąpił następujący błąd:
Resource with id [ApiFunction] is invalid. property Code not defined for resource of type AWS::Serverless::Function
Nie znaleziono powiązanych wyników
Zaproszony:
Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się
1 odpowiedzi
Anonimowy użytkownik
Potwierdzenie od: