

# Lambda 関数のバージョンを管理する
<a name="configuration-versions"></a>

バージョンを使用して、関数のデプロイを管理できます。たとえば、安定した実稼働バージョンのユーザーに影響を与えることなく、ベータテスト用の新しいバージョンの関数を公開できます。Lambda は、関数を公開するたびに新しいバージョンの関数を作成します。新しいバージョンは、関数の未公開バージョンのコピーです。未公開バージョンの名前は `$LATEST` です。

重要なのは、関数コードをデプロイするたびに、`$LATEST` で現在のコードを上書きすることです。`$LATEST` の現在のイテレーションを保存するには、新しい関数バージョンを作成します。`$LATEST` が以前に公開されたバージョンと同じ場合、変更を `$LATEST` にデプロイするまで新しいバージョンを作成することはできません。これらの変更には、コードの更新や関数設定の変更が含まれます。

関数のバージョンを公開すると、そのコード、ランタイム、アーキテクチャ、メモリ、レイヤー、その他のほとんどの設定はイミュータブルになります。つまり、`$LATEST` から新しいバージョンを公開しないと、これらの設定を変更することはできません。公開済みの関数のバージョンには、次の項目を設定できます。
+ [トリガー](lambda-services.md#lambda-invocation-trigger)
+ [送信先](invocation-async-retain-records.md#create-destination)
+ [プロビジョニングされた同時実行](provisioned-concurrency.md)
+ [非同期呼び出し](invocation-async.md)
+ [データベース接続とプロキシ](services-rds.md#rds-configuration)

**注記**  
**[自動]** モードで[ランタイム管理コントロール](runtimes-update.md#runtime-management-controls)を使用している場合は、関数のバージョンで使用されるランタイムバージョンが自動的に更新されます。**[Function update]** (関数の更新) または **[Manual]** (手動) モードを使用している場合、ランタイムバージョンは更新されません。詳細については、「[Lambda がランタイムバージョンの更新を管理する方法を理解する](runtimes-update.md)」を参照してください。

**Topics**
+ [関数バージョンの作成](#configuration-versions-config)
+ [バージョンの使用](#versioning-versions-using)
+ [アクセス許可の付与](#versioning-permissions)

## 関数バージョンの作成
<a name="configuration-versions-config"></a>

関数コードと設定は、未公開バージョンの関数でのみ変更できます。バージョンを公開すると、Lambda は、そのバージョンのユーザー向けに一貫したエクスペリエンスを保つためにコードとほとんどの設定をロックします。

Lambda コンソールを使用して、関数のバージョンを作成できます。

**新しい関数バージョンを作成するには**

1. Lambda コンソールの [[関数ページ]](https://console.aws.amazon.com/lambda/home#/functions) を開きます。

1. 関数を選択し、**[バージョン]** タブをクリックします。

1. バージョンの設定ページで、[**新しいバージョンを発行**] をクリックします。

1. (オプション) バージョンの説明を入力します。

1. **[Publish]** (発行) を選択します。

代替手段として、[PublishVersion](https://docs.aws.amazon.com/lambda/latest/api/API_PublishVersion.html) API 操作を使用して関数のバージョンを発行できます。

以下の AWS CLI コマンドは、関数の新しいバージョンを発行します。レスポンスは、バージョン番号およびバージョンがサフィックスとしてついた関数 ARN を含む、新しいバージョンの設定情報を返します。

```
aws lambda publish-version --function-name my-function
```

以下の出力が表示されます。

```
{
  "FunctionName": "my-function",
  "FunctionArn": "arn:aws:lambda:us-east-2:123456789012:function:my-function:1",
  "Version": "1",
  "Role": "arn:aws:iam::123456789012:role/lambda-role",
  "Handler": "function.handler",
  "Runtime": "nodejs24.x",
  ...
}
```

**注記**  
Lambda は、バージョニングのために単調増加するシーケンス番号を割り当てます。関数を削除して再作成した後でも、Lambda がバージョン番号を再利用することは一切ありません。

## バージョンの使用
<a name="versioning-versions-using"></a>

修飾 ARN または非修飾 ARN を使用して、Lambda 関数を参照できます。
+ **修飾 ARN** － バージョンのサフィックスが付いた関数 ARN です。以下の例では、`helloworld` 関数のバージョン 42 を参照しています。

  ```
  arn:aws:lambda:aws-region:acct-id:function:helloworld:42
  ```
+ **非修飾 ARN** － バージョンのサフィックスが付いていない関数 ARN です。

  ```
  arn:aws:lambda:aws-region:acct-id:function:helloworld
  ```

関連するすべての API オペレーションで、修飾 ARN または非修飾 ARN を使用できます。ただし、非修飾 ARN を使用してエイリアスを作成することはできません。

関数のバージョンを公開しないことにした場合、関数を呼び出すには、修飾 ARN または非修飾 ARN を[イベントソースマッピング](invocation-eventsourcemapping.md)で使用します。非修飾 ARN を使用して関数を呼び出すと、Lambda によって暗黙的に `$LATEST` が呼び出されます。

各 Lambda 関数のバージョンの修飾 ARN は一意です。バージョンを公開した後は、ARN または関数コードを変更することはできません。

コードが公開されたことがない場合、またはコードが最後に公開されたバージョンから変更された場合にのみ、Lambda によって新しい関数のバージョンが公開されます。変更がない場合、関数のバージョンは最後に公開されたバージョンのままです。

バージョンを公開すると、Lambda は関数のコードと設定の変更不可能なスナップショットを作成します。すべての設定変更が新しいバージョンの公開をトリガーするわけではありません。次の設定変更は、バージョン公開の対象となる関数を認定します。
+ 関数コード
+ 環境変数
+ ランタイム
+ Handler
+ レイヤー
+ メモリサイズ
+ タイムアウト
+ VPC の設定
+ デッドレターキュー (DLQ) の構成
+ IAM ロール
+ 説明
+ アーキテクチャ (x86\$164 または AMD64)
+ エフェメラルストレージサイズ
+ パッケージタイプ
+ ログ記録の設定
+ ファイルシステム設定
+ SnapStart
+ トレース設定

[予約された同時実行](configuration-concurrency.md)などの運用設定は、変更時に新しいバージョンの公開をトリガーしません。

## アクセス許可の付与
<a name="versioning-permissions"></a>

[リソースベースのポリシー](access-control-resource-based.md)または[アイデンティティベースのポリシー](access-control-identity-based.md)を使用して、関数へのアクセスを許可できます。このアクセス許可の範囲は、ポリシーの適用先が関数になるか、関数の 1 つのバージョンになるかによって決まります。ポリシーでの関数のリソース名の詳細については、「[ポリシーのリソースセクションと条件セクションの微調整](lambda-api-permissions-ref.md)」を参照してください。

関数のエイリアスを使用すると、イベントソースおよび AWS Identity and Access Management (IAM) ポリシーの管理を簡素化することができます。詳細については、「[Lambda 関数のエイリアスの作成](configuration-aliases.md)」を参照してください。