Notebook global variable

I’d like to define an s3 bucket name as a global in my livebook. I guess I could use a notebook secret for that, but it’s not really a secret, more like an environment variable. How would you solve this?

Secret sounds good, it doesn’t need to be a secret value per se. In the settings you can also define global environment variables.

1 Like

Thanks!

Mix.install is a nice place to put module config. I wonder if it can be used for this use case too? Speaking as someone new to Elixir. Like this:

Mix.install(
  [
    {:req, "~> 0.5.6"},
    {:kino, "~> 0.14.0"},
    {:ex_aws, "~> 2.1"},
    {:ex_aws_s3, "~> 2.0"},
    {:hackney, "~> 1.9"},
    {:sweet_xml, "~> 0.6"},
    {:cachex, "~> 4.0"},
    {:exjsx, "~> 4.0"},
    {:kino_slack, "~> 0.1.1"}
  ],
  config: [
    ex_aws: [
      debug_requests: true,
      json_codec: Jason,
      access_key_id: {:system, "LB_AWS_ACCESS_KEY_ID"},
      secret_access_key: {:system, "LB_AWS_SECRET_ACCESS_KEY"},
      s3: [
        scheme: "https://",
        host: "fly.storage.tigris.dev",
        region: "auto"
      ]
    ]
  ]
)

I wonder if it can be used for this use case too?

My understanding is that you want a value shared across notebooks, so a secret/env makes sense. Otherwise you can just define a variable in the setup cell, or at the top.

As for Mix.install, in case of runtime config I usually prefer this:

Mix.install([
  {:req, "~> 0.5.6"},
  {:kino, "~> 0.14.0"},
  {:ex_aws, "~> 2.1"},
  {:ex_aws_s3, "~> 2.0"},
  {:hackney, "~> 1.9"},
  {:sweet_xml, "~> 0.6"},
  {:cachex, "~> 4.0"},
  {:exjsx, "~> 4.0"},
  {:kino_slack, "~> 0.1.1"}
])

Application.put_env(:ex_aws,
  debug_requests: true,
  json_codec: Jason,
  access_key_id: {:system, "LB_AWS_ACCESS_KEY_ID"},
  secret_access_key: {:system, "LB_AWS_SECRET_ACCESS_KEY"},
  s3: [
    scheme: "https://",
    host: "fly.storage.tigris.dev",
    region: "auto"
  ]
)

The advantages is that changing config in this way doesn’t invalidate the Mix.install cache.

3 Likes

I think put_env might be it for me. I like having the option of storing config in the top cell.