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.
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.
I think put_env might be it for me. I like having the option of storing config in the top cell.