質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Amazon S3

Amazon S3 (Simple Storage Service)とはアマゾン・ウェブ・サービスが提供するオンラインストレージサービスです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

解決済

1回答

948閲覧

aws-sdk-phpでs3にアクセスできなくなりました

notohantou

総合スコア7

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Amazon S3

Amazon S3 (Simple Storage Service)とはアマゾン・ウェブ・サービスが提供するオンラインストレージサービスです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

0クリップ

投稿2023/10/25 10:43

前提

AWSのEC2のAmazonLinux1→AmazonLinux2へのバージョンアップに伴い
phpも7.1→8.1にバージョンアップしました。
aws-sdk-phpを3.133→3.33にバージョンアップしました。

その結果、それまで動いていた以下のs3へのアクセス処理でエラーが出力されるようになりました。
尚、s3へのアクセス権限はEC2にアタッチしているIAMロールで保持しています。

require_once "/vendor/autoload.php"; $s3client = new Aws\S3\S3Client([ 'region' => 'ap-northeast-1', 'version' => 'latest', ]);

出力されたエラーメッセージ

Fatal error: Uncaught Error: Unknown named parameter $instance in app/vendor/aws/aws-sdk-php/src/Credentials/CredentialProvider.php:74 Stack trace: #0 app/vendor/aws/aws-sdk-php/src/Credentials/CredentialProvider.php(74): call_user_func_array() #1 app/vendor/aws/aws-sdk-php/src/ClientResolver.php(263): Aws\Credentials\CredentialProvider::defaultProvider() #2 app/vendor/aws/aws-sdk-php/src/AwsClient.php(158): Aws\ClientResolver->resolve() #3 app/vendor/aws/aws-sdk-php/src/S3/S3Client.php(257): Aws\AwsClient->__construct() #4 app/model/common/common.php(27): Aws\S3\S3Client->__construct() #5 {main} thrown in app/vendor/aws/aws-sdk-php/src/Credentials/CredentialProvider.php on line 74

試したこと

一時的にIAMアカウントを作成してそのアカウントにs3へのアクセス権限を付与し
そのアクセスキーを上のコードに追加したところ、正常にs3にアクセスできました。

エラーメッセージなどをインターネットで調べたのですが、情報が少なく
もし同種のエラーの解決をされた方などいらっしゃましたらアドバイス頂きたく。

何卒よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yu_1985

2023/10/25 11:54

乗っているインスタンスを変えたんですよね? その際に移行後のインスタンスに正しくIAMロールで権限を与えましたか?
notohantou

2023/10/25 14:16

コメントありがとうございます。 はい。新しいEC2インスタンスにも、元のインスタンスと同じIAMロールを設定しました。
guest

回答1

0

ベストアンサー

一般的な話としてあり得る可能性は、Amazon Linux側で
・そもそもIAMロール(インスタンスプロファイル)にしているつもりだったが、何等かの形でクレデンシャルが入っており、phpのコード側で明示的にクレデンシャルが使用されるように指定されていた
という可能性になります。

【参考】設定の優先順位(認証情報プロバイダチェーン)
https://docs.aws.amazon.com/ja_jp/sdk-for-php/v3/developer-guide/guide_credentials.html

aws configureの中身や環境変数などに関与するものがないのであれば、下記のIssueが該当しているのではないかと思います。

https://github.com/aws/aws-sdk-php/issues/2579

結論としては、なんでそんな古いSDK使ってるんですか、ということでクローズしていますね。
最新のSDKを利用してはいかがでしょうか。

投稿2023/10/26 01:33

KeisukeKoga

総合スコア125

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

notohantou

2023/10/26 03:23

コメントありがとうございます。 教えて頂いたissueがまさに今回の問題と同じもので、SDKを最新化する事で解決できました。 ext-simplexmlという拡張モジュールが未インストールだった事が原因で composer require aws/aws-sdk-php を実行した時にインストールされる 最新のSDKが「3.33.4」になっていたようで、同モジュールをインストール後に 再度SDKをインストールしたところ、無事に最新版がインストールでき、s3にアクセスできない問題が解消されました。 お忙しい中ご新設にアドバイスを頂き本当にありがとうございます。 重ねて御礼申し上げます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問