Amazon EC2 アクションリファレンス - AWS CodePipeline

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

Amazon EC2 アクションリファレンス

Amazon EC2 EC2アクションを使用して、アプリケーションコードをデプロイフリートにデプロイします。デプロイフリートは、Amazon EC2 Linux インスタンスまたは Linux SSM マネージドノードで構成できます。インスタンスには SSM エージェントがインストールされている必要があります。

注記

このアクションは Linux インスタンスタイプのみをサポートします。サポートされているフリートの最大サイズは 500 インスタンスです。

アクションは、指定された最大値に基づいてインスタンスの数を選択します。以前のインスタンスから失敗したインスタンスが最初に選択されます。アクションが以前に失敗した場合など、インスタンスが既に同じ入力アーティファクトのデプロイを受信している場合、アクションは特定のインスタンスでのデプロイをスキップします。

注記

このアクションは V2 タイプのパイプラインでのみサポートされています。

アクションタイプ

  • カテゴリ:Deploy

  • 所有者: AWS

  • プロバイダー: EC2

  • バージョン: 1

設定パラメータ

InstanceTagKey

必須: はい

など、Amazon EC2 で作成したインスタンスのタグキーName

InstanceTagValue

必須: いいえ

など、Amazon EC2 で作成したインスタンスのタグ値my-instances

この値を指定しない場合、InstanceTagKey を持つすべてのインスタンスが一致します。

InstanceType

必須: はい

Amazon EC2 で作成されたインスタンスまたは SSM ノードのタイプ。有効な値は EC2 および SSM_MANAGED_NODE です。

すべてのインスタンスで SSM エージェントを作成、タグ付け、インストールしておく必要があります。

注記

インスタンスを作成するときは、既存の EC2 インスタンスロールを作成または使用します。Access Denied エラーを回避するには、インスタンスロールに S3 バケットアクセス許可を追加して、CodePipeline アーティファクトバケットにインスタンスアクセス許可を付与する必要があります。デフォルトのロールを作成するか、パイプラインのリージョンのアーティファクトバケットにスコープダウンされたs3:GetObjectアクセス許可で既存のロールを更新します。

TargetDirectory

必須: はい (スクリプトが指定されている場合)

スクリプトを実行するために Amazon EC2 インスタンスで使用されるディレクトリ。

DeploySpec

必須: はい (デプロイ仕様が指定されている場合)

デプロイのインストールイベントとライフサイクルイベントを設定するために使用される ファイル。デプロイ仕様フィールドの説明と情報については、「」を参照してください仕様ファイルのリファレンスをデプロイする。指定されたデプロイ仕様ファイルを使用してアクション設定を表示するには、「」の例を参照してくださいDeploy 仕様を使用したアクション宣言の例

MaxBatch

必須: いいえ

並列でデプロイできるインスタンスの最大数。

MaxError

必須: いいえ

デプロイ中に許可されるインスタンスエラーの最大数。

TargetGroupNameList

必須: いいえ

デプロイのターゲットグループ名のリスト。ターゲットグループは作成済みである必要があります。

ターゲットグループは、特定のリクエストを処理するための一連のインスタンスを提供します。ターゲットグループが指定されている場合、インスタンスはデプロイ前にターゲットグループから削除され、デプロイ後にターゲットグループに戻されます。

PreScript

必須: いいえ

アクションデプロイフェーズの前に実行するスクリプト。

PostScript

必須: はい

アクションデプロイフェーズの後に実行するスクリプト。

次の図は、アクション設定の使用が選択されているアクションの編集ページの例を示しています。

アクション設定を使用して を指定する EC2Deploy アクションを含む新しいパイプラインの編集アクションページ

次の図は、DeploySpec ファイルの使用が選択されているアクションの編集ページの例を示しています。

EC2Deploy アクションオプションを使用して仕様ファイルを使用する新しいパイプラインの編集アクションページ

入力アーティファクト

  • アーティファクトの数: 1

  • 説明: デプロイ中にスクリプトアクションをサポートするために提供されたファイル。

