How to Connect EntityFramework Core to Multiple Google CloudSQL Instances Using CloudSQL Proxy?









up vote
2
down vote

favorite












I have 2 Postgres databases each in their own CloudSQL instance and a .NET web app running in GKE.



Goal: Connect web app utilizing EntityFramework Core to both CloudSQL instances using a single CloudSQL proxy.



I followed this setup and modified it following this S.O. answer.



There is an EF Core DbContext for each CloudSQL Instance.
The context connections are set using 2 environment variables:



new Context1(

optionsBuilder.UseNpgsql(Environment.GetEnvironmentVariable("CONNECTION_1"));
);

new Context2(

optionsBuilder.UseNpgsql(Environment.GetEnvironmentVariable("CONNECTION_2"));
);


The environment variables are set as:



CONNECTION_1 = "Host=127.0.0.1;Port=5432;Database=postgres;Username=postgres;Password=password"

CONNECTION_2 = "Host=127.0.0.1;Port=5432;Database=postgres;Username=postgres;Password=password2"


Current Behavior:



Context1 interacts with CloudSQL instance1 as normal.



Context2 throws PostgresException "42P01: relation my_Table_Name does not exist." when trying to access a table.



Note: "my_Table_Name" is a table in CloudSQL instance2



This leads me to believe Context2 is trying to access CloudSQL instance1 instead of instance2.



How can I point Context2 through the SQL Proxy to CloudSQL instance2?










