Name:
interface
Value:
Amplify has re-imagined the way frontend developers build fullstack applications. Develop and deploy without the hassle.

Page updated Jun 11, 2024

Maintenance ModeYou are viewing Amplify Gen 1 documentation. Amplify Gen 1 has entered maintenance mode and will reach end of life on May 1, 2027. New project should use Amplify Gen 2. For existing Gen 1 projects, a migration guide and tooling are available to help you upgrade. Switch to the latest Gen 2 docs →

シークレット値へのアクセス

Amplify CLIを使用すると、Lambda関数から安全にアクセスできるシークレット値を設定できます。各Amplifyの環境には異なるシークレット値を設定できます。これにより、開発環境と本番環境で異なるAPIキーを使用するなどのユースケースが可能になります。シークレットは、データベースパスワード、APIキー、アクセストークンなどの値に使用する必要があります。

Lambda関数で機密性の低い設定値にアクセスする場合は、環境変数を使用します。

シークレット値の設定

シークレット値を使用した新しい関数を設定するには、amplify add functionを実行し、詳細設定プロンプトでyesを選択し、シークレット設定プロンプトでyesを選択します。そこからシークレットの名前と値を指定できます。

$ amplify add function
...
? Do you want to configure advanced settings? Yes
...
? Do you want to configure secret values this function can access? Yes
? Enter a secret name (this is the key used to look up the secret value): API_KEY
? Enter the value for API_KEY: [hidden]
? What do you want to do? (Use arrow keys)
Add a secret
Update a secret
Remove secrets
> I'm done

既存の関数のシークレットを設定するには、amplify update functionを実行し、Secret values configurationを選択します。その後、シークレット値を追加、更新、削除できます。

$ amplify update function
...
? Which setting do you want to update?
Resource access permissions
Scheduled recurring invocation
Lambda layers configuration
Environment variables configuration
> Secret values configuration
? What do you want to do?
> Add a secret
Update a secret
Remove secrets
I'm done

注:Amplify CLIはシークレットをローカルに保存することはありません。すべてのシークレット値は、SecureStringパラメータタイプを使用してAWS Parameter Storeに即座に保存されます。

関数内での値へのアクセス

Lambda関数内でシークレット値にアクセスするには、AWS SSM GetParameter APIを使用します。Amplify CLIは自動的にシークレットのSSMパラメータ名を環境変数として関数に提供します。この値はAPI呼び出しの「Name」として値を取得するために渡すことができます。API呼び出しで「WithDecryption」がtrueに指定されていることを確認してください。

Lambda関数がNode.jsランタイムを使用している場合、シークレット値を取得するためのサンプルコードを含むコメントブロックがindex.jsファイルの最上部に配置されます。

const aws = require('aws-sdk');
const { Parameters } = await (new aws.SSM())
.getParameters({
Names: ["EXAMPLE_SECRET_1", "EXAMPLE_SECRET_2"].map(secretName => process.env[secretName]),
WithDecryption: true,
})
.promise();
// Parameters will be of the form { Name: 'secretName', Value: 'secretValue', ... }[]
const { SSMClient, GetParametersCommand } = require("@aws-sdk/client-ssm");
const client = new SSMClient();
const command = new GetParametersCommand({
Names: ["EXAMPLE_SECRET_1", "EXAMPLE_SECRET_2"].map(
(secretName) => process.env[secretName]
),
WithDecryption: true,
});
client
.send(command)
.then((response) => {
const { Parameters } = response;
console.log(Parameters);
})
.catch((error) => {
console.error(error);
});

マルチ環境ワークフロー

amplify env addを使用して新しいAmplify環境を作成するときに、Amplify CLIは、すべてのシークレット値を新しい環境に適用するか、それらを変更するかを尋ねます。既存の値を適用することを選択した場合でも、いつでもamplify update functionを使用して編集できます。

amplify env add --envName <new env name> --yesを使用して新しいAmplify環境を作成するときに、Amplify CLIは現在の環境からすべてのシークレット値を新しい環境に適用します。

マルチ環境ワークフローでは、1つのAmplify環境で新しいシークレットを追加し、別のAmplify環境にチェックアウトした場合があります。この場合、次のamplify pushでは、Amplify CLIは現在の環境で値が指定されていない新しいシークレットを検出し、値を入力するよう促します。この場合にamplify push --yesを実行すると、不足しているシークレット値を説明するメッセージとともに失敗します。

gitベースのマルチ環境ワークフローでは、デプロイ中にエラーが発生する場合があります。たとえば、envA(gitブランチbranchAに対応)でシークレットを追加してから、amplify env checkout envBgit checkout branchBを実行し、branchAをbranchBにマージした場合、envBをプッシュすると、Amplify CLIは新しいシークレットが追加されたことを検出しますが、その値を推測できません。この問題を解決するには、ターミナルで次のコマンドを実行します:

  1. amplify env checkout <failing env name>
  2. amplify push - プロンプトが表示されたら、シークレットの新しい値を入力します
  3. git commit
  4. git push