Lambdaベースのサービスの自動デプロイにAWSCodeBuildとTerraformを使用しています。私は次のことを達成する非常に単純なbuildscript.yml
を持っています:
「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の作業資格情報を取得するにはどうすればよいですか?.
ありがとう!
source
の代わりに.
を使用してみてください。 source
はPOSIXに準拠していません。 ss64.com/bash/source.html
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
同様の問題がありました。 /bin/bash <script>.sh
を介してスクリプトを直接呼び出すことで解決しました
コメントするのに十分な評判がないので、ここではその場でジェフリーの答えを拡張します。
ファイル名がドット(。)で始まる場合に備えて、以下は失敗します
. .filename
次のようなディレクトリ名でファイル名を修飾する必要があります
. ./.filename