

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# AppSpec ファイルの例
<a name="reference-appspec-file-example"></a>

このトピックでは、 AWS Lambda および EC2/オンプレミスデプロイ用の AppSpec ファイルの例を示します。

**Topics**
+ [Amazon ECS デプロイの AppSpec ファイルの例](#appspec-file-example-ecs)
+ [Lambda AWS デプロイの AppSpec ファイルの例](#appspec-file-example-lambda)
+ [EC2/オンプレミスデプロイの AppSpec ファイルの例](#appspec-file-example-server)

## Amazon ECS デプロイの AppSpec ファイルの例
<a name="appspec-file-example-ecs"></a>

 Amazon ECS サービスをデプロイするために YAML で書かれた AppSpec ファイルの例を示します。

```
version: 0.0
Resources:
  - TargetService:
      Type: AWS::ECS::Service
      Properties:
        TaskDefinition: "arn:aws:ecs:us-east-1:111222333444:task-definition/my-task-definition-family-name:1"
        LoadBalancerInfo:
          ContainerName: "SampleApplicationName"
          ContainerPort: 80
# Optional properties
        PlatformVersion: "LATEST"
        NetworkConfiguration:
          AwsvpcConfiguration:
            Subnets: ["subnet-1234abcd","subnet-5678abcd"]
            SecurityGroups: ["sg-12345678"]
            AssignPublicIp: "ENABLED"
        CapacityProviderStrategy:
          - Base: 1
            CapacityProvider: "FARGATE_SPOT"
            Weight: 2
          - Base: 0
            CapacityProvider: "FARGATE"
            Weight: 1
Hooks:
  - BeforeInstall: "LambdaFunctionToValidateBeforeInstall"
  - AfterInstall: "LambdaFunctionToValidateAfterInstall"
  - AfterAllowTestTraffic: "LambdaFunctionToValidateAfterTestTrafficStarts"
  - BeforeAllowTraffic: "LambdaFunctionToValidateBeforeAllowingProductionTraffic"
  - AfterAllowTraffic: "LambdaFunctionToValidateAfterAllowingProductionTraffic"
```

 JSON で書かれた前述の例のバージョンを示します。

```
{
    "version": 0.0,
    "Resources": [
        {
            "TargetService": {
                "Type": "AWS::ECS::Service",
                "Properties": {
                    "TaskDefinition": "arn:aws:ecs:us-east-1:111222333444:task-definition/my-task-definition-family-name:1",
                    "LoadBalancerInfo": {
                        "ContainerName": "SampleApplicationName",
                        "ContainerPort": 80
                    },
                    "PlatformVersion": "LATEST",
                    "NetworkConfiguration": {
                        "AwsvpcConfiguration": {
                            "Subnets": [
                                "subnet-1234abcd",
                                "subnet-5678abcd"
                            ],
                            "SecurityGroups": [
                                "sg-12345678"
                            ],
                            "AssignPublicIp": "ENABLED"
                        }
                    },
                    "CapacityProviderStrategy": [
                        {
                            "Base" : 1,
                            "CapacityProvider" : "FARGATE_SPOT",
                            "Weight" : 2
                        },
                        {
                            "Base" : 0,
                            "CapacityProvider" : "FARGATE",
                            "Weight" : 1
                        }
                    ]
                }               
            }
        }
    ],
    "Hooks": [
        {
            "BeforeInstall": "LambdaFunctionToValidateBeforeInstall"
        },
        {
            "AfterInstall": "LambdaFunctionToValidateAfterInstall"
        },
        {
            "AfterAllowTestTraffic": "LambdaFunctionToValidateAfterTestTrafficStarts"
        },
        {
            "BeforeAllowTraffic": "LambdaFunctionToValidateBeforeAllowingProductionTraffic"
        },
        {
            "AfterAllowTraffic": "LambdaFunctionToValidateAfterAllowingProductionTraffic"
        }
    ]
}
```

デプロイ中のイベントのシーケンスを次に示します。

1.  最新の Amazon ECS アプリケーションが置き換えタスクセットにインストールされる前に、`LambdaFunctionToValidateBeforeInstall` と呼ばれる Lambda 関数が実行されます。

1.  最新の Amazon ECS アプリケーションが置き換えタスクセットにインストールされた後、トラフィックを受信する前に、`LambdaFunctionToValidateAfterInstall` と呼ばれる Lambda 関数が実行されます。

1.  置き換えタスクセット上の Amazon ECS アプリケーションが、テストリスナーからのトラフィックの受信を開始した後、`LambdaFunctionToValidateAfterTestTrafficStarts` と呼ばれる Lambda 関数が実行されます。この関数は、デプロイが続行されるかどうかを判断するために、検証テストを実行する可能性があります。デプロイグループでテストリスナーを指定しない場合、このフックは無視されます。

1.  `AfterAllowTestTraffic` フックの検証テストがすべて完了した後、かつ、最新の Amazon ECS アプリケーションに本稼働トラフィックが提供される前に、`LambdaFunctionToValidateBeforeAllowingProductionTraffic` と呼ばれる Lambda 関数が実行されます。

1.  置き換えタスクセット上の最新の Amazon ECS アプリケーションに本稼働トラフィックが提供された後に、`LambdaFunctionToValidateAfterAllowingProductionTraffic` と呼ばれる Lambda 関数が実行されます。

 フック中に実行される Lambda 関数は、検証テストを実行したり、トラフィックメトリクスを収集したりできます。

## Lambda AWS デプロイの AppSpec ファイルの例
<a name="appspec-file-example-lambda"></a>

 Lambda 関数のバージョンをデプロイするために YAML で書かれた AppSpec ファイルの例を示します。

```
version: 0.0
Resources:
  - myLambdaFunction:
      Type: AWS::Lambda::Function
      Properties:
        Name: "myLambdaFunction"
        Alias: "myLambdaFunctionAlias"
        CurrentVersion: "1"
        TargetVersion: "2"
Hooks:
  - BeforeAllowTraffic: "LambdaFunctionToValidateBeforeTrafficShift"
  - AfterAllowTraffic: "LambdaFunctionToValidateAfterTrafficShift"
```

 JSON で書かれた前述の例のバージョンを示します。

```
{
 	"version": 0.0,
 	"Resources": [{
 		"myLambdaFunction": {
 			"Type": "AWS::Lambda::Function",
 			"Properties": {
 				"Name": "myLambdaFunction",
 				"Alias": "myLambdaFunctionAlias",
 				"CurrentVersion": "1",
 				"TargetVersion": "2"
 			}
 		}
 	}],
 	"Hooks": [{
 			"BeforeAllowTraffic": "LambdaFunctionToValidateBeforeTrafficShift"
      },
      {
 			"AfterAllowTraffic": "LambdaFunctionToValidateAfterTrafficShift"
 		}
 	]
 }
```

デプロイ中のイベントのシーケンスを次に示します。

1. `myLambdaFunction` という名前の Lambda 関数のバージョン 1 からバージョン 2 にトラフィックを移行する前に、デプロイでトラフィックの移行を開始する準備が整っていることを確認する、`LambdaFunctionToValidateBeforeTrafficShift` という名前の Lambda 関数を実行します。

1. `LambdaFunctionToValidateBeforeTrafficShift` が終了コード 0 (成功) を返した場合は、`myLambdaFunction` のバージョン 2 へのトラフィックの移行を開始します。このデプロイのデプロイ設定により、トラフィックが移行するレートが決まります。

1. `myLambdaFunction` という名前の Lambda 関数のバージョン 1 からバージョン 2 へのトラフィックの移行が完了したら、デプロイが正常に完了したことを確認する、`LambdaFunctionToValidateAfterTrafficShift` という名前の Lambda 関数を実行します。

## EC2/オンプレミスデプロイの AppSpec ファイルの例
<a name="appspec-file-example-server"></a>

以下は、Amazon Linux、Ubuntu Server、または RHEL インスタンスへのインプレイスデプロイのための AppSpec ファイルの例です。

**注記**  
 Windows Server インスタンスへのデプロイメントでは、`runas` 要素をサポートしていません。Windows Server インスタンスにデプロイする場合は、AppSpec ファイルに含まれないでください。

```
version: 0.0
os: linux
files:
  - source: Config/config.txt
    destination: /webapps/Config
  - source: source
    destination: /webapps/myApp
hooks:
  BeforeInstall:
    - location: Scripts/UnzipResourceBundle.sh
    - location: Scripts/UnzipDataBundle.sh
  AfterInstall:
    - location: Scripts/RunResourceTests.sh
      timeout: 180
  ApplicationStart:
    - location: Scripts/RunFunctionalTests.sh
      timeout: 3600
  ValidateService:
    - location: Scripts/MonitorService.sh
      timeout: 3600
      runas: codedeployuser
```

Windows Server のインスタンスで、[`os: linux`] を [`os: windows`] に変更します。また、`destination` パスを完全に修飾する必要があります (例: `c:\temp\webapps\Config`、`c:\temp\webapps\myApp`)。`runas` エレメントは含めないでください。

デプロイ中のイベントのシーケンスを次に示します。

1. `Scripts/UnzipResourceBundle.sh` にあるスクリプトを実行します。

1. 前のスクリプトが終了コード 0 (成功) を返した場合、`Scripts/UnzipDataBundle.sh` にあるスクリプトを実行します。

1. ファイルを `Config/config.txt` のパスからパス `/webapps/Config/config.txt` にコピーします。

1. `source` ディレクトリのすべてのファイルを再帰的に `/webapps/myApp` ディレクトリにコピーします。

1. `Scripts/RunResourceTests.sh` にあるスクリプトを、180 秒 (3 分) のタイムアウトで実行します。

1. `Scripts/RunFunctionalTests.sh` にあるスクリプトを、3600 秒 (1 時間) のタイムアウトで実行します。

1. `Scripts/MonitorService.sh` にあるスクリプトを、ユーザー `codedeploy` として 3600 秒 (1 時間) のタイムアウトで実行します。