web-dev-qa-db-ja.com

AWSCodebuildで `source`を実行できません

Lambdaベースのサービスの自動デプロイにAWSCodeBuildとTerraformを使用しています。私は次のことを達成する非常に単純なbuildscript.ymlを持っています:

  • 依存関係を取得する
  • テストを実行する
  • AWS認証情報を取得し、ファイルに保存します(詳細は以下を参照)
  • Credsファイルを入手する
  • Terraformを実行する

「credsファイルを入手する」というステップは、私が苦労しているところです。 curl 169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URIからAWSコンテナのクレジットを取得し、次の形式でファイルに保存する単純なbashワンライナーがあります。

export AWS_ACCESS_KEY_ID=SOMEACCESSKEY
export AWS_SECRET_ACCESS_KEY=MYSECRETKEY
export AWS_SESSION_TOKEN=MYSESSIONTOKEN

もちろん、明らかな手順は、このファイルを単にsourceすることです。これにより、これらの変数を環境に追加して、Terraformで使用できるようになります。ただし、source /path/to/creds_file.txtを実行すると、CodeBuildは次を返します。

[Container] 2017/06/28 18:28:26 Running command source /path/to/creds_file.txt
/codebuild/output/tmp/script.sh: 4: /codebuild/output/tmp/script.sh: source: not found

sourceからaptをインストールしようとしましたが、sourceが見つからないというエラーが表示されます(はい、apt updateなどを実行しました)。 。 CodeBuildのPython 2.7環境で標準のUbuntuイメージを使用しています。Codebuildでこの資格情報ファイルをソースするためにTerraformの作業資格情報を取得するにはどうすればよいですか?.

ありがとう!

12
Tanishq dubey

sourceの代わりに.を使用してみてください。 sourceはPOSIXに準拠していません。 ss64.com/bash/source.html

9
jeffrey

AWS CodeBuildイメージには、POSIX準拠のシェルが付属しています。ここで画像の内容を確認できます: https://github.com/aws/aws-codebuild-docker-images

特定のシェル機能(ソースなど)を使用している場合は、コマンドを実行するシェルを指定するShebangを使用してコマンドをスクリプトファイルにラップし、buildspec.ymlからこのスクリプトを実行することをお勧めします。 。

build-script.sh

     #!/bin/bash
      <commands>
      ...

buildspec.yml(スニペット)

build: commands: - path/to/script/build-script.sh

4
sdhillon

同様の問題がありました。 /bin/bash <script>.shを介してスクリプトを直接呼び出すことで解決しました

3
Joro Tenev

コメントするのに十分な評判がないので、ここではその場でジェフリーの答えを拡張します。

ファイル名がドット(。)で始まる場合に備えて、以下は失敗します

. .filename

次のようなディレクトリ名でファイル名を修飾する必要があります

 . ./.filename
0
brajmohan