मैं वीपीसी के साथ तैनात करने की कोशिश कर रहा हूं और यह मेरा सर्वर रहित है


vpcSettings: &vpcSettings
  vpc: ${self:custom.allVpcSettings.${self:provider.stage}.vpc}

provider:
  name: aws
  runtime: nodejs10.x
  stage: ${opt:stage, 'local'}
  region: us-west-1
  memorySize: 256
  timeout: 30
  deploymentPrefix: fs-sls-${self:provider.stage}-deploy
  deploymentBucket: fs-serverless-deployment
  variables: ${file(.env.${opt:stage, self:provider.stage}.json)}
  environment:
    NODE_ENV: ${self:provider.variables.NODE_ENV}

functions:
  ping:
    handler: src/handler.ping
    description: Let us know if the service is up and running
    events:
      - http:
          path: ping
          method: get
          cors: true
  graphql:
    handler: src/handler.graphqlHandler
    <<: *vpcSettings
    description: One function where all GQL request comes
    memorySize: 1024
    events:
      - http:
          path: graphql
          method: post
          cors: true
      - http:
          path: graphql
          method: get
          cors: true

plugins:
  - serverless-offline

custom:
  serverless-offline:
    port: 6000
  allVpcSettings:
    local:
      vpc: 'This is a dummy value that should be ignored'
    dev:
      vpc:
        securityGroupIds:
          - sg-xxxxxxxxxxxxxxx
        subnetIds:
          - subnet-xxxxxxxxxxxxxxx
          - subnet-xxxxxxxxxxxxxxx
    prod:
      vpc:
        securityGroupIds:
          - sg-xxxxxxxxxxxxxxx
        subnetIds:
          - subnet-xxxxxxxxxxxxxxx
          - subnet-xxxxxxxxxxxxxxx

यह निम्न त्रुटि के साथ विफल रहता है


  Serverless Error ---------------------------------------

  The provided execution role does not have permissions to call CreateNetworkInterface on EC2

  Get Support --------------------------------------------
     Docs:          docs.serverless.com
     Bugs:          github.com/serverless/serverless/issues
     Issues:        forum.serverless.com

  Your Environment Information ---------------------------
     Operating System:          darwin
     Node Version:              10.16.0
     Framework Version:         1.52.0
     Plugin Version:            2.0.0
     SDK Version:               2.1.1

इस उद्देश्य के लिए मैंने जो उपयोगकर्ता बनाया है, उसके पास इसकी अनुमतियों में एडमिनिस्ट्रेटर के साथ-साथ AWSLambdaVPCAccessExecutionRole भी है। यहाँ और क्या अपेक्षित है?

0
Saras Arya 14 फरवरी 2020, 17:28

2 जवाब

यद्यपि इस लैम्ब्डा फ़ंक्शन को तैनाती करने के लिए आपने जो उपयोगकर्ता बनाया है, उसके पास व्यवस्थापक पहुंच है, यदि आप इसे किसी VPC में परिनियोजित कर रहे हैं तो लैम्ब्डा फ़ंक्शन स्वयं को नेटवर्किंग अनुमतियों की आवश्यकता होती है।

इन अनुमतियों को अपने serverless.yml टेम्प्लेट के provider ब्लॉक में जोड़ने का प्रयास करें:

    - Effect: Allow
      Action:
        - ec2:DescribeNetworkInterfaces
        - ec2:CreateNetworkInterface
        - ec2:DeleteNetworkInterface
        - ec2:DescribeInstances
        - ec2:AttachNetworkInterface
      Resource:
        - *

यदि यह काम करता है, तो आप अपने उत्पादन परिवेश के लिए अधिक सीमित अनुमति संरचना परिनियोजित करना चाहेंगे।

0
Aaron Stuyvenberg 16 फरवरी 2020, 19:55
हारून, दुख की बात है कि मेरे लिए काम नहीं किया। तो The provided execution role does not have permissions to call CreateNetworkInterface on EC2 कहने में त्रुटि विफल हो जाती है और फ़ंक्शन सफलतापूर्वक तैनात हो जाता है। सर्वर रहित इन भूमिकाओं का निर्माण कब शुरू करता है? Coz कोड सफलतापूर्वक लोड हो गया है लेकिन यह इसे VPC से कनेक्ट करने में सक्षम नहीं है क्योंकि भूमिका बाहर नहीं निकलती है। क्या यह SLS coz के बाद के संस्करणों में कुछ तय है मेरे पास 1.49.0 . है
 – 
Saras Arya
16 फरवरी 2020, 22:37
सर्वरलेस ने वास्तव में लंबे समय के लिए लैम्ब्डा निष्पादन भूमिका बनाई है, मुझे यकीन नहीं है कि बिल्कुल संस्करण है, लेकिन मुझे लगता है कि यह प्री-वी.1 था। साथ ही आपका पोस्ट किया गया आउटपुट कहता है कि आप v1.52.0 का उपयोग कर रहे हैं। किसी भी तरह से, मुझे संदेह नहीं है कि यह एक ढांचा मुद्दा है। क्या आप सत्यापित कर सकते हैं कि इस लैम्ब्डा फ़ंक्शन के लिए AWS IAM में भूमिका सफलतापूर्वक बनाई गई थी?
 – 
Aaron Stuyvenberg
16 फरवरी 2020, 23:07
मुझे नहीं लगता कि एडब्ल्यूएस लैम्ब्डा में भूमिका बनाई गई थी। इसलिए मैंने 'रोल डॉक्यूमेंट देखें' में अपने अनुमति टैब में चेक किया और मुझे वहां CreateNetworkInterface चीज़ दिखाई नहीं दे रही है। यह मेरे अन्य लैम्ब्डा परिनियोजन में है और मैंने इसे विशेष रूप से कभी नहीं दिया। तो मैंने सोचा कि इसे कैसे हटा दिया गया। मैं इसके आसपास और खुदाई करूंगा।
 – 
Saras Arya
17 फरवरी 2020, 15:20
मैंने ठीक कर दिया। ऊपर मेरा जवाब देखें। संकेत के लिए धन्यवाद।
 – 
Saras Arya
17 फरवरी 2020, 16:13

तो मैंने इसे ठीक कर दिया। इसका मतलब है कि लैम्ब्डा को तैनात करने की भूमिका की अनुमति नहीं है। तो यह भूमिका देने के लिए तथ्य को उबालता है। पहले, पुष्टि करें कि क्या आपकी भूमिका है। छवि में जांचें कि भूमिका कहां देखना है।

एक बार जब आप इसे नहीं पाते हैं। जो आप शायद नहीं करेंगे। भूमिका का नाम लें और IAM -> भूमिकाएं और भूमिका नाम खोजें और चयनित भूमिका में AWSLambdaVPCAccessExecutionRole जोड़ें। इसे इसे आवश्यक अनुमति देनी चाहिए।

अब एसएलएस को तैनात करने का प्रयास करें और इसे काम करना चाहिए।

एक बार आपके पास भूमिका हो जाने के बाद, इसे जोड़कर संपादित करें यहां छवि विवरण दर्ज करें

2
Saras Arya 17 फरवरी 2020, 16:13
जब मैं एक कस्टम संसाधन निर्दिष्ट करता हूं, मेरे मामले में एक विशिष्ट s3 बाल्टी में यह समाधान मेरे लिए काम नहीं करता है। क्या आपके पास कोई सुराग है कि मैं इसे कैसे हल कर सकता हूं? त्रुटि संदेश वही है, लेकिन यह तब काम करता है जब "संसाधन": "*" सेट हो।
 – 
ricardogobbo
6 फरवरी 2021, 07:46