出力アーティファクト

  • アーティファクトの数: 0

  • 説明: 出力アーティファクトは、このアクションタイプには適用されません。

EC2 デプロイアクションのサービスロールポリシーのアクセス許可

CodePipeline がアクションを実行すると、CodePipeline サービスロールには以下のアクセス許可が必要になり、最小特権でアクセスできるように適切にスコープダウンされます。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "StatementWithAllResource", "Effect": "Allow", "Action": [ "ec2:DescribeInstances", "elasticloadbalancing:DescribeTargetGroupAttributes", "elasticloadbalancing:DescribeTargetGroups", "elasticloadbalancing:DescribeTargetHealth", "ssm:CancelCommand", "ssm:DescribeInstanceInformation", "ssm:ListCommandInvocations" ], "Resource": [ "*" ] }, { "Sid": "StatementForLogs", "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:{{region}}:{{AccountId}}:log-group:/aws/codepipeline/{{pipelineName}}:*" ] }, { "Sid": "StatementForElasticloadbalancing", "Effect": "Allow", "Action": [ "elasticloadbalancing:DeregisterTargets", "elasticloadbalancing:RegisterTargets" ], "Resource": [ "arn:aws:elasticloadbalancing:{{region}}:{{AccountId}}:targetgroup/[[targetGroupName]]/*" ] }, { "Sid": "StatementForSsmOnTaggedInstances", "Effect": "Allow", "Action": [ "ssm:SendCommand" ], "Resource": [ "arn:aws:ec2:{{region}}:{{AccountId}}:instance/*" ], "Condition": { "StringEquals": { "aws:ResourceTag/{{tagKey}}": "{{tagValue}}" } } }, { "Sid": "StatementForSsmApprovedDocuments", "Effect": "Allow", "Action": [ "ssm:SendCommand" ], "Resource": [ "arn:aws:ssm:{{region}}::document/AWS-RunPowerShellScript", "arn:aws:ssm:{{region}}::document/AWS-RunShellScript" ] } ] }

CloudWatch Logs のパイプラインのロググループ

CodePipeline は、アクションを実行するときに、次のようにパイプライン名を使用してロググループを作成します。これにより、パイプライン名を使用してアクセス許可の範囲をリソースのログ記録に絞り込むことができます。

/aws/codepipeline/MyPipelineName

ログ記録のための以下のアクセス許可は、サービスロールの上記の更新に含まれています。

  • logs:CreateLogGroup

  • logs:CreateLogStream

  • logs:PutLogEvents

アクションの詳細ダイアログページを使用してコンソールでログを表示するには、ログを表示するアクセス許可をコンソールロールに追加する必要があります。詳細については、「CodePipeline コンソールでコンピューティングログを表示するために必要なアクセス許可」でコンソールのアクセス許可ポリシーの例を参照してください。

CloudWatch Logs のサービスロールポリシーのアクセス許可

CodePipeline は、アクションを実行するときに、次のようにパイプライン名を使用してロググループを作成します。これにより、パイプライン名を使用してアクセス許可の範囲をリソースのログ記録に絞り込むことができます。

/aws/codepipeline/MyPipelineName

アクションの詳細ダイアログページを使用してコンソールでログを表示するには、ログを表示するアクセス許可をコンソールロールに追加する必要があります。詳細については、「CodePipeline コンソールでコンピューティングログを表示するために必要なアクセス許可」でコンソールのアクセス許可ポリシーの例を参照してください。

仕様ファイルのリファレンスをデプロイする

CodePipeline がアクションを実行するときに、インスタンスへのデプロイを設定する仕様ファイルを指定できます。デプロイ仕様ファイルは、デプロイライフサイクルイベントに応じてインストールする内容と実行するライフサイクルイベントフックを指定します。デプロイ仕様ファイルは常に YAML 形式です。デプロイ仕様ファイルは、次の目的で使用されます。

  • アプリケーションリビジョンのソースファイルを、インスタンスの宛先にマッピングします。

  • デプロイされたファイルのカスタムアクセス権限を指定する。

  • デプロイプロセスのさまざまなフェーズにおいて、各インスタンスで実行するスクリプトを指定する。

