翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
カスタムコンポーネントドキュメントでの変数の使用
変数を使用すると、アプリケーション全体で使用できるわかりやすい名前でデータにラベルを付けることができます。複雑なワークフローでは、シンプルで読み取り可能な形式でカスタム変数を定義し、 AWSTOE コンポーネントの YAML アプリケーションコンポーネントドキュメントで参照できます。
このセクションでは、構文、名前の制約、例など、YAML アプリケーション AWSTOE コンポーネントドキュメントでコンポーネントの変数を定義するのに役立つ情報を提供します。
定数
定数は不変の変数で、一度定義すると変更したりオーバーライドしたりすることはできません。定数は、 AWSTOE ドキュメントの constantsセクションの値を使用して定義できます。
定数命名規則
名前は 3 文字以上 128 文字以下でなければならない。
名前には、英数字(a-z, A-Z, 0-9)、ダッシュ(-)、アンダースコア(_)のみを含めることができます。
名前は文書内で一意でなければならない。
名前は YAML 文字列として指定する必要があります。
[Syntax] (構文)
constants: - <name>: type: <constant type> value: <constant value>
| キー名 | 必要 | 説明 |
|---|---|---|
|
|
はい |
定数の名前。ドキュメント内で一意である必要があります (他のパラメータ名や定数と同じであってはなりません)。 |
|
はい | 定数の値。 |
|
はい | 定数のタイプ。対応タイプはstring。 |
文書内の参照定数値
次のように、YAML ドキュメント内のステップもしくはループ入力で定数を参照できます:
-
定数参照は大文字と小文字を区別し、名前は正確に一致しなければならない。
-
名前は二重中括弧
{{MyConstant}}で囲む必要があります。 -
中括弧内にはスペースを入れてもかまいませんが、自動的に切り捨てられます。例えば、以下のリファレンスはすべて有効です。
{{,MyConstant}}{{,MyConstant}}{{,MyConstant}}{{MyConstant}} -
YAML ドキュメント内の参照は文字列 (一重引用符または二重引用符で囲む) として指定する必要があります。
例えば、
- {{は文字列として識別されないため無効です。MyConstant}}ただし、参照先
- '{{とMyConstant}}'- "{{はどちらも有効です。MyConstant}}"
例
ステップ入力で参照される定数
name: Download AWS CLI version 2 schemaVersion: 1.0 constants: - Source: type: string value: https://awscli.amazonaws.com/AWSCLIV2.msi phases: - name: build steps: - name: Download action: WebDownload inputs: - source: '{{ Source }}' destination: 'C:\Windows\Temp\AWSCLIV2.msi'
ループ入力で参照される定数
name: PingHosts schemaVersion: 1.0 constants: - Hosts: type: string value: 127.0.0.1,amazon.com phases: - name: build steps: - name: Ping action: ExecuteBash loop: forEach: list: '{{ Hosts }}' delimiter: ',' inputs: commands: - ping -c 4 {{ loop.value }}
パラメータ
パラメータは、呼び出し元のアプリケーションがランタイムに提供できる設定を含む可変変数です。YAML ドキュメントの Parameters セクションでパラメータを定義できます。
パラメータ命名規則
名前は 3 文字以上 128 文字以下でなければならない。
名前には、英数字(a-z, A-Z, 0-9)、ダッシュ(-)、アンダースコア(_)のみを含めることができます。
名前は文書内で一意でなければならない。
名前は YAML 文字列として指定する必要があります。
構文
parameters: - <name>: type: <parameter type> default: <parameter value> description: <parameter description>
キー名 |
必要 |
説明 |
|---|---|---|
|
はい |
パラメータの名前。ドキュメント内で一意である必要があります (他のパラメータ名や定数と同じであってはなりません)。 |
|
はい |
パラメータのデータ型。対応するタイプは |
|
いいえ |
パラメータのデフォルト値。 |
|
いいえ |
パラメータを記述します。 |
ドキュメント内の参照パラメータ値
次のように、YAML ドキュメント内のステップ入力またはループ入力でパラメータを参照できます。
-
パラメータ参照は大文字と小文字が区別され、名前は完全に一致する必要があります。
-
名前は二重中括弧
{{MyParameter}}で囲む必要があります。 -
中括弧内にはスペースを入れてもかまいませんが、自動的に切り捨てられます。例えば、以下のリファレンスはすべて有効です。
{{,MyParameter}}{{,MyParameter}}{{,MyParameter}}{{MyParameter}} -
YAML ドキュメント内の参照は文字列 (一重引用符または二重引用符で囲む) として指定する必要があります。
例えば、
- {{は文字列として識別されないため無効です。MyParameter}}ただし、参照先
- '{{とMyParameter}}'- "{{はどちらも有効です。MyParameter}}"
例
次の例は YAML ドキュメントでのパラメータの使用方法を示しています。
-
ステップ入力のパラメータを参照してください。
name: Download AWS CLI version 2 schemaVersion: 1.0 parameters: - Source: type: string default: 'https://awscli.amazonaws.com/AWSCLIV2.msi' description: The AWS CLI installer source URL. phases: - name: build steps: - name: Download action: WebDownload inputs: - source: '{{ Source }}' destination: 'C:\Windows\Temp\AWSCLIV2.msi' -
ループ入力のパラメータを参照する:
name: PingHosts schemaVersion: 1.0 parameters: - Hosts: type: string default: 127.0.0.1,amazon.com description: A comma separated list of hosts to ping. phases: - name: build steps: - name: Ping action: ExecuteBash loop: forEach: list: '{{ Hosts }}' delimiter: ',' inputs: commands: - ping -c 4 {{ loop.value }}
ランタイムにパラメータをオーバーライドする
の --parametersオプションをキーと値のペア AWS CLI とともに使用して、実行時にパラメータ値を設定できます。
<name><value>パラメータのキーと値のペアを等号 (=) で区切って名前と値として指定します。
複数のパラメータはカンマで区切る必要があります。
YAML コンポーネントドキュメントにないパラメータ名は無視されます。
パラメータ名と値はどちらも必須です。
重要
コンポーネントパラメータはプレーンテキストの値で、 AWS CloudTrailに記録されます。シークレットを保存するには、 AWS Secrets Manager または AWS Systems Manager Parameter Store を使用することをお勧めします。Secrets Manager の詳細については、AWS Secrets Manager ユーザーガイドの Secrets Manager とはを参照してください。 AWS Systems Manager パラメータストアについては、AWS Systems Manager ユーザーガイドのAWS Systems Manager パラメータストアを参照。
構文
--parametersname1=value1,name2=value2...
CLI オプション: |
必要 |
説明 |
|---|---|---|
--parameters |
いいえ |
このオプションは、パラメータ名をキーとして、キーと値のペアのリストを取得します。 |
例
次の例は YAML ドキュメントでのパラメータの使用方法を示しています。
-
この
--parameterオプションで指定されたパラメータのキーと値のペアは無効です。--parameters ntp-server= -
AWS CLIに
--parameterオプションでパラメータのキーと値のペアを 1 つ設定します。--parameters ntp-server=ntp-server-windows-qe.us-east1.amazon.com -
AWS CLIの
--parameterオプションで複数のパラメータのキーと値のペアを設定します。--parameters ntp-server=ntp-server.amazon.com,http-url=https://internal-us-east1.amazon.com
Systems Manager パラメータストアパラメータを使用する
変数の前に を付けることで、コンポーネントドキュメントで AWS Systems Manager Parameter Store パラメータ (SSM パラメータ) を参照できますaws:ssm。例えば、
{{ aws:ssm:/my/param }} は SSM パラメータ の値に解決されます/my/param。
この機能は、次の SSM パラメータタイプをサポートしています。
-
文字列 – AWSTOE 文字列タイプにマッピングされます。
-
StringList – タイプにマッピングします AWSTOE
stringList。 -
SecureString – AWSTOE 文字列タイプにマッピングします。
パラメータストアの詳細については、 AWS Systems Manager ユーザーガイドのAWS Systems Manager 「パラメータストア」を参照してください。
SSM パラメータ を使用してシー AWS Secrets Manager クレットを参照することもできますSecureString。例: {{ aws:ssm:/aws/reference/secretsmanager/test/test-secret }}。詳細については、「Parameter Store パラメータからのシークレットの参照 AWS Secrets Manager」を参照してください。
重要
Image Builder は、ログからSecureStringパラメータ解決を除外します。ただし、コンポーネントドキュメントで発行されたコマンドによって機密情報がログに記録されないようにする責任もあります。たとえば、安全な文字列で echo コマンドを使用すると、コマンドはプレーンテキストの値をログに書き込みます。
必要な IAM 許可
コンポーネントで Systems Manager パラメータを使用するには、インスタンスロールにパラメータリソース ARN のアクセスssm:GetParameter許可が必要です。例えば、次のようになります。
暗号化された値にアクセスするには、次のアクセス許可も必要です。
-
カスタマーマネージドで暗号化された
SecureStringパラメータまたは AWS Secrets Manager 値kms:Decryptに を追加します AWS KMS key。 -
Secrets Manager シークレットを参照
secretsmanager:GetSecretValueする場合は、 を追加します。
コンポーネントドキュメントで SSM パラメータを参照する
次の例は、コンポーネント内の Systems Manager パラメータの Systems Manager パラメータストアパラメータを参照する方法を示しています。
name: UseSSMParameterVariable description: This is a sample component document that prints out the value of an SSM Parameter. Never do this for a SecureString parameter. schemaVersion: 1.0 phases: - name: verify steps: - name: EchoParameterValue action: ExecuteBash inputs: commands: - echo "Log SSM parameter name:/my/test/param, value {{ aws:ssm:/my/test/param}}."
SSM パラメータの動的ランタイム変数解決
AWSTOE には、変数参照内で実行時に値を操作または変換するために使用できる以下の組み込み関数が用意されています。
関数の解決
resolve 関数は、別の変数参照内の変数参照を解決し、動的変数名参照を可能にします。これは、パラメータパスの一部が可変で、ドキュメントパラメータとして渡される可能性がある SSM パラメータを使用する場合に便利です。
resolve 関数は、SSM パラメータの名前部分の動的解決のみをサポートします。
構文
dynamic_variable 次の例では、 は SSM パラメータの名前を表し、次のいずれかである必要があります。
-
SSM パラメータリファレンス (例:
aws:ssm:)/my/param -
コンポーネントドキュメントのパラメータリファレンス (例:
)parameter-name
{{ aws:ssm:resolve(dynamic_variable) }}
例: 実行時に SSM パラメータを解決する
次の例は、YAML コンポーネントドキュメントで resolve関数を使用する方法を示しています。
name: SsmParameterTest description: This component verifies an SSM parameter variable reference with the echo command. schemaVersion: 1.0 parameters: - parameter-name: type: string description: "test" phases: - name: validate steps: - name: PrintDynamicVariable action: ExecuteBash inputs: commands: - echo "{{ aws:ssm:resolve(parameter-name) }}"
環境変数を使用します。
AWSTOE は、ビルドインスタンスまたはテストインスタンスに設定されているオペレーティングシステムの環境変数を解決できます。環境変数を参照するには、変数名の前に を付けますenv:。たとえば、 はインスタンスのMY_VAR環境変数の値に{{ env:解決されます。MY_VAR }}
AWSTOE は環境変数名と正確に一致します。名前には、ドット、スペース、括弧など、オペレーティングシステムに有効な任意の文字を含めることができます。たとえば、 {{ env:ProgramFiles(x86) }}は Windows での有効なリファレンスです。
次の例は、コンポーネント内の環境変数を参照する方法を示しています。
name: UseEnvironmentVariable description: This sample component prints out the value of an environment variable. schemaVersion: 1.0 phases: - name: build steps: - name: EchoEnvironmentVariable action: ExecuteBash inputs: commands: - echo "The value of SOME_VAR is {{ env:SOME_VAR}}."
Image Builder が提供する環境変数
Image Builder がビルドインスタンスまたはテストインスタンスでコンポーネントを実行すると、現在のイメージビルドを記述する環境変数が設定されます。コンポーネントは、 AWSTOE このトピックで前述したenv:変数プレフィックスを使用してこれらの値を読み取ります。
Image Builder には、次の環境変数が用意されています。
名前 |
説明 |
|---|---|
|
現在のイメージビルドのワークフロー実行の ID。 |
|
コンポーネントを実行しているワークフローステップ実行の ID。 |
|
Image Builder が作成するイメージビルドバージョンの Amazon リソースネーム (ARN)。 |
|
イメージパイプラインの ARN。ビルドがパイプラインから実行されない場合、この値は空の文字列です。 |
|
現在のイメージビルドステージ: ビルドステージ このステージは、 AWSTOE コンポーネントドキュメントのフェーズ ( |
|
イメージのセマンティックバージョン ( など |
|
イメージのビルドバージョン番号 (例: |
次の例は、コンポーネント内の Image Builder 環境変数を読み取る方法を示しています。
name: UseImageBuilderEnvironmentVariables description: This sample component prints out Image Builder environment variable values. schemaVersion: 1.0 phases: - name: build steps: - name: EchoImageBuildValues action: ExecuteBash inputs: commands: - echo "Image phase: {{ env:IMAGE_PHASE }}." - echo "Image build version ARN: {{ env:IMAGE_BUILD_VERSION_ARN }}."
インスタンスメタデータ (IMDS) 変数を使用する
AWSTOE は、ビルドまたはテストインスタンスの Amazon EC2 インスタンスメタデータサービス (IMDS) から値を解決できます。メタデータ値を参照するには、メタデータパスの前に を付けますaws:imds:。パスはインスタンスメタデータmeta-data/カテゴリを基準としています。たとえば、 はインスタンス ID を{{ aws:imds:instance-id }}解決します。リファレンスは に{{ aws:imds:placement/region }}解決されます AWS リージョン。
サポートされていないメタデータパス
AWSTOE は、 iam/および identity-credentials/メタデータパスをサポートしていません。これらのパスは、機密性の高い認証情報データを返します。 は、コンポーネントドキュメントを検証するときに、それらへの参照 AWSTOE を拒否します。
インスタンスメタデータの詳細については、「Amazon EC2 ユーザーガイド」の「インスタンスメタデータを使用して EC2 インスタンスを管理する」を参照してください。 Amazon EC2
次の例は、コンポーネントで IMDS 値を参照する方法を示しています。
name: UseInstanceMetadataVariable description: This sample component prints out the instance ID from IMDS. schemaVersion: 1.0 phases: - name: build steps: - name: EchoInstanceId action: ExecuteBash inputs: commands: - echo "The instance ID is {{ aws:imds:instance-id }}."
コンテキスト変数を使用する
AWSTOE には、現在の実行とインスタンスを記述するコンテキスト変数が用意されています。コンテキスト変数を参照するには、キーの前に を付けますcontext:。たとえば、 は AWS アカウント ID を{{ context:accountId }}解決します。
AWSTOE には、次のコンテキスト変数が用意されています。
キー |
説明 |
|---|---|
|
現在の AWSTOE 実行の ID。 |
|
インスタンスが実行される AWS アカウントの ID。 |
|
インスタンス AWS リージョン が実行される 。 |
|
インスタンスのオペレーティングシステムプラットフォーム (例: |
|
オペレーティングシステム名 (例: |
|
オペレーティングシステムのバージョン ( など |
|
UTC 形式の現在の日付 |
|
RFC 3339 形式の UTC での現在の日時 (例: |
|
ランダムに生成されたバージョン 4 UUID。 |
|
インスタンスのホスト名。 |
|
現在実行中のフェーズの名前。 |
|
現在実行中のステップの名前。 |
注記
インスタンス ID を取得するには、コンテキスト変数{{ aws:imds:instance-id }}ではなく IMDS 変数を使用します。
次の例は、コンポーネント内のコンテキスト変数を参照する方法を示しています。
name: UseContextVariables description: This sample component prints out context variable values. schemaVersion: 1.0 phases: - name: build steps: - name: EchoContextValues action: ExecuteBash inputs: commands: - echo "Account: {{ context:accountId }}, OS: {{ context:osName }}."