share|improve this question



























    up vote
    2
    down vote

    favorite












    I have 2 Postgres databases each in their own CloudSQL instance and a .NET web app running in GKE.



    Goal: Connect web app utilizing EntityFramework Core to both CloudSQL instances using a single CloudSQL proxy.



    I followed this setup and modified it following this S.O. answer.



    There is an EF Core DbContext for each CloudSQL Instance.
    The context connections are set using 2 environment variables:



    new Context1(

    optionsBuilder.UseNpgsql(Environment.GetEnvironmentVariable("CONNECTION_1"));
    );

    new Context2(

    optionsBuilder.UseNpgsql(Environment.GetEnvironmentVariable("CONNECTION_2"));
    );


    The environment variables are set as:



    CONNECTION_1 = "Host=127.0.0.1;Port=5432;Database=postgres;Username=postgres;Password=password"

    CONNECTION_2 = "Host=127.0.0.1;Port=5432;Database=postgres;Username=postgres;Password=password2"


    Current Behavior:



    Context1 interacts with CloudSQL instance1 as normal.



    Context2 throws PostgresException "42P01: relation my_Table_Name does not exist." when trying to access a table.



    Note: "my_Table_Name" is a table in CloudSQL instance2



    This leads me to believe Context2 is trying to access CloudSQL instance1 instead of instance2.



    How can I point Context2 through the SQL Proxy to CloudSQL instance2?










    share|improve this question

























      up vote
      2
      down vote

      favorite









      up vote
      2
      down vote

      favorite











      I have 2 Postgres databases each in their own CloudSQL instance and a .NET web app running in GKE.



      Goal: Connect web app utilizing EntityFramework Core to both CloudSQL instances using a single CloudSQL proxy.



      I followed this setup and modified it following this S.O. answer.



      There is an EF Core DbContext for each CloudSQL Instance.
      The context connections are set using 2 environment variables:



      new Context1(

      optionsBuilder.UseNpgsql(Environment.GetEnvironmentVariable("CONNECTION_1"));
      );

      new Context2(

      optionsBuilder.UseNpgsql(Environment.GetEnvironmentVariable("CONNECTION_2"));
      );


      The environment variables are set as:



      CONNECTION_1 = "Host=127.0.0.1;Port=5432;Database=postgres;Username=postgres;Password=password"

      CONNECTION_2 = "Host=127.0.0.1;Port=5432;Database=postgres;Username=postgres;Password=password2"


      Current Behavior:



      Context1 interacts with CloudSQL instance1 as normal.



      Context2 throws PostgresException "42P01: relation my_Table_Name does not exist." when trying to access a table.



      Note: "my_Table_Name" is a table in CloudSQL instance2



      This leads me to believe Context2 is trying to access CloudSQL instance1 instead of instance2.



      How can I point Context2 through the SQL Proxy to CloudSQL instance2?










      share|improve this question















      I have 2 Postgres databases each in their own CloudSQL instance and a .NET web app running in GKE.



      Goal: Connect web app utilizing EntityFramework Core to both CloudSQL instances using a single CloudSQL proxy.



      I followed this setup and modified it following this S.O. answer.



      There is an EF Core DbContext for each CloudSQL Instance.
      The context connections are set using 2 environment variables:



      new Context1(

      optionsBuilder.UseNpgsql(Environment.GetEnvironmentVariable("CONNECTION_1"));
      );

      new Context2(

      optionsBuilder.UseNpgsql(Environment.GetEnvironmentVariable("CONNECTION_2"));
      );


      The environment variables are set as:



      CONNECTION_1 = "Host=127.0.0.1;Port=5432;Database=postgres;Username=postgres;Password=password"

      CONNECTION_2 = "Host=127.0.0.1;Port=5432;Database=postgres;Username=postgres;Password=password2"


      Current Behavior:



      Context1 interacts with CloudSQL instance1 as normal.



      Context2 throws PostgresException "42P01: relation my_Table_Name does not exist." when trying to access a table.



      Note: "my_Table_Name" is a table in CloudSQL instance2



      This leads me to believe Context2 is trying to access CloudSQL instance1 instead of instance2.



      How can I point Context2 through the SQL Proxy to CloudSQL instance2?







      entity-framework kubernetes google-cloud-sql cloud-sql-proxy






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Nov 8 at 22:19









      Rico

      24.4k94864




      24.4k94864










      asked Nov 8 at 21:38









      msauce4

      111




      111






















          1 Answer
          1






          active

          oldest

          votes

















          up vote
          0
          down vote













          Basically this:




          CONNECTION_1 = "Host=127.0.0.1;Port=5432;Database=postgres;Username=postgres;Password=password"
          CONNECTION_2 = "Host=127.0.0.1;Port=5432;Database=postgres;Username=postgres;Password=password2"



          means that you are connecting to the exact same Cloud SQL instance, with just two different passwords (same username). Not sure how CONNECTION_2 might even connect to the Cloud SQL instance1 though.



          You would want to have something like this:




          CONNECTION_1 = "Host=127.0.0.1;Port=5432;Database=postgres;Username=postgres;Password=password"
          CONNECTION_2 = "Host=127.0.0.1;Port=5433;Database=postgres;Username=postgres;Password=password2"



          and on your cloud-proxy command line (running on the same pod):



          -instances=project:region:sqlinstance1=tcp:5432,project:region:sqlinstance2=tcp:5433





          share|improve this answer




















          • Matching the ports to those defined in the deployment.yaml didn't work either. Any other ideas?
            – msauce4
            Nov 9 at 1:15










          • Try shelling into the pod and debug from there
            – Rico
            Nov 9 at 2:16










          Your Answer






          StackExchange.ifUsing("editor", function ()
          StackExchange.using("externalEditor", function ()
          StackExchange.using("snippets", function ()
          StackExchange.snippets.init();
          );
          );
          , "code-snippets");

          StackExchange.ready(function()
          var channelOptions =
          tags: "".split(" "),
          id: "1"
          ;
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function()
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled)
          StackExchange.using("snippets", function()
          createEditor();
          );

          else
          createEditor();

          );

          function createEditor()
          StackExchange.prepareEditor(
          heartbeatType: 'answer',
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader:
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          ,
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          );



          );













           

          draft saved


          draft discarded


















          StackExchange.ready(
          function ()
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53216527%2fhow-to-connect-entityframework-core-to-multiple-google-cloudsql-instances-using%23new-answer', 'question_page');

          );

          Post as a guest















          Required, but never shown

























          1 Answer
          1






          active

          oldest

          votes








          1 Answer
          1






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes








          up vote
          0
          down vote













          Basically this:




          CONNECTION_1 = "Host=127.0.0.1;Port=5432;Database=postgres;Username=postgres;Password=password"
          CONNECTION_2 = "Host=127.0.0.1;Port=5432;Database=postgres;Username=postgres;Password=password2"



          means that you are connecting to the exact same Cloud SQL instance, with just two different passwords (same username). Not sure how CONNECTION_2 might even connect to the Cloud SQL instance1 though.



          You would want to have something like this:




          CONNECTION_1 = "Host=127.0.0.1;Port=5432;Database=postgres;Username=postgres;Password=password"
          CONNECTION_2 = "Host=127.0.0.1;Port=5433;Database=postgres;Username=postgres;Password=password2"



          and on your cloud-proxy command line (running on the same pod):



          -instances=project:region:sqlinstance1=tcp:5432,project:region:sqlinstance2=tcp:5433





          share|improve this answer




















          • Matching the ports to those defined in the deployment.yaml didn't work either. Any other ideas?
            – msauce4
            Nov 9 at 1:15










          • Try shelling into the pod and debug from there
            – Rico
            Nov 9 at 2:16














          up vote
          0
          down vote













          Basically this:




          CONNECTION_1 = "Host=127.0.0.1;Port=5432;Database=postgres;Username=postgres;Password=password"
          CONNECTION_2 = "Host=127.0.0.1;Port=5432;Database=postgres;Username=postgres;Password=password2"



          means that you are connecting to the exact same Cloud SQL instance, with just two different passwords (same username). Not sure how CONNECTION_2 might even connect to the Cloud SQL instance1 though.



          You would want to have something like this:




          CONNECTION_1 = "Host=127.0.0.1;Port=5432;Database=postgres;Username=postgres;Password=password"
          CONNECTION_2 = "Host=127.0.0.1;Port=5433;Database=postgres;Username=postgres;Password=password2"



          and on your cloud-proxy command line (running on the same pod):



          -instances=project:region:sqlinstance1=tcp:5432,project:region:sqlinstance2=tcp:5433





          share|improve this answer




















          • Matching the ports to those defined in the deployment.yaml didn't work either. Any other ideas?
            – msauce4
            Nov 9 at 1:15










          • Try shelling into the pod and debug from there
            – Rico
            Nov 9 at 2:16












          up vote
          0
          down vote










          up vote
          0
          down vote









          Basically this:




          CONNECTION_1 = "Host=127.0.0.1;Port=5432;Database=postgres;Username=postgres;Password=password"
          CONNECTION_2 = "Host=127.0.0.1;Port=5432;Database=postgres;Username=postgres;Password=password2"



          means that you are connecting to the exact same Cloud SQL instance, with just two different passwords (same username). Not sure how CONNECTION_2 might even connect to the Cloud SQL instance1 though.



          You would want to have something like this:




          CONNECTION_1 = "Host=127.0.0.1;Port=5432;Database=postgres;Username=postgres;Password=password"
          CONNECTION_2 = "Host=127.0.0.1;Port=5433;Database=postgres;Username=postgres;Password=password2"



          and on your cloud-proxy command line (running on the same pod):



          -instances=project:region:sqlinstance1=tcp:5432,project:region:sqlinstance2=tcp:5433





          share|improve this answer












          Basically this:




          CONNECTION_1 = "Host=127.0.0.1;Port=5432;Database=postgres;Username=postgres;Password=password"
          CONNECTION_2 = "Host=127.0.0.1;Port=5432;Database=postgres;Username=postgres;Password=password2"



          means that you are connecting to the exact same Cloud SQL instance, with just two different passwords (same username). Not sure how CONNECTION_2 might even connect to the Cloud SQL instance1 though.



          You would want to have something like this:




          CONNECTION_1 = "Host=127.0.0.1;Port=5432;Database=postgres;Username=postgres;Password=password"
          CONNECTION_2 = "Host=127.0.0.1;Port=5433;Database=postgres;Username=postgres;Password=password2"



          and on your cloud-proxy command line (running on the same pod):



          -instances=project:region:sqlinstance1=tcp:5432,project:region:sqlinstance2=tcp:5433






          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered Nov 8 at 22:45









          Rico

          24.4k94864




          24.4k94864











          • Matching the ports to those defined in the deployment.yaml didn't work either. Any other ideas?
            – msauce4
            Nov 9 at 1:15










          • Try shelling into the pod and debug from there
            – Rico
            Nov 9 at 2:16
















          • Matching the ports to those defined in the deployment.yaml didn't work either. Any other ideas?
            – msauce4
            Nov 9 at 1:15










          • Try shelling into the pod and debug from there
            – Rico
            Nov 9 at 2:16















          Matching the ports to those defined in the deployment.yaml didn't work either. Any other ideas?
          – msauce4
          Nov 9 at 1:15




          Matching the ports to those defined in the deployment.yaml didn't work either. Any other ideas?
          – msauce4
          Nov 9 at 1:15












          Try shelling into the pod and debug from there
          – Rico
          Nov 9 at 2:16




          Try shelling into the pod and debug from there
          – Rico
          Nov 9 at 2:16

















           

          draft saved


          draft discarded















































           


          draft saved


          draft discarded














          StackExchange.ready(
          function ()
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53216527%2fhow-to-connect-entityframework-core-to-multiple-google-cloudsql-instances-using%23new-answer', 'question_page');

          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          𛂒𛀶,𛀽𛀑𛂀𛃧𛂓𛀙𛃆𛃑𛃷𛂟𛁡𛀢𛀟𛁤𛂽𛁕𛁪𛂟𛂯,𛁞𛂧𛀴𛁄𛁠𛁼𛂿𛀤 𛂘,𛁺𛂾𛃭𛃭𛃵𛀺,𛂣𛃍𛂖𛃶 𛀸𛃀𛂖𛁶𛁏𛁚 𛂢𛂞 𛁰𛂆𛀔,𛁸𛀽𛁓𛃋𛂇𛃧𛀧𛃣𛂐𛃇,𛂂𛃻𛃲𛁬𛃞𛀧𛃃𛀅 𛂭𛁠𛁡𛃇𛀷𛃓𛁥,𛁙𛁘𛁞𛃸𛁸𛃣𛁜,𛂛,𛃿,𛁯𛂘𛂌𛃛𛁱𛃌𛂈𛂇 𛁊𛃲,𛀕𛃴𛀜 𛀶𛂆𛀶𛃟𛂉𛀣,𛂐𛁞𛁾 𛁷𛂑𛁳𛂯𛀬𛃅,𛃶𛁼

          Edmonton

          Crossroads (UK TV series)