デプロイ仕様ファイルは、AppSpec ファイルを使用して CodeDeploy でサポートされている特定のデプロイ設定パラメータをサポートします。既存の AppSpec ファイルを直接使用でき、サポートされていないパラメータは無視されます。CodeDeploy の AppSpec ファイルの詳細については、CodeDeploy ユーザーガイド」の「アプリケーション仕様ファイルリファレンス」を参照してください。

ファイルデプロイパラメータは次のように指定されます。

  • files - デプロイ仕様ファイルは、デプロイファイルの source:destination: を指定します。

  • scripts - デプロイのスクリプト化されたイベント。BeforeDeploy と の 2 つのイベントがサポートされていますAfterDeploy

  • hooks - イベントのライフサイクルフック。次のフックがサポートされています: ApplicationStopBeforeInstallAfterInstallApplicationStart、および ValidateService

    注記

    hooks パラメータはCodeDeploy との AppSpec 互換性のために使用でき、バージョン 0.0 (AppSpec 形式) でのみ使用できます。この形式では、CodePipeline はイベントのベストエフォートマッピングを実行します。

正しい YAML 間隔を仕様ファイルで使用する必要があります。そうしないと、デプロイ仕様ファイル内の場所とスペース数が正しくない場合にエラーが発生します。間隔の詳細については、YAML の仕様を参照してください。

デプロイ仕様ファイルの例を以下に示します。

version: 0.1 files: - source: /index.html destination: /var/www/html/ scripts: BeforeDeploy: - location: scripts/install_dependencies timeout: 300 runas: myuser AfterDeploy: - location: scripts/start_server timeout: 300 runas: myuser

指定されたデプロイ仕様ファイルを使用してアクション設定を表示するには、「」の例を参照してくださいDeploy 仕様を使用したアクション宣言の例

アクションの宣言

YAML
name: DeployEC2 actions: - name: EC2 actionTypeId: category: Deploy owner: AWS provider: EC2 version: '1' runOrder: 1 configuration: InstanceTagKey: Name InstanceTagValue: my-instances InstanceType: EC2 PostScript: "test/script.sh", TargetDirectory: "/home/ec2-user/deploy" outputArtifacts: [] inputArtifacts: - name: SourceArtifact region: us-east-1
JSON
{ "name": "DeployEC2", "actions": [ { "name": "EC2Deploy", "actionTypeId": { "category": "Deploy", "owner": "AWS", "provider": "EC2", "version": "1" }, "runOrder": 1, "configuration": { "InstanceTagKey": "Name", "InstanceTagValue": "my-instances", "InstanceType": "EC2", "PostScript": "test/script.sh", "TargetDirectory": "/home/ec2-user/deploy" }, "outputArtifacts": [], "inputArtifacts": [ { "name": "SourceArtifact" } ], "region": "us-east-1" } ] },

Deploy 仕様を使用したアクション宣言の例

YAML
name: DeployEC2 actions: - name: EC2 actionTypeId: category: Deploy owner: AWS provider: EC2 version: '1' runOrder: 1 configuration: DeploySpec: "deployspec.yaml" InstanceTagKey: Name InstanceTagValue: my-instances InstanceType: EC2 outputArtifacts: [] inputArtifacts: - name: SourceArtifact region: us-east-1
JSON
{ "name": "DeployEC2", "actions": [ { "name": "EC2Deploy", "actionTypeId": { "category": "Deploy", "owner": "AWS", "provider": "EC2", "version": "1" }, "runOrder": 1, "configuration": { "DeploySpec": "deployspec.yaml", "InstanceTagKey": "Name", "InstanceTagValue": "my-instances", "InstanceType": "EC2" }, "outputArtifacts": [], "inputArtifacts": [ { "name": "SourceArtifact" } ], "region": "us-east-1" } ] },

このアクションを利用する際に役立つ関連リソースは以下の通りです。