Хобрук: Ваш путь к мастерству в программировании

Как использовать лямду для развертывания последнего кода, помещенного в s3, в функцию лямды

Я пытаюсь развернуть свою лямбда-функцию каждый раз, когда я обновляю корзину s3, содержащую ее.

Если я знаю, что у меня есть последний лямбда-код zip в корзине, я могу просто использовать формирование облака, чтобы автоматизировать создание и развертывание лямбда-функции.

{
"AWSTemplateFormatVersion": "2010-09-09",
"Description": "AWS CloudFormation CloudWatch Log Janitor Demo Stack",
"Resources": {
    "TestLamdaRole": {
        "Type": "AWS::IAM::Role",
        "Properties": {
            "AssumeRolePolicyDocument": {
                "Version": "2012-10-17",
                "Statement": [{
                    "Effect": "Allow",
                    "Principal": {
                        "Service": [
                            "lambda.amazonaws.com"
                        ]
                    },
                    "Action": [
                        "sts:AssumeRole"
                    ]
                }]
            },
            "Path": "/"
        }
    },
    "EbsBackupExecutionPolicy": {
        "DependsOn": [
            "TestLamdaRole"
        ],
        "Type": "AWS::IAM::Policy",
        "Properties": {
            "PolicyName": "hamedlamdapolicytest",
            "Roles": [{
                "Ref": "TestLamdaRole"
            }],
            "PolicyDocument": {
                "Version": "2012-10-17",
                "Statement": [{
                        "Effect": "Allow",
                        "Action": [
                            "logs:*"
                        ],
                        "Resource": [
                            "arn:aws:lambda:us-east-1:1111111111111:function:*"
                        ]
                    },
                    {
                        "Effect": "Allow",
                        "Action": [
                            "ec2:Describe*"
                        ],
                        "Resource": [
                            "*"
                        ]
                    }
                ]
            }
        }
    },
    "LambdaFuction": {
        "Type": "AWS::Lambda::Function",
        "Properties": {
            "Code": {
                "S3Bucket": "lambda-dep-test",
                "S3Key": "index.zip"
            },
            "Role": {
                "Fn::GetAtt": [
                    "TestLamdaRole",
                    "Arn"
                ]
            },
            "Timeout": 60,
            "Handler": "lambda_function.handler",
            "Runtime": "nodejs6.10",
            "MemorySize": 128,
            "FunctionName": "stg1-test"
        }
    }
}

}

Но проблема в том, что как только я запускаю приведенный выше лямбда-код, всякий раз, когда пользователь помещает что-то в корзину, последний код не развертывается автоматически. Я знаю, что это связано с лямбдой, но я потерялся и не знаю, какой подход использовать и с чего начать. Не могли бы вы пролить свет на это?


  • Не существует простого способа добиться этого. Создайте событие в S3. Всякий раз, когда добавляется новый файл, событие запускает другую функцию Lambda, которая обновляет исходную функцию (в данном случае: stg1-test). 17.10.2017

Ответы:


1

В качестве альтернативы используйте такие фреймворки, как serverless. Они упрощают развертывание с помощью простых команд и легко интегрируются с вашей CI. https://serverless.com

17.10.2017
  • Спасибо, приятно узнать об этой структуре. но я хочу автоматического развертывания без вмешательства пользователя. Фреймворк так делает? 18.10.2017
  • Serverless развертывает zip-файл в настроенном сегменте s3 и запускает лямбда-развертывание. В вашем случае вам все равно потребуется взаимодействие с пользователем для загрузки zip-файла на s3. 18.10.2017

  • 2

    Вот как я решал эту проблему:

    • Включить управление версиями в сегменте lambda-dep-test
    • В объявлении AWS::Lambda::Function в шаблоне CloudFormation используйте свойство S3ObjectVersion в разделе Code, чтобы указать, какую версию следует развернуть.

    Теперь вы можете либо обновлять шаблон и указывать новый S3ObjectVersion каждый раз, когда лямбда-код обновляется в корзине, либо вы можете объявить его как параметр в своем шаблоне и ссылаться на него в S3ObjectVersion. Затем для обоих решений можно создать сценарий с упаковкой и загрузкой вашего ZIP-файла.

    18.10.2017
  • Привет, было бы здорово, если бы вы могли привести пример объявления S3ObjectVersion в качестве параметра для шаблона в codepipeline, я видел документ aws, касающийся Fn::GetArtifactAtt, но не смог узнать, как я могу использовать его для этого случая. Вы можете помочь с этим? 30.04.2021
  • Новые материалы

    Я собираюсь научить вас Python шаг за шагом
    Привет, уважаемый энтузиаст Python! 👋 Готовы погрузиться в мир Python? Сегодня я приготовил для вас кое-что интересное, что сделает ваше путешествие более приятным, чем шарик мороженого в..

    Альтернатива шаблону исходящих сообщений для архитектуры микросервисов
    Познакомьтесь с двухэтапным сообщением В этой статье предлагается альтернативный шаблон для папки Исходящие : двухэтапное сообщение. Он основан не на очереди сообщений, а на..

    React on Rails
    Основное приложение Reverb - это всеми любимый монолит Rails. Он отлично обслуживает наш API и уровень просмотра трафика. По мере роста мы добавляли больше интерактивных элементов..

    Что такое гибкие методологии разработки программного обеспечения
    Что представляют собой гибкие методологии разработки программного обеспечения в 2023 году Agile-методологии разработки программного обеспечения заключаются в следующем: И. Введение A...

    Ториго  — революция в игре Го
    Наш следующий вызов против ИИ и для ИИ. Сможет ли он победить людей в обновленной игре Го? Обратите внимание, что в следующей статье AI означает искусственный интеллект, а Goban  —..

    Простое развертывание моделей с помощью Mlflow — Упаковка классификатора обзоров продуктов NLP от HuggingFace
    Как сохранить свои модели машинного обучения в формате с открытым исходным кодом с помощью MLFlow, чтобы позже получить возможность легкого развертывания. Сегодня модели упаковки имеют несколько..

    Математика и интуиция - Часть 1
    У каждой математической формулы есть доказательство. Часто эти доказательства слишком сложно понять, поскольку многие из них основаны на индукции, некоторые - на очень сложных наблюдениях, а..