如何 运行 在本地访问受保护资源的 Lambda 函数
How to run a Lambda function locally that accesses protected resources
我仍在学习使用 AWS Lambda 函数。我使用 Amplify 框架生成了我的。我使用的 Lambda 函数需要访问 AppSync API。因此它有以下中间件:
const tapRoute = f => R.tap(route => route.use(f));
const hydrateClient = tapRoute(async function(req, res, next) {
try {
const url = process.env.API_SAYMAPPSYNCAPI_GRAPHQLAPIENDPOINTOUTPUT;
const region = process.env.REGION;
AWS.config.update({
region,
credentials: new AWS.Credentials(
process.env.AWS_ACCESS_KEY_ID,
process.env.AWS_SECRET_ACCESS_KEY,
process.env.AWS_SESSION_TOKEN
),
});
const credentials = AWS.config.credentials;
const appsyncClient = new AWSAppSyncClient(
{
url,
region,
auth: {
type: 'AWS_IAM',
credentials,
},
disableOffline: true,
},
{
defaultOptions: {
query: {
fetchPolicy: 'network-only',
errorPolicy: 'all',
},
},
}
);
const client = await appsyncClient.hydrated();
req.client = client;
next();
} catch (error) {
console.log(error);
next(error);
}
});
如您所见,我需要访问环境变量 AWS_ACCESS_KEY_ID
、AWS_SECRET_ACCESS_KEY
和 AWS_SESSION_TOKEN
。当我 运行 云中的函数时,它会自动获取这些变量的值。我怎样才能在当地买到它们?我需要使用哪个访问密钥以及如何获取其秘密访问密钥和会话令牌?
如果您已经配置了 ~/.aws/credentials
文件,则无需显式设置它们。
如果要配置这个文件,最简单的方法就是简单地安装aws-cli和运行aws configure
。系统将提示您输入一些值,包括 AWS_ACCESS_KEY_ID
和 AWS_SECRET_ACCESS_KEY
如果你没有配置这个文件,那么你可以自己在环境变量中设置这些值。
您可以通过转到 AWS 控制台 -> IAM -> 用户 -> Select 您的用户 -> 安全凭证 -> 访问密钥来获取这些值。然后单击 "Create Access Key" 并下载或记下这些值,因为 AWS_SECRET_ACCESS_KEY
仅在创建期间可见。 AWS_ACCESS_KEY_ID
另一方面总是可见的,但如果你没有秘密就没用了。
AWS_SESSION_TOKEN
仅当相关用户使用 MFA 时才需要。如果不是,这个值可以忽略。
<仅 MFA>
如果您正在使用 MFA,则需要使用 aws-cli
来获取此值,如下所示:
aws sts get-session-token --serial-number arn:aws:iam::account-id-number:mfa/your-user --token-code MFAToken
然后,要设置临时凭据,再次 运行 aws configure
,将 AWS_ACCESS_KEY_ID
和 AWS_SECRET_ACCESS_KEY
的值替换为新的临时值。
最后设置AWS_SESSION_TOKEN
,运行aws configure set aws_session_token VALUE_RETURNED_FROM_GET_SESSION_TOKEN_COMMAND
< / MFAOnly >
请记住,在云中 运行ning 时,这些凭据不会像您所说的那样加载。改用 IAM 角色。
我仍在学习使用 AWS Lambda 函数。我使用 Amplify 框架生成了我的。我使用的 Lambda 函数需要访问 AppSync API。因此它有以下中间件:
const tapRoute = f => R.tap(route => route.use(f));
const hydrateClient = tapRoute(async function(req, res, next) {
try {
const url = process.env.API_SAYMAPPSYNCAPI_GRAPHQLAPIENDPOINTOUTPUT;
const region = process.env.REGION;
AWS.config.update({
region,
credentials: new AWS.Credentials(
process.env.AWS_ACCESS_KEY_ID,
process.env.AWS_SECRET_ACCESS_KEY,
process.env.AWS_SESSION_TOKEN
),
});
const credentials = AWS.config.credentials;
const appsyncClient = new AWSAppSyncClient(
{
url,
region,
auth: {
type: 'AWS_IAM',
credentials,
},
disableOffline: true,
},
{
defaultOptions: {
query: {
fetchPolicy: 'network-only',
errorPolicy: 'all',
},
},
}
);
const client = await appsyncClient.hydrated();
req.client = client;
next();
} catch (error) {
console.log(error);
next(error);
}
});
如您所见,我需要访问环境变量 AWS_ACCESS_KEY_ID
、AWS_SECRET_ACCESS_KEY
和 AWS_SESSION_TOKEN
。当我 运行 云中的函数时,它会自动获取这些变量的值。我怎样才能在当地买到它们?我需要使用哪个访问密钥以及如何获取其秘密访问密钥和会话令牌?
如果您已经配置了 ~/.aws/credentials
文件,则无需显式设置它们。
如果要配置这个文件,最简单的方法就是简单地安装aws-cli和运行aws configure
。系统将提示您输入一些值,包括 AWS_ACCESS_KEY_ID
和 AWS_SECRET_ACCESS_KEY
如果你没有配置这个文件,那么你可以自己在环境变量中设置这些值。
您可以通过转到 AWS 控制台 -> IAM -> 用户 -> Select 您的用户 -> 安全凭证 -> 访问密钥来获取这些值。然后单击 "Create Access Key" 并下载或记下这些值,因为 AWS_SECRET_ACCESS_KEY
仅在创建期间可见。 AWS_ACCESS_KEY_ID
另一方面总是可见的,但如果你没有秘密就没用了。
AWS_SESSION_TOKEN
仅当相关用户使用 MFA 时才需要。如果不是,这个值可以忽略。
<仅 MFA>
如果您正在使用 MFA,则需要使用 aws-cli
来获取此值,如下所示:
aws sts get-session-token --serial-number arn:aws:iam::account-id-number:mfa/your-user --token-code MFAToken
然后,要设置临时凭据,再次 运行 aws configure
,将 AWS_ACCESS_KEY_ID
和 AWS_SECRET_ACCESS_KEY
的值替换为新的临时值。
最后设置AWS_SESSION_TOKEN
,运行aws configure set aws_session_token VALUE_RETURNED_FROM_GET_SESSION_TOKEN_COMMAND
< / MFAOnly >
请记住,在云中 运行ning 时,这些凭据不会像您所说的那样加载。改用 IAM 角色。