Перекрестная ссылка в лямбда-функции - PullRequest
0 голосов
/ 02 апреля 2020

Обходя по кругу и вырывая себе волосы на этом, любые указатели очень ценятся.

У меня есть стек CloudFormation, который создает экземпляр EC2. Я вывожу его идентификатор следующим образом:

 Outputs:
  DevBoxInstanceId:
    Description: The instance ID of the EC2 Dev_Box.
    Value: !Ref TestInstance
    Export: 
      Name: DevBoxId

Теперь в консоли я вижу, что это выдает идентификатор так, как мне бы хотелось. Моя проблема в том, что я не могу понять, как ссылаться на это во втором стеке. Я не использовал Fn :: ImportValues, но по понятным причинам я бы хотел. Мой второй стек создает лямбда-функцию, которая останавливает экземпляр. Я хочу сослаться на DevBoxId внутри функции - я что-то не так понял здесь? Я пробовал несколько вариантов следующего:

LambdaFunctionStop:
 Type: AWS::Lambda::Function
 Properties: 
  Runtime: python3.7
  Timeout: 30
  Code:
    ZipFile: |
      import boto3
      region = 'eu-west-2'
      instances = ['!ImportValue DevBoxId'] 
      ec2 = boto3.client('ec2', region_name=region)

      def handler(event, context):
        ec2.stop_instances(InstanceIds=instances)
        print('stopped your instances: ' + str(instances))
  Description: Automatically stop Dev_Env instances based on specified schedule.
  Handler: index.handler 
  Role: !GetAtt 'IAMRole.Arn'

Соответствующая часть, по которой я обращаюсь за помощью:

instances = ['!ImportValue DevBoxId']

Как мне написать это правильно?

Ответы [ 2 ]

0 голосов
/ 04 апреля 2020

Вы можете передать идентификатор экземпляра в переменные окружения лямбды следующим образом: enter image description here и затем получить доступ к коду, если вы используете код в зависимости от способа чтения переменных env

0 голосов
/ 02 апреля 2020

Ваш компонент ZipFile должен быть строкой. Таким образом, вам нужно будет обратиться к «Экспорт значений» вне этой строки, а затем подставить значение в этой строке. Попробуйте ниже

LambdaFunctionStop:
 Type: AWS::Lambda::Function
 Properties: 
  Runtime: python3.7
  Timeout: 30
  Code:
    ZipFile: 
      !Sub
        - |
          import boto3
          region = 'eu-west-2'
          instances =  '${devboxvalue}'
          ec2 = boto3.client('ec2', region_name=region)

          def handler(event, context):
           ec2.stop_instances(InstanceIds=instances)
           print('stopped your instances: ' + str(instances))
        - { devboxvalue : !ImportValue "DevBoxId" }
  Description: Automatically stop Dev_Env instances based on specified schedule.
  Handler: index.handler 
  Role: !GetAtt 'IAMRole.Arn'
...