通过 Symfony DotEnv 为 AWS PHP SDK 提供凭据
Provide the AWS PHP SDK with credentials via Symfony DotEnv
在使用 symfony/dotenv 4.3.11 和 aws/aws-sdk-php 3.173.13 的 Symfony 4.3 应用程序中:
我想使用通过环境变量提供的凭据对 AWS SDK 进行身份验证,并且我想使用 dotenv 组件来提供这些环境变量。
这应该是可能的:设置 AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY 环境变量是使用 aws sdk 自动验证的一种方法。而 DotEnv 应该把你的配置变成环境变量。
但是,当我在 .env.local
或 .env
文件中设置这些变量时,出现以下错误:
Aws\Exception\CredentialsException: Error retrieving credentials from the instance profile metadata service.
这行不通:
.env.local:
AWS_ACCESS_KEY_ID=XXX
AWS_SECRET_ACCESS_KEY=XXXXXX
$ ./bin/console command-that-uses-aws-sdk
有效:
$ AWS_ACCESS_KEY_ID=XXX AWS_SECRET_ACCESS_KEY=XXXXXX ./bin/console command-that-uses-aws-sdk
调试信息:
我做了一个 symfony 命令输出 $_ENV
中的环境变量。在 .env.local 中使用 AWS_ACCESS_KEY_ID/SECRET,果然它显示为环境变量:
...
[SYMFONY_DOTENV_VARS] => MEQ_ENV,APP_ENV,APP_SECRET,DATABASE_URL,AWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEY,AWS_REGION,AWS_ACCOUNT
[AWS_ACCESS_KEY_ID] => XXX
[AWS_SECRET_ACCESS_KEY] => XXXXXX
...
aws php client documentation 状态:
The SDK uses the getenv() function to look for the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, and AWS_SESSION_TOKEN environment variables.
=> 它使用 getenv()
而不是 $_ENV
.
但 Symfony Dotenv 组件(默认情况下)仅填充 $_ENV
而不会调用 putenv
因此 getenv()
无法访问您在 .env 文件中的设置。
这里有一些选项:
call Dotenv())->usePutenv(true)
(但正如 symfony 所述:请注意 putenv()
不是线程安全的,这就是此设置默认为 false 的原因)
为 aws 设置手动调用 putenv()
将 aws 客户端包装在您自己的 symfony 服务中,并从 .env 注入设置
在使用 symfony/dotenv 4.3.11 和 aws/aws-sdk-php 3.173.13 的 Symfony 4.3 应用程序中:
我想使用通过环境变量提供的凭据对 AWS SDK 进行身份验证,并且我想使用 dotenv 组件来提供这些环境变量。
这应该是可能的:设置 AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY 环境变量是使用 aws sdk 自动验证的一种方法。而 DotEnv 应该把你的配置变成环境变量。
但是,当我在 .env.local
或 .env
文件中设置这些变量时,出现以下错误:
Aws\Exception\CredentialsException: Error retrieving credentials from the instance profile metadata service.
这行不通:
.env.local:
AWS_ACCESS_KEY_ID=XXX
AWS_SECRET_ACCESS_KEY=XXXXXX
$ ./bin/console command-that-uses-aws-sdk
有效:
$ AWS_ACCESS_KEY_ID=XXX AWS_SECRET_ACCESS_KEY=XXXXXX ./bin/console command-that-uses-aws-sdk
调试信息:
我做了一个 symfony 命令输出 $_ENV
中的环境变量。在 .env.local 中使用 AWS_ACCESS_KEY_ID/SECRET,果然它显示为环境变量:
...
[SYMFONY_DOTENV_VARS] => MEQ_ENV,APP_ENV,APP_SECRET,DATABASE_URL,AWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEY,AWS_REGION,AWS_ACCOUNT
[AWS_ACCESS_KEY_ID] => XXX
[AWS_SECRET_ACCESS_KEY] => XXXXXX
...
aws php client documentation 状态:
The SDK uses the getenv() function to look for the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, and AWS_SESSION_TOKEN environment variables.
=> 它使用 getenv()
而不是 $_ENV
.
但 Symfony Dotenv 组件(默认情况下)仅填充 $_ENV
而不会调用 putenv
因此 getenv()
无法访问您在 .env 文件中的设置。
这里有一些选项:
call
Dotenv())->usePutenv(true)
(但正如 symfony 所述:请注意putenv()
不是线程安全的,这就是此设置默认为 false 的原因)为 aws 设置手动调用
putenv()
将 aws 客户端包装在您自己的 symfony 服务中,并从 .env 注